My favorites | Sign in
Project Logo
          
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
"""The macros below aren't reliable (e.g., some fail if ``arg_string`` is `None`)
or safe (``include`` doesn't guard against circular reference). For a more complete example, see
`the code used in the sandbox <http://code.google.com/p/urlminer/source/browse/examples/wiki/macros.py>`_.

"""
import genshi.builder as bldr
import dialects, core
import os

class Page(object):
root = 'test_pages'
def __init__(self,page_name):
self.name = page_name

def get_raw_body(self):
try:
f = open(os.path.join(self.root,self.name + '.txt'),'r')
s = f.read()
f.close()
return s
except IOError:
return None

def exists(self):
try:
f = open(os.path.join(self.root,self.name + '.txt'),'r')
f.close()
return True
except IOError:
return False


def class_func(page_name):
if not Page(page_name).exists():
return 'nonexistent'

def path_func(page_name):
if page_name == 'Home':
return 'FrontPage'
else:
return page_name

## Start of macros

def include(arg_string,body,isblock):
page = Page(arg_string.strip())
return text2html.generate(page.get_raw_body())

def include_raw(arg_string,body,isblock):
page = Page(arg_string.strip())
return bldr.tag.pre(page.get_raw_body(),class_='plain')

def include_source(arg_string,body,isblock):
page = Page(arg_string.strip())
return bldr.tag.pre(text2html.render(page.get_raw_body()))

def source(arg_string,body,isblock):
return bldr.tag.pre(text2html.render(body))

def pre(arg_string,body,isblock):
return bldr.tag.pre(body)

## End of macros

macros = {'include':include,
'include-raw':include_raw,
'include-source':include_source,
'source':source,
'pre':pre
}

def macro_dispatcher(macro_name,arg_string,body,isblock,environ):
if macro_name in macros:
return macros[macro_name](arg_string,body,isblock)

dialect = dialects.create_dialect(dialects.creole11_base,
wiki_links_base_url='http://creoleparser.srcom.org/cgi-bin/creolepiki/',
wiki_links_space_char='',
# use_additions=True,
no_wiki_monospace=False,
wiki_links_class_func=class_func,
wiki_links_path_func=path_func,
macro_func=macro_dispatcher)

text2html = core.Parser(dialect)


if __name__ == '__main__':

text = Page('CheatSheetPlus').get_raw_body()
f = open(os.path.join('test_pages','CheatSheetPlus.html'),'r')
rendered = f.read()
f.close()
f = open(os.path.join('test_pages','template.html'),'r')
template = f.read()
f.close()

#out = open(os.path.join('test_pages','out.html'),'w')
#out.write(template % text2html(text))
#out.close()

assert template % text2html(text) == rendered



Show details Hide details

Change log

r148 by stephen.h.day on Mar 07, 2009   Diff
no longer appending \n during
preprocessing
needed to tweak several WikiElement re's
for this
Go to: 
Sign in to write a code review

Older revisions

r142 by stephen.h.day on Feb 28, 2009   Diff
final refactoring of dialects.py
r139 by stephen.h.day on Feb 28, 2009   Diff
more refactoring of dialects.py
I think it's ready for 0.6
r138 by stephen.h.day on Feb 27, 2009   Diff
worked on docs
All revisions of this file

File info

Size: 2975 bytes, 105 lines
Hosted by Google Code