Skip to content

Commit

Permalink
Merge pull request #5 from open-contracting/rst
Browse files Browse the repository at this point in the history
Translate list-table ReStructuredText directives
  • Loading branch information
jpmckinney committed Nov 13, 2018
2 parents 8e23ed7 + dce7af1 commit 284e890
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 4 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog

## 0.0.4 (2018-11-13)

* Translate `list-table` ReStructuredText directives.

## 0.0.3 (2018-11-02)

* Use universal newlines mode, to avoid CSV parsing errors.
Expand Down
9 changes: 9 additions & 0 deletions ocds_babel/directives.py
@@ -0,0 +1,9 @@
from docutils.nodes import literal_block
from docutils.parsers.rst import Directive


class NullDirective(Directive):
has_content = True

def run(self):
return [literal_block(self.block_text, language='eval_rst')]
22 changes: 21 additions & 1 deletion ocds_babel/translate.py
Expand Up @@ -6,10 +6,15 @@
from collections import OrderedDict
from io import StringIO

from docutils.frontend import OptionParser
from docutils.parsers.rst import Parser, directives
from docutils.utils import new_document
from recommonmark.parser import CommonMarkParser
from recommonmark.transform import AutoStructify
from sphinx.application import Sphinx

from ocds_babel import TRANSLATABLE_CODELIST_HEADERS, TRANSLATABLE_SCHEMA_KEYWORDS, TRANSLATABLE_EXTENSION_METADATA_KEYWORDS # noqa: E501
from ocds_babel.directives import NullDirective
from ocds_babel.markdown_translator import MarkdownTranslator
from ocds_babel.util import text_to_translate

Expand Down Expand Up @@ -115,11 +120,26 @@ def translate_extension_metadata(io, translator, lang='en', **kwargs):
return json.dumps(data, indent=2, separators=(',', ': '), ensure_ascii=False)


def translate_markdown(io, translator, settings=None, **kwargs):
def translate_markdown(io, translator, **kwargs):
text = io.read()

# This only needs to be run once, but is inexpensive.
for name in ('csv-table-no-translate', 'extensiontable'):
directives.register_directive(name, NullDirective)

# sphinx-build -b html -q -E …
app = Sphinx('.', None, '.', '.', 'html', status=None, freshenv=True)
# Avoid "recommonmark_config not setted, proceed default setting".
app.add_config_value('recommonmark_config', {}, True)
# From code comment in `new_document`.
settings = OptionParser(components=(Parser,)).get_default_values()
# Get minimal settings for `AutoStructify` to be applied.
settings.env = app.builder.env

document = new_document(io.name, settings)
CommonMarkParser().parse(text, document)
# To translate messages in `.. list-table`.
AutoStructify(document).apply()
visitor = MarkdownTranslator(document, translator)
document.walkabout(visitor)

Expand Down
5 changes: 2 additions & 3 deletions setup.py
Expand Up @@ -5,7 +5,7 @@

setup(
name='ocds-babel',
version='0.0.3',
version='0.0.4',
author='Open Contracting Partnership',
author_email='data@open-contracting.org',
url='https://github.com/open-contracting/ocds-babel',
Expand All @@ -14,8 +14,7 @@
packages=find_packages(),
long_description=long_description,
install_requires=[
'Babel',
'docutils',
'Sphinx==1.5.1',
],
extras_require={
'test': [
Expand Down
33 changes: 33 additions & 0 deletions tests/test_translate.py
Expand Up @@ -92,6 +92,16 @@
1. Enumerated list item 1
2. Enumerated list item 2
```eval_rst
.. list-table::
:header-rows: 1
* - Header 1
- Header 2
* - Cell 1
- Cell 2
```
"""


Expand Down Expand Up @@ -273,6 +283,10 @@ def gettext(self, *args, **kwargs):
'Bulleted list item 2': 'Élément de liste à puces 2',
'Enumerated list item 1': 'Élément de liste énumérée 1',
'Enumerated list item 2': 'Élément de liste énumérée 2',
'Header 1': 'En-tête 1',
'Header 2': 'En-tête 2',
'Cell 1': 'Cellule 1',
'Cell 2': 'Cellule 2',
# docutils ... optparse
'%prog [options]': '%prog [options]',
}[args[0]]
Expand Down Expand Up @@ -329,6 +343,25 @@ def gettext(self, *args, **kwargs):
1. Élément de liste énumérée 1
1. Élément de liste énumérée 2
<table border="1" class="docutils">
<colgroup>
<col width="50%" />
<col width="50%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd">
<th class="head">En-tête 1</th>
<th class="head">En-tête 2</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even">
<td>Cellule 1</td>
<td>Cellule 2</td>
</tr>
</tbody>
</table>
"""

assert len(caplog.records) == 1
Expand Down

0 comments on commit 284e890

Please sign in to comment.