diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2018-08-05 11:09:01 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2018-08-05 11:37:49 +0300 |
commit | a4917480cc989ce2cbaee79345149a7be22eccac (patch) | |
tree | d1a1bd895e7d305cd894941ea37faebad039c354 | |
parent | 1fb7bc5aefaebf830b969c418f7987f50f4187f7 (diff) | |
download | wikitrans-a4917480cc989ce2cbaee79345149a7be22eccac.tar.gz wikitrans-a4917480cc989ce2cbaee79345149a7be22eccac.tar.bz2 |
Implement <ref> and <references>
* WikiTrans/wikimarkup.py (BaseWikiMarkup.tags): Add 'ref' and 'references'.
* WikiTrans/wikitoken.py (WikiTagNode): If the parser has the 'references'
attribute, store each <ref> there.
* WikiTrans/wikidump.py: Handle new tags.
* WikiTrans/wiki2html.py (HtmlTagNode): Handle new tags.
(HtmlWikiMarkup.references): New attribute
* WikiTrans/wiki2texi.py (TexiTagNode): Handle new tags.
* WikiTrans/wiki2text.py (TextTagNode): Handle new tags.
(TextWikiMarkup.showrefs): Renamed from references
(TextWikiMarkup.references): New attribute.
-rw-r--r-- | WikiTrans/wiki2html.py | 21 | ||||
-rw-r--r-- | WikiTrans/wiki2texi.py | 7 | ||||
-rw-r--r-- | WikiTrans/wiki2text.py | 17 | ||||
-rw-r--r-- | WikiTrans/wikidump.py | 8 | ||||
-rw-r--r-- | WikiTrans/wikimarkup.py | 2 | ||||
-rw-r--r-- | WikiTrans/wikitoken.py | 11 |
6 files changed, 59 insertions, 7 deletions
diff --git a/WikiTrans/wiki2html.py b/WikiTrans/wiki2html.py index 81b918f..7c71602 100644 --- a/WikiTrans/wiki2html.py +++ b/WikiTrans/wiki2html.py | |||
@@ -145,2 +145,21 @@ class HtmlTagNode(WikiTagNode): | |||
145 | return '<pre><code>' + s + '</code></pre>' #FIXME | 145 | return '<pre><code>' + s + '</code></pre>' #FIXME |
146 | elif self.tag == 'ref': | ||
147 | n = self.idx+1 | ||
148 | return '<sup id="cite_ref-%d" class="reference"><a name="cite_ref-%d" href=#cite_note-%d">%d</a></sup>' % (n,n,n,n) | ||
149 | elif self.tag == 'references': | ||
150 | s = '<div class="references">\n' | ||
151 | s += '<ol class="references">\n' | ||
152 | n = 0 | ||
153 | for ref in self.parser.references: | ||
154 | n += 1 | ||
155 | s += ('<li id="cite_note-%d">' + \ | ||
156 | '<span class="mw-cite-backlink">' + \ | ||
157 | '<b><a href="#cite_ref-%d">^</a></b>' + \ | ||
158 | '</span>' + \ | ||
159 | '<span class="reference-text">' + \ | ||
160 | ref.content.format() + \ | ||
161 | '</span>' + \ | ||
162 | '</li>\n') % (n,n) | ||
163 | s += '</ol>\n</div>\n' | ||
164 | return s | ||
146 | else: | 165 | else: |
@@ -179,3 +198,3 @@ class HtmlWikiMarkup (WikiMarkup): | |||
179 | nested = 0 | 198 | nested = 0 |
180 | 199 | references = [] | |
181 | def __init__(self, *args, **kwargs): | 200 | def __init__(self, *args, **kwargs): |
diff --git a/WikiTrans/wiki2texi.py b/WikiTrans/wiki2texi.py index 9a12d37..39c70c6 100644 --- a/WikiTrans/wiki2texi.py +++ b/WikiTrans/wiki2texi.py | |||
@@ -105,2 +105,8 @@ class TexiTagNode(WikiTagNode): | |||
105 | self.content.format() | 105 | self.content.format() |
106 | elif self.tag == 'ref': | ||
107 | parser._print('@footnote{', escape=False); | ||
108 | self.content.format(); | ||
109 | parser._print('}', escape=False) | ||
110 | elif self.tag == 'references': | ||
111 | pass | ||
106 | else: | 112 | else: |
@@ -343,2 +349,3 @@ class TexiWikiMarkup (WikiMarkup): | |||
343 | 349 | ||
350 | |||
344 | 351 | ||
diff --git a/WikiTrans/wiki2text.py b/WikiTrans/wiki2text.py index 35f1aff..dc2e003 100644 --- a/WikiTrans/wiki2text.py +++ b/WikiTrans/wiki2text.py | |||
@@ -106,3 +106,3 @@ class TextLinkNode(WikiSeqNode): | |||
106 | if ns == 'NS_IMAGE': | 106 | if ns == 'NS_IMAGE': |
107 | if not self.parser.references: | 107 | if not self.parser.showrefs: |
108 | return "" | 108 | return "" |
@@ -123,3 +123,3 @@ class TextLinkNode(WikiSeqNode): | |||
123 | tgt = self.parser.mktgt(arg) | 123 | tgt = self.parser.mktgt(arg) |
124 | if self.parser.references: | 124 | if self.parser.showrefs: |
125 | return "%s (see %s) " % (text, tgt) | 125 | return "%s (see %s) " % (text, tgt) |
@@ -192,2 +192,8 @@ class TextTagNode(WikiTagNode): | |||
192 | self.parser.nested -= 1 | 192 | self.parser.nested -= 1 |
193 | elif self.tag == 'ref': | ||
194 | s = '[%d]' % (self.idx+1) | ||
195 | elif self.tag == 'references': | ||
196 | s = '\nReferences:\n' | ||
197 | for ref in self.parser.references: | ||
198 | s += ('[%d]. ' % (ref.idx+1)) + ref.content.format() + '\n' | ||
193 | else: | 199 | else: |
@@ -208,3 +214,3 @@ class TextWikiMarkup (WikiMarkup): | |||
208 | # Do not show references. | 214 | # Do not show references. |
209 | references = False | 215 | showrefs = False |
210 | # Provide a minimum markup | 216 | # Provide a minimum markup |
@@ -214,2 +220,5 @@ class TextWikiMarkup (WikiMarkup): | |||
214 | num = 0 | 220 | num = 0 |
221 | |||
222 | # Array of footnote references | ||
223 | references = [] | ||
215 | 224 | ||
@@ -220,3 +229,3 @@ class TextWikiMarkup (WikiMarkup): | |||
220 | if 'refs' in keywords: | 229 | if 'refs' in keywords: |
221 | self.references = keywords['refs'] | 230 | self.showrefs = keywords['refs'] |
222 | if 'markup' in keywords: | 231 | if 'markup' in keywords: |
diff --git a/WikiTrans/wikidump.py b/WikiTrans/wikidump.py index 5b257f9..7457dfa 100644 --- a/WikiTrans/wikidump.py +++ b/WikiTrans/wikidump.py | |||
@@ -21,4 +21,12 @@ from WikiTrans.wikimarkup import WikiMarkup | |||
21 | 21 | ||
22 | class DumpReferences(object): | ||
23 | idx = 0 | ||
24 | def __len__(self): | ||
25 | return self.idx + 1 | ||
26 | def append(self, obj): | ||
27 | self.idx += 1 | ||
28 | |||
22 | class DumpWikiMarkup(WikiMarkup): | 29 | class DumpWikiMarkup(WikiMarkup): |
23 | indent = None | 30 | indent = None |
31 | references = DumpReferences() | ||
24 | def __init__(self, **kwarg): | 32 | def __init__(self, **kwarg): |
diff --git a/WikiTrans/wikimarkup.py b/WikiTrans/wikimarkup.py index af97063..0987da2 100644 --- a/WikiTrans/wikimarkup.py +++ b/WikiTrans/wikimarkup.py | |||
@@ -116,3 +116,3 @@ class BaseWikiMarkup(object): | |||
116 | 116 | ||
117 | tags = [ 'code', 'nowiki', 'tt', 'div' ] | 117 | tags = [ 'code', 'nowiki', 'tt', 'div', 'ref', 'references' ] |
118 | 118 | ||
diff --git a/WikiTrans/wikitoken.py b/WikiTrans/wikitoken.py index 5606ecc..2238a66 100644 --- a/WikiTrans/wikitoken.py +++ b/WikiTrans/wikitoken.py | |||
@@ -63,2 +63,4 @@ class WikiContentNode(WikiNode): | |||
63 | content = None | 63 | content = None |
64 | def format(self): | ||
65 | pass | ||
64 | @jsonencoder | 66 | @jsonencoder |
@@ -116,2 +118,8 @@ class WikiTagNode(WikiContentNode): | |||
116 | args = None | 118 | args = None |
119 | idx = None | ||
120 | def __init__(self, *args, **keywords): | ||
121 | super(WikiTagNode, self).__init__(*args, **keywords) | ||
122 | if self.type == 'TAG' and self.tag == 'ref' and hasattr(self.parser,'references'): | ||
123 | self.idx = len(self.parser.references) | ||
124 | self.parser.references.append(self) | ||
117 | @jsonencoder | 125 | @jsonencoder |
@@ -122,3 +130,4 @@ class WikiTagNode(WikiContentNode): | |||
122 | 'args': self.args.tab if self.args else None, | 130 | 'args': self.args.tab if self.args else None, |
123 | 'content': self.content.jsonEncode() | 131 | 'content': self.content.jsonEncode() if self.content else None, |
132 | 'idx': self.idx | ||
124 | } | 133 | } |