diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-03-03 22:52:32 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-03-03 22:52:32 +0200 |
commit | 1fecd367161554c1a21b7bf57f54036b039d75f8 (patch) | |
tree | 6413d6cd00b44b0c7d58bb075d5feb0869f82857 /wiki2html.py | |
parent | b667a722ceb7db64ed243de706aba795d2a895e9 (diff) | |
download | wit-1fecd367161554c1a21b7bf57f54036b039d75f8.tar.gz wit-1fecd367161554c1a21b7bf57f54036b039d75f8.tar.bz2 |
Implement conversion to HTML
Diffstat (limited to 'wiki2html.py')
-rw-r--r-- | wiki2html.py | 186 |
1 files changed, 92 insertions, 94 deletions
diff --git a/wiki2html.py b/wiki2html.py index 07a8879..aa450e2 100644 --- a/wiki2html.py +++ b/wiki2html.py @@ -28,28 +28,6 @@ class HtmlWikiMarkup (WikiMarkup): Should be before. """ - ST_INIT = 0 - ST_PARA = 1 - ST_OPEN = 2 - - state = [] - - def opara(self): - if self.state[-1] == self.ST_PARA: - self.state[-1] = self.ST_OPEN - return "<p>" - else: - return "" - - def cpara(self): - state = self.state.pop(); - self.state.append(self.ST_INIT) - if state == self.ST_OPEN: - return "</p>" - else: - return "" - - def wiki_ns_name(self, str): if str in wiki_ns[self.lang]: return wiki_ns[self.lang][str] @@ -68,19 +46,21 @@ class HtmlWikiMarkup (WikiMarkup): lang = self.lang return self.html_base % { 'lang' : lang } + urllib.quote(tgt) - def link(self, tok, env, istmpl): - arg = self.fmtok(tok[1], env) - text = self.fmtok(tok[2], env) + def fmtlink(self, elt, istmpl): + arg = self.format(elt[1][0]) + if len(elt[1]) > 1: + text = self.format(elt[1][1]) + else: + text = None (qual,sep,tgt) = arg.partition(':') if tgt != '': ns = self.wiki_ns_name(qual) if ns: if ns == 'NS_IMAGE': - targ = text.split ('|') # FIXME - type = targ[0] - width = targ[1] - caption = targ[2] + type = self.format(elt[1][2]) + width = self.format(elt[1][3]) + caption = self.format(elt[1][4]) intwidth = int (width[:-2]) return '<div class="thumb tright"><div class="thumbinner" style="width:%dpx;"><a href="%s" class="image" title="%s"><img alt="" src="%s" class="thumbimage" border="0"></a><div class="thumbcaption"><div class="magnify"><a href="%s" class="internal"><img src="/static/magnify-clip.png" alt="" width="15" height="11"></a></div>%s</div></div>' % \ ((intwidth + 2), @@ -108,69 +88,106 @@ class HtmlWikiMarkup (WikiMarkup): text if (text and text != '') \ else arg) - - def str_link(self, tok, env): - return self.link(tok, env, False) + def str_link(self, elt): + return self.fmtlink(elt, False) - def str_tmpl(self, tok, env): - return self.link(tok, env, True) + def str_tmpl(self, elt): + return self.fmtlink(elt, True) - def str_ref(self, tok, env): - target = self.fmtok(tok[1], env) - text = self.fmtok(tok[2], env) + def str_ref(self, elt): + target = elt[1] + text = self.format(elt[2]) return "<a href=\"%s\">%s</a>" % (target, text if (text and text != '') \ else target) - def str_it(self, tok, env): - return "<i>" + self.fmtok(tok[1], env) + "</i>" + + def concat(self, eltlist): + string = "" + for x in eltlist: + string += " " + self.format(x) + return string + + def str_it(self, elt): + return "<i>" + self.concat(elt[1]) + "</i>" - def str_bold(self, tok, env): - return "<b>" + self.fmtok(tok[1], env) + "</b>" + def str_bold(self, elt): + return "<b>" + self.concat(elt[1]) + "</b>" - def str_hdr(self, tok, env): - level = tok[1] + def str_hdr(self, elt): + level = elt[1] if level > 4: level = 4 - return "<h%s>%s</h%s>" % (level, self.fmtok(tok[2], env), level) + return "<h%s>%s</h%s>" % (level, self.format(elt[2]), level) - def str_bar(self, tok, env): + def str_bar(self): return "<hr/>" - def str_env(self, tok, env): - t = tok[1] - return "<" + self.envhdr[t] + ">" + \ - self.fmtok(tok[3], tok) + \ - "</" + self.envhdr[t] + ">" - - def str_item(self, tok, env): - return "<%s>%s</%s>" % (self.envel[env[1]], - self.fmtok(tok[1], env), - self.envel[env[1]]) + def str_env(self, elt): + type = elt[1] + lev = elt[2] + if lev > 4: + lev = 2 + string = "" + for s in elt[3]: + x = self.format(s) + string += "<%s>%s</%s>" % (self.envel[type], + self.format(s), + self.envel[type]) + return "<%s>%s</%s>" % (self.envhdr[type], + string, + self.envhdr[type]) - def str_para(self, tok, env): - s = self.cpara() - self.state.append(self.ST_PARA) - return s + def str_para(self, elt): + string = ""; + for x in elt[1]: + string += self.format(x) + return "<p>" + string + "</p>" - def fmtok(self, tok, env): - if type(tok) != TupleType: - return "" - if tok[0] in [ self.ENV, self.HDR ]: - s = self.cpara() - elif tok[0] == self.BAR: - s = self.str_para(tok, env) - elif tok[0] in [ self.NIL, self.SEQ ]: - s = "" + def str_ind(self, elt): + return (" " * 2 * elt[1]) + self.format(elt[2]) + + def format(self, elt): + if elt[0] == TEXT: + if isinstance(elt[1],list): + string = " " + for s in elt[1]: + string += s + else: + string = elt[1] + return string + elif elt[0] == PARA: + return self.str_para(elt) + elif elt[0] == IT: + return self.str_it(elt) + elif elt[0] == BOLD: + return self.str_bold(elt) + elif elt[0] == LINK: + return self.str_link(elt) + elif elt[0] == TMPL: + return self.str_tmpl(elt) + elif elt[0] == BAR: + return self.str_bar() + elif elt[0] == HDR: + return self.str_hdr(elt) + elif elt[0] == REF: + return self.str_ref(elt) + elif elt[0] == ENV: + return self.str_env(elt) + elif elt[0] == IND: + return self.str_ind(elt) + elif elt[0] == SEQ: + string = "" + for x in elt[1]: + string += " " + self.format(x) + return string else: - s = self.opara() - s1 = WikiMarkup.fmtok(self, tok, env) - if s1: - s += s1 - return s + return str(elt) def __str__(self): - self.state = [ self.ST_PARA ] - return WikiMarkup.__str__(self) + self.cpara() + str = "" + for elt in self.tree: + str += self.format(elt) + return str class HtmlWiktionaryMarkup (HtmlWikiMarkup): """ @@ -199,22 +216,3 @@ class HtmlWiktionaryMarkup (HtmlWikiMarkup): Faeci quod potui, faciant meliora potentes. """ - seq_pos = 0 - - def str_seq(self, tok, env): - str = "" - self.seq_pos=0 - for t in tok[1:]: - s = self.fmtok(t, env) - if s: - str += s - self.seq_pos += 1 - return str - - def str_tmpl(self, tok, env): - arg = self.fmtok(tok[1], env) - if self.seq_pos > 0: - return " <b>" + arg + "</b>" - else: - return "<br/><b>" + arg + ":</b><br/>" - |