summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--wiki2html.py68
-rw-r--r--wiki2text.py60
-rw-r--r--wikimarkup.py257
3 files changed, 192 insertions, 193 deletions
diff --git a/wiki2html.py b/wiki2html.py
index 77cb97a..eee592d 100644
--- a/wiki2html.py
+++ b/wiki2html.py
@@ -40,9 +40,9 @@ class HtmlWikiMarkup (WikiMarkup):
40 40
41 envt = { "unnumbered": { "hdr": "ul", 41 envt = { "unnumbered": { "hdr": "ul",
42 "elt": ["li"] }, 42 "elt": ["li"] },
43 "numbered": { "hdr": "ol", 43 "numbered": { "hdr": "ol",
44 "elt": ["li"] }, 44 "elt": ["li"] },
45 "defn": { "hdr": "dl", 45 "defn": { "hdr": "dl",
46 "elt": ["dt","dd"] } } 46 "elt": ["dt","dd"] } }
47 47
48 def mktgt(self, tgt, lang = None): 48 def mktgt(self, tgt, lang = None):
@@ -81,10 +81,10 @@ class HtmlWikiMarkup (WikiMarkup):
81 81
82 82
83 def fmtlink(self, elt, istmpl): 83 def fmtlink(self, elt, istmpl):
84 arg = self.format(elt[1][0]) 84 arg = self.format(elt['content'][0])
85 text = None 85 text = None
86 if len(elt[1]) > 1: 86 if len(elt['content']) > 1:
87 s = map(self.format, elt[1]) 87 s = map(self.format, elt['content'])
88 if s[0] == 'disambigR' or s[0] == 'wikiquote': 88 if s[0] == 'disambigR' or s[0] == 'wikiquote':
89 return "" 89 return ""
90 elif len(s) > 1 and s[1] == 'thumb': 90 elif len(s) > 1 and s[1] == 'thumb':
@@ -129,8 +129,8 @@ class HtmlWikiMarkup (WikiMarkup):
129 return self.fmtlink(elt, True) 129 return self.fmtlink(elt, True)
130 130
131 def str_ref(self, elt): 131 def str_ref(self, elt):
132 target = elt[1] 132 target = elt['ref']
133 text = self.format(elt[2]) 133 text = self.format(elt['content'])
134 return "<a href=\"%s\">%s</a>" % (target, 134 return "<a href=\"%s\">%s</a>" % (target,
135 text if (text and text != '') \ 135 text if (text and text != '') \
136 else target) 136 else target)
@@ -142,30 +142,30 @@ class HtmlWikiMarkup (WikiMarkup):
142 return string 142 return string
143 143
144 def str_it(self, elt): 144 def str_it(self, elt):
145 return "<i>" + self.concat(elt[1]) + "</i>" 145 return "<i>" + self.concat(elt['content']) + "</i>"
146 146
147 def str_bold(self, elt): 147 def str_bold(self, elt):
148 return "<b>" + self.concat(elt[1]) + "</b>" 148 return "<b>" + self.concat(elt['content']) + "</b>"
149 149
150 def str_hdr(self, elt): 150 def str_hdr(self, elt):
151 level = elt[1] + 1 151 level = elt['level'] + 1
152 if level > 4: 152 if level > 4:
153 level = 4 153 level = 4
154 return "<h%s>%s</h%s>" % (level, self.format(elt[2]), level) 154 return "<h%s>%s</h%s>" % (level, self.format(elt['content']), level)
155 155
156 def str_bar(self): 156 def str_bar(self):
157 return "<hr/>" 157 return "<hr/>"
158 158
159 def str_env(self, elt): 159 def str_env(self, elt):
160 type = elt[1] 160 type = elt['envtype']
161 lev = elt[2] 161 lev = elt['level']
162 if lev > 4: 162 if lev > 4:
163 lev = 2 163 lev = 2
164 string = "" 164 string = ""
165 for s in elt[3]: 165 for s in elt['content']:
166 n = s[1]; 166 n = s['subtype'];
167 string += "<%s>%s</%s>" % (self.envt[type]["elt"][n], 167 string += "<%s>%s</%s>" % (self.envt[type]["elt"][n],
168 self.format(s[2]), 168 self.format(s['content']),
169 self.envt[type]["elt"][n]) 169 self.envt[type]["elt"][n])
170 return "<%s>%s</%s>" % (self.envt[type]["hdr"], 170 return "<%s>%s</%s>" % (self.envt[type]["hdr"],
171 string, 171 string,
@@ -174,45 +174,45 @@ class HtmlWikiMarkup (WikiMarkup):
174 174
175 def str_para(self, elt): 175 def str_para(self, elt):
176 string = ""; 176 string = "";
177 for x in elt[1]: 177 for x in elt['content']:
178 string += self.format(x) 178 string += self.format(x)
179 return "<p>" + string + "</p>" 179 return "<p>" + string + "</p>"
180 180
181 def str_ind(self, elt): 181 def str_ind(self, elt):
182 return ("&nbsp;" * 2 * elt[1]) + self.format(elt[2]) 182 return ("&nbsp;" * 2 * elt['level']) + self.format(elt['content'])
183 183
184 def format(self, elt): 184 def format(self, elt):
185 if elt[0] == TEXT: 185 if elt['type'] == 'TEXT':
186 if isinstance(elt[1],list): 186 if isinstance(elt['content'],list):
187 string = "" 187 string = ""
188 for s in elt[1]: 188 for s in elt['content']:
189 string += s 189 string += s
190 else: 190 else:
191 string = elt[1] 191 string = elt['content']
192 return string 192 return string
193 elif elt[0] == PARA: 193 elif elt['type'] == 'PARA':
194 return self.str_para(elt) 194 return self.str_para(elt)
195 elif elt[0] == IT: 195 elif elt['type'] == 'IT':
196 return self.str_it(elt) 196 return self.str_it(elt)
197 elif elt[0] == BOLD: 197 elif elt['type'] == 'BOLD':
198 return self.str_bold(elt) 198 return self.str_bold(elt)
199 elif elt[0] == LINK: 199 elif elt['type'] == 'LINK':
200 return self.str_link(elt) 200 return self.str_link(elt)
201 elif elt[0] == TMPL: 201 elif elt['type'] == 'TMPL':
202 return self.str_tmpl(elt) 202 return self.str_tmpl(elt)
203 elif elt[0] == BAR: 203 elif elt['type'] == 'BAR':
204 return self.str_bar() 204 return self.str_bar()
205 elif elt[0] == HDR: 205 elif elt['type'] == 'HDR':
206 return self.str_hdr(elt) 206 return self.str_hdr(elt)
207 elif elt[0] == REF: 207 elif elt['type'] == 'REF':
208 return self.str_ref(elt) 208 return self.str_ref(elt)
209 elif elt[0] == ENV: 209 elif elt['type'] == 'ENV':
210 return self.str_env(elt) 210 return self.str_env(elt)
211 elif elt[0] == IND: 211 elif elt['type'] == 'IND':
212 return self.str_ind(elt) 212 return self.str_ind(elt)
213 elif elt[0] == SEQ: 213 elif elt['type'] == 'SEQ':
214 string = "" 214 string = ""
215 for x in elt[1]: 215 for x in elt['content']:
216 string += self.format(x) 216 string += self.format(x)
217 return string 217 return string
218 else: 218 else:
diff --git a/wiki2text.py b/wiki2text.py
index 005e551..c94ae51 100644
--- a/wiki2text.py
+++ b/wiki2text.py
@@ -66,9 +66,9 @@ class TextWikiMarkup (WikiMarkup):
66 return self.html_base % { 'lang' : lang } + urllib.quote(tgt) 66 return self.html_base % { 'lang' : lang } + urllib.quote(tgt)
67 67
68 def fmtlink(self, elt, istmpl): 68 def fmtlink(self, elt, istmpl):
69 arg = self.format(elt[1][0]) 69 arg = self.format(elt['content'][0])
70 if len(elt[1]) > 1: 70 if len(elt['content']) > 1:
71 s = map(self.format, elt[1]) 71 s = map(self.format, elt['content'])
72 text = s[1] 72 text = s[1]
73 else: 73 else:
74 s = None 74 s = None
@@ -143,10 +143,10 @@ class TextWikiMarkup (WikiMarkup):
143 return output + linebuf 143 return output + linebuf
144 144
145 def format(self, elt): 145 def format(self, elt):
146 if elt[0] == TEXT: 146 if elt['type'] == 'TEXT':
147 if isinstance(elt[1],list): 147 if isinstance(elt['content'],list):
148 string = "" 148 string = ""
149 for s in elt[1]: 149 for s in elt['content']:
150 if string: 150 if string:
151 if string.endswith("."): 151 if string.endswith("."):
152 string += " " 152 string += " "
@@ -154,22 +154,22 @@ class TextWikiMarkup (WikiMarkup):
154 string += " " 154 string += " "
155 string += s 155 string += s
156 else: 156 else:
157 string = elt[1] 157 string = elt['content']
158 elif elt[0] == PARA: 158 elif elt['type'] == 'PARA':
159 string = ""; 159 string = "";
160 for x in elt[1]: 160 for x in elt['content']:
161 string += self.format(x) 161 string += self.format(x)
162 string = self.fmtpara(string) + '\n\n' 162 string = self.fmtpara(string) + '\n\n'
163 elif elt[0] == IT: 163 elif elt['type'] == 'IT':
164 string = "" 164 string = ""
165 for x in elt[1]: 165 for x in elt['content']:
166 s = self.format(x) 166 s = self.format(x)
167 if s: 167 if s:
168 string += " " + s 168 string += " " + s
169 string = "_" + string.lstrip(" ") + "_" 169 string = "_" + string.lstrip(" ") + "_"
170 elif elt[0] == BOLD: 170 elif elt['type'] == 'BOLD':
171 string = "" 171 string = ""
172 for x in elt[1]: 172 for x in elt['content']:
173 s = self.format(x) 173 s = self.format(x)
174 if s: 174 if s:
175 if string.endswith("."): 175 if string.endswith("."):
@@ -178,36 +178,36 @@ class TextWikiMarkup (WikiMarkup):
<