summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2009-03-03 22:52:32 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2009-03-03 22:52:32 +0200
commit1fecd367161554c1a21b7bf57f54036b039d75f8 (patch)
tree6413d6cd00b44b0c7d58bb075d5feb0869f82857
parentb667a722ceb7db64ed243de706aba795d2a895e9 (diff)
downloadwikitrans-1fecd367161554c1a21b7bf57f54036b039d75f8.tar.gz
wikitrans-1fecd367161554c1a21b7bf57f54036b039d75f8.tar.bz2
Implement conversion to HTML
-rw-r--r--setup.py12
-rw-r--r--wiki2html.py186
-rw-r--r--wikimarkup.py2
3 files changed, 99 insertions, 101 deletions
diff --git a/setup.py b/setup.py
index a964a10..9eefb4b 100644
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2008 Sergey Poznyakoff
+# Copyright (C) 2008,2009 Sergey Poznyakoff
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -18,18 +18,18 @@
from distutils.core import setup
import wikimarkup
-setup(name='wiki2x',
+setup(name='wit',
version='0.1',
author='Sergey Poznyakoff',
author_email='gray@gnu.org.ua',
url='http://gray.gnu.org.ua/',
- package_dir = {'wiki2x': ''},
- packages=['wiki2x'],
+ package_dir = {'wit': ''},
+ packages=['wit'],
license='GPL License',
- description='A wiki markup converter.',
+ description='Wiki markup translator.',
platforms=['any'],
classifiers=[
- 'Development Status :: 5 - Production/Stable',
+ 'Development Status :: 3 - Alpha',
'Intended Audience :: Developers',
'License :: OSI Approved :: GNU General Public License (GPL)',
'Operating System :: OS Independent',
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 ("&nbsp;" * 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/>"
-
diff --git a/wikimarkup.py b/wikimarkup.py
index baa5c82..abd0764 100644
--- a/wikimarkup.py
+++ b/wikimarkup.py
@@ -253,7 +253,7 @@ class BaseWikiMarkup:
elif tok[1] == "|":
if len(list) > 1:
subtree.append((SEQ,list))
- else:
+ elif list:
subtree.append(list[0])
list = []
else:

Return to:

Send suggestions and report system problems to the System administrator.