mirror of
https://github.com/veekun/pokedex.git
synced 2024-08-20 18:16:34 +00:00
Implemented rst as_text, for showing short move effects outside the Web.
This commit is contained in:
parent
e0aeb771b2
commit
47f5953457
1 changed files with 58 additions and 0 deletions
|
@ -41,6 +41,7 @@ import docutils.nodes
|
||||||
from docutils.parsers.rst import Parser, roles
|
from docutils.parsers.rst import Parser, roles
|
||||||
import docutils.utils
|
import docutils.utils
|
||||||
from docutils.writers.html4css1 import Writer as HTMLWriter
|
from docutils.writers.html4css1 import Writer as HTMLWriter
|
||||||
|
from docutils.writers import UnfilteredWriter
|
||||||
|
|
||||||
import sqlalchemy.types
|
import sqlalchemy.types
|
||||||
|
|
||||||
|
@ -54,6 +55,53 @@ class HTMLFragmentWriter(HTMLWriter):
|
||||||
subs = self.interpolation_dict()
|
subs = self.interpolation_dict()
|
||||||
return subs['body']
|
return subs['body']
|
||||||
|
|
||||||
|
|
||||||
|
class TextishTranslator(docutils.nodes.SparseNodeVisitor):
|
||||||
|
"""A simple translator that tries to return plain text that still captures
|
||||||
|
the spirit of the original (basic) formatting.
|
||||||
|
|
||||||
|
This will probably not be useful for anything complicated; it's only meant
|
||||||
|
for extremely simple text.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, document):
|
||||||
|
self.document = document
|
||||||
|
self.translated = u''
|
||||||
|
|
||||||
|
def visit_Text(self, node):
|
||||||
|
"""Text is left alone."""
|
||||||
|
self.translated += node.astext()
|
||||||
|
|
||||||
|
def depart_paragraph(self, node):
|
||||||
|
"""Append a blank line after a paragraph, unless it's the last of its
|
||||||
|
siblings.
|
||||||
|
"""
|
||||||
|
if not node.parent:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Loop over siblings. If we see a sibling after we see this node, then
|
||||||
|
# append the blank line
|
||||||
|
seen_node = False
|
||||||
|
for sibling in node.parent:
|
||||||
|
if sibling is node:
|
||||||
|
seen_node = True
|
||||||
|
continue
|
||||||
|
|
||||||
|
if seen_node:
|
||||||
|
self.translated += u'\n\n'
|
||||||
|
return
|
||||||
|
|
||||||
|
class TextishWriter(UnfilteredWriter):
|
||||||
|
"""Translates reST back into plain text, aka more reST. Difference is that
|
||||||
|
custom roles are handled, so you get "50% chance" instead of junk.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def translate(self):
|
||||||
|
visitor = TextishTranslator(self.document)
|
||||||
|
self.document.walkabout(visitor)
|
||||||
|
self.output = visitor.translated
|
||||||
|
|
||||||
|
|
||||||
class UnicodeOutput(Output):
|
class UnicodeOutput(Output):
|
||||||
"""reST Unicode output. The distribution only has a StringOutput, and I
|
"""reST Unicode output. The distribution only has a StringOutput, and I
|
||||||
want me some Unicode.
|
want me some Unicode.
|
||||||
|
@ -147,6 +195,16 @@ class RstString(object):
|
||||||
writer = HTMLFragmentWriter()
|
writer = HTMLFragmentWriter()
|
||||||
return writer.write(document, destination)
|
return writer.write(document, destination)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def as_text(self):
|
||||||
|
"""Returns the string mostly unchanged, save for our custom roles."""
|
||||||
|
|
||||||
|
document = self.rest_document
|
||||||
|
|
||||||
|
destination = UnicodeOutput()
|
||||||
|
writer = TextishWriter()
|
||||||
|
return writer.write(document, destination)
|
||||||
|
|
||||||
|
|
||||||
class MoveEffectProperty(object):
|
class MoveEffectProperty(object):
|
||||||
"""Property that wraps a move effect. Used like this:
|
"""Property that wraps a move effect. Used like this:
|
||||||
|
|
Loading…
Reference in a new issue