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 @@ -144,4 +144,23 @@ class HtmlTagNode(WikiTagNode): self.parser.nested -= 1 return '<pre><code>' + s + '</code></pre>' #FIXME + elif self.tag == 'ref': + n = self.idx+1 + return '<sup id="cite_ref-%d" class="reference"><a name="cite_ref-%d" href=#cite_note-%d">%d</a></sup>' % (n,n,n,n) + elif self.tag == 'references': + s = '<div class="references">\n' + s += '<ol class="references">\n' + n = 0 + for ref in self.parser.references: + n += 1 + s += ('<li id="cite_note-%d">' + \ + '<span class="mw-cite-backlink">' + \ + '<b><a href="#cite_ref-%d">^</a></b>' + \ + '</span>' + \ + '<span class="reference-text">' + \ + ref.content.format() + \ + '</span>' + \ + '</li>\n') % (n,n) + s += '</ol>\n</div>\n' + return s else: s = '<' + self.tag @@ -178,5 +197,5 @@ class HtmlWikiMarkup (WikiMarkup): nested = 0 - + references = [] def __init__(self, *args, **kwargs): super(HtmlWikiMarkup, self).__init__(*args, **kwargs) diff --git a/WikiTrans/wiki2texi.py b/WikiTrans/wiki2texi.py index 9a12d37..39c70c6 100644 --- a/WikiTrans/wiki2texi.py +++ b/WikiTrans/wiki2texi.py @@ -104,4 +104,10 @@ class TexiTagNode(WikiTagNode): nl=True, escape=False) self.content.format() + elif self.tag == 'ref': + parser._print('@footnote{', escape=False); + self.content.format(); + parser._print('}', escape=False) + elif self.tag == 'references': + pass else: parser._print('<' + self.tag) @@ -342,4 +348,5 @@ class TexiWikiMarkup (WikiMarkup): return self._end_print() + diff --git a/WikiTrans/wiki2text.py b/WikiTrans/wiki2text.py index 35f1aff..dc2e003 100644 --- a/WikiTrans/wiki2text.py +++ b/WikiTrans/wiki2text.py @@ -105,5 +105,5 @@ class TextLinkNode(WikiSeqNode): if ns: if ns == 'NS_IMAGE': - if not self.parser.references: + if not self.parser.showrefs: return "" text = "[%s: %s]" % (qual, text if text else arg) @@ -122,5 +122,5 @@ class TextLinkNode(WikiSeqNode): else: tgt = self.parser.mktgt(arg) - if self.parser.references: + if self.parser.showrefs: return "%s (see %s) " % (text, tgt) elif not text or text == '': @@ -191,4 +191,10 @@ class TextTagNode(WikiTagNode): s = self.content.format() self.parser.nested -= 1 + elif self.tag == 'ref': + s = '[%d]' % (self.idx+1) + elif self.tag == 'references': + s = '\nReferences:\n' + for ref in self.parser.references: + s += ('[%d]. ' % (ref.idx+1)) + ref.content.format() + '\n' else: s = '<' + self.tag @@ -207,5 +213,5 @@ class TextWikiMarkup (WikiMarkup): width = 78 # Do not show references. - references = False + showrefs = False # Provide a minimum markup markup = True @@ -213,4 +219,7 @@ class TextWikiMarkup (WikiMarkup): # Number of current element in the environment num = 0 + + # Array of footnote references + references = [] def __init__(self, *args, **keywords): @@ -219,5 +228,5 @@ class TextWikiMarkup (WikiMarkup): self.width = keywords['width'] if 'refs' in keywords: - self.references = keywords['refs'] + self.showrefs = keywords['refs'] if 'markup' in keywords: self.markup = keywords['markup'] diff --git a/WikiTrans/wikidump.py b/WikiTrans/wikidump.py index 5b257f9..7457dfa 100644 --- a/WikiTrans/wikidump.py +++ b/WikiTrans/wikidump.py @@ -20,6 +20,14 @@ import json from WikiTrans.wikimarkup import WikiMarkup +class DumpReferences(object): + idx = 0 + def __len__(self): + return self.idx + 1 + def append(self, obj): + self.idx += 1 + class DumpWikiMarkup(WikiMarkup): indent = None + references = DumpReferences() def __init__(self, **kwarg): n = kwarg.pop('indent', None) diff --git a/WikiTrans/wikimarkup.py b/WikiTrans/wikimarkup.py index af97063..0987da2 100644 --- a/WikiTrans/wikimarkup.py +++ b/WikiTrans/wikimarkup.py @@ -115,5 +115,5 @@ class BaseWikiMarkup(object): tree = None - tags = [ 'code', 'nowiki', 'tt', 'div' ] + tags = [ 'code', 'nowiki', 'tt', 'div', 'ref', 'references' ] debug_level = 0 diff --git a/WikiTrans/wikitoken.py b/WikiTrans/wikitoken.py index 5606ecc..2238a66 100644 --- a/WikiTrans/wikitoken.py +++ b/WikiTrans/wikitoken.py @@ -62,4 +62,6 @@ class WikiNode(object): class WikiContentNode(WikiNode): content = None + def format(self): + pass @jsonencoder def jsonEncode(self): @@ -115,4 +117,10 @@ class WikiTagNode(WikiContentNode): isblock = False args = None + idx = None + def __init__(self, *args, **keywords): + super(WikiTagNode, self).__init__(*args, **keywords) + if self.type == 'TAG' and self.tag == 'ref' and hasattr(self.parser,'references'): + self.idx = len(self.parser.references) + self.parser.references.append(self) @jsonencoder def jsonEncode(self): @@ -121,5 +129,6 @@ class WikiTagNode(WikiContentNode): 'isblock': self.isblock, 'args': self.args.tab if self.args else None, - 'content': self.content.jsonEncode() + 'content': self.content.jsonEncode() if self.content else None, + 'idx': self.idx } |