summaryrefslogtreecommitdiff
path: root/wikitrans
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2018-08-16 15:45:00 +0300
committerSergey Poznyakoff <gray@gnu.org>2018-08-17 13:17:11 +0300
commit7186dbab7f1c1227e9229866e086bc417e3e4e52 (patch)
treef29114e9ff7a7b023dd3d611a9bc8808f5cf5bbd /wikitrans
parentd9e26129527ce84f626eb44ff95e4ecfbc5bc92a (diff)
downloadwikitrans-7186dbab7f1c1227e9229866e086bc417e3e4e52.tar.gz
wikitrans-7186dbab7f1c1227e9229866e086bc417e3e4e52.tar.bz2
Fix PEP 8 issues.
Diffstat (limited to 'wikitrans')
-rw-r--r--wikitrans/__init__.py26
-rw-r--r--wikitrans/wiki2html.py320
-rw-r--r--wikitrans/wiki2texi.py410
-rw-r--r--wikitrans/wiki2text.py348
-rw-r--r--wikitrans/wikidump.py77
-rw-r--r--wikitrans/wikimarkup.py1285
-rw-r--r--wikitrans/wikins.py3040
-rw-r--r--wikitrans/wikitoken.py318
8 files changed, 5824 insertions, 0 deletions
diff --git a/wikitrans/__init__.py b/wikitrans/__init__.py
new file mode 100644
index 0000000..5832e38
--- /dev/null
+++ b/wikitrans/__init__.py
@@ -0,0 +1,26 @@
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3# Copyright (C) 2008-2018 Sergey Poznyakoff
4#
5# This program is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 3, or (at your option)
8# any later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18__all__ = [
19 "wikitoken",
20 "wikimarkup",
21 "wikidump",
22 "wiki2html",
23 "wiki2text",
24 "wiki2texi",
25 "wikins"
26]
diff --git a/wikitrans/wiki2html.py b/wikitrans/wiki2html.py
new file mode 100644
index 0000000..ce65bae
--- /dev/null
+++ b/wikitrans/wiki2html.py
@@ -0,0 +1,320 @@
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3# Copyright (C) 2008-2018 Sergey Poznyakoff
4#
5# This program is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 3, or (at your option)
8# any later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18"""
19Wiki markup to HTML translator.
20
21Classes:
22
23HtmlWikiMarkup -- Converts Wiki material to HTML.
24HtmlWiktionaryMarkup -- Reserved for future use. Currently does the same as
25 HtmlWikiMarkup.
26
27"""
28
29from __future__ import print_function
30from wikitrans.wikimarkup import *
31from wikitrans.wikitoken import *
32from wikitrans.wikins import wiki_ns_re, wiki_ns
33import re
34try:
35 from urllib import quote as url_quote
36except ImportError:
37 from urllib.parse import quote as url_quote
38
39try:
40 from html import escape as html_escape
41except ImportError:
42 from cgi import escape as html_escape
43
44__all__ = [ "HtmlWikiMarkup", "HtmlWiktionaryMarkup" ]
45
46class HtmlSeqNode(WikiSeqNode):
47 def format(self):
48 s = ''
49 for x in self.content:
50 s += x.format()
51 return s
52
53class HtmlLinkNode(HtmlSeqNode):
54 def format(self):
55 arg = self.content[0].format()
56 text = None
57 if len(self.content) > 1:
58 s = [x for x in map(lambda x: x.format(), self.content)]
59 if s[0] == 'disambigR' or s[0] == 'wikiquote':
60 return ""
61 elif len(s) > 1 and s[1] == 'thumb':
62 return ""
63 text = '<span class="template">' + s[1] + '</span>'
64 if self.type == 'TMPL':
65 if re.match("t[+-]$", s[0]):
66 if len(s) > 2:
67 text = s[2]
68 elif s[0] == "term":
69 text = self.parser.tmpl_term(s)
70 elif s[0] == "proto":
71 text = self.parser.tmpl_proto(s)
72 return text
73
74 (qual,sep,tgt) = arg.partition(':')
75 if tgt != '':
76 ns = self.parser.wiki_ns_name(qual)
77 if ns:
78 if ns == 'NS_IMAGE':
79 return ''
80 elif ns == 'NS_MEDIA':
81 tgt = self.parser.media_base + '/' + tgt
82 else:
83 tgt = self.parser.mktgt(tgt)
84 elif self.type == 'LINK' and qual in self.parser.langtab:
85 tgt = self.parser.mktgt(tgt, qual)
86 if not text or text == '':
87 text = self.parser.langtab[qual]
88 else:
89 tgt = self.parser.mktgt(tgt)
90 else:
91 tgt = self.parser.mktgt(arg)
92 return "<a href=\"%s\">%s</a>" % (tgt,
93 text if (text and text != '') else arg)
94
95class HtmlRefNode(WikiRefNode):
96 def format(self):
97 target = self.ref
98 text = self.content.format()
99 return "<a href=\"%s\">%s</a>" % (
100 target,
101 text if (text and text != '') else target
102 )
103
104class HtmlFontNode(HtmlSeqNode):
105 def format(self):
106 comm = { 'IT': 'i',
107 'BOLD': 'b' }
108 s = '<%s>' % comm[self.type]
109 for x in self.content:
110 s += x.format()
111 s += '</%s>' % comm[self.type]
112 return s
113
114class HtmlTextNode(HtmlSeqNode):
115 def format(self):
116 if isinstance(self.content,list):
117 s = ''.join(self.content)
118 else:
119 s = html_escape(self.content, quote=False)
120 return s
121
122class HtmlHdrNode(WikiHdrNode):
123 def format(self):
124 level = self.level
125 if level > 6:
126 level = 6
127 return "<h%s>%s</h%s>\n\n" % (level, self.content.format(), level)
128
129class HtmlBarNode(WikiNode):
130 def format(self):
131 return "<hr/>\n"
132
133class HtmlEnvNode(WikiEnvNode):
134 def format(self):
135 type = self.envtype
136 lev = self.level
137 if lev > 4:
138 lev = 2
139 string = ""
140 for s in self.content:
141 n = s.subtype;
142 string += "<%s>%s</%s>" % (self.parser.envt[type]["elt"][n],
143 s.content.format(),
144 self.parser.envt[type]["elt"][n])
145 return "<%s>%s</%s>" % (self.parser.envt[type]["hdr"],
146 string,
147 self.parser.envt[type]["hdr"])
148 return string
149
150class HtmlTagNode(WikiTagNode):
151 def format(self):
152 if self.tag == 'code':
153 self.parser.nested += 1
154 s = self.content.format()
155 self.parser.nested -= 1
156 return '<pre><code>' + s + '</code></pre>' #FIXME
157 elif self.tag == 'ref':
158 n = self.idx+1
159 return '<sup id="cite_ref-%d" class="reference"><a name="cite_ref-%d" href=#cite_note-%d">%d</a></sup>' % (n,n,n,n)
160 elif self.tag == 'references':
161 s = '<div class="references">\n'
162 s += '<ol class="references">\n'
163 n = 0
164 for ref in self.parser.references:
165 n += 1
166 s += ('<li id="cite_note-%d">'
167 + '<span class="mw-cite-backlink">'
168 + '<b><a href="#cite_ref-%d">^</a></b>'
169 + '</span>'
170 + '<span class="reference-text">'
171 + ref.content.format()
172 + '</span>'
173 + '</li>\n') % (n,n)
174 s += '</ol>\n</div>\n'
175 return s
176 else:
177 s = '<' + self.tag
178 if self.args:
179 s += ' ' + str(self.args)
180 s += '>'
181 s += self.content.format()
182 return s + '</' + self.tag + '>'
183
184class HtmlParaNode(HtmlSeqNode):
185 def format(self):
186 return "<p>" + super(HtmlParaNode, self).format() + "</p>\n"
187
188class HtmlPreNode(HtmlSeqNode):
189