Backed out changeset cfe9e2d11003 refs #1265

This commit is contained in:
Takayuki Shimizukawa 2013-10-04 08:12:20 +00:00
parent 603a75d8d3
commit 313559116d
7 changed files with 24 additions and 95 deletions

19
CHANGES
View File

@ -1,22 +1,3 @@
Release 1.2 (in development)
============================
Features added
--------------
* i18n: gettext translates label target name.
Incompatible changes
--------------------
Bugs fixed
----------
* #1265: Fix i18n: crash when using a indirect target and translating a target
section name.
Release 1.2 beta3 (released Oct 3, 2013) Release 1.2 beta3 (released Oct 3, 2013)
======================================== ========================================

View File

@ -18,11 +18,7 @@ from uuid import uuid4
from sphinx.builders import Builder from sphinx.builders import Builder
from sphinx.util import split_index_msg from sphinx.util import split_index_msg
from sphinx.util.nodes import ( from sphinx.util.nodes import extract_messages, traverse_translatable_index
extract_messages,
traverse_translatable_target,
traverse_translatable_index,
)
from sphinx.util.osutil import safe_relpath, ensuredir, find_catalog, SEP from sphinx.util.osutil import safe_relpath, ensuredir, find_catalog, SEP
from sphinx.util.console import darkgreen, purple, bold from sphinx.util.console import darkgreen, purple, bold
from sphinx.locale import pairindextypes from sphinx.locale import pairindextypes
@ -101,9 +97,6 @@ class I18nBuilder(Builder):
for node, msg in extract_messages(doctree): for node, msg in extract_messages(doctree):
catalog.add(msg, node) catalog.add(msg, node)
for node, msg in traverse_translatable_target(doctree):
catalog.add(msg, node)
# Extract translatable messages from index entries. # Extract translatable messages from index entries.
for node, entries in traverse_translatable_index(doctree): for node, entries in traverse_translatable_index(doctree):
for typ, msg, tid, main in entries: for typ, msg, tid, main in entries:

View File

@ -20,11 +20,7 @@ from docutils.transforms.parts import ContentsFilter
from sphinx import addnodes from sphinx import addnodes
from sphinx.locale import _, init as init_locale from sphinx.locale import _, init as init_locale
from sphinx.util import split_index_msg from sphinx.util import split_index_msg
from sphinx.util.nodes import ( from sphinx.util.nodes import traverse_translatable_index, extract_messages
traverse_translatable_target,
traverse_translatable_index,
extract_messages,
)
from sphinx.util.osutil import ustrftime, find_catalog from sphinx.util.osutil import ustrftime, find_catalog
from sphinx.util.compat import docutils_version from sphinx.util.compat import docutils_version
from sphinx.util.pycompat import all from sphinx.util.pycompat import all
@ -182,34 +178,6 @@ class Locale(Transform):
parser = RSTParser() parser = RSTParser()
#phase1: replace reference ids with translated names #phase1: replace reference ids with translated names
for node, msg in traverse_translatable_target(self.document):
msgstr = catalog.gettext(msg)
# XXX add marker to untranslated parts
if not msgstr or msgstr == msg or not msgstr.strip():
# as-of-yet untranslated
continue
patch = new_document(source, settings)
CustomLocaleReporter(node.source, node.line).set_reporter(patch)
parser.parse(msgstr, patch)
patch = patch[0]
# XXX doctest and other block markup
if not isinstance(patch, nodes.paragraph):
continue # skip for now
old_name = msg
new_name = nodes.fully_normalize_name(patch.astext())
if old_name in self.document.nameids:
self.document.nameids[new_name] = (
self.document.nameids[old_name])
self.document.nametypes[new_name] = (
self.document.nametypes[old_name])
self.document.refnames[new_name] = (
self.document.refnames[old_name])
#phase2: replace reference ids with translated names
for node, msg in extract_messages(self.document): for node, msg in extract_messages(self.document):
msgstr = catalog.gettext(msg) msgstr = catalog.gettext(msg)
# XXX add marker to untranslated parts # XXX add marker to untranslated parts
@ -266,9 +234,9 @@ class Locale(Transform):
# _id was not duplicated. # _id was not duplicated.
# remove old_name entry from document ids database # remove old_name entry from document ids database
# to reuse original _id. # to reuse original _id.
self.document.nameids.pop(old_name, None) #supplemental self.document.nameids.pop(old_name, None)
self.document.nametypes.pop(old_name, None) #supplemental self.document.nametypes.pop(old_name, None)
self.document.ids.pop(_id, None) # must remove self.document.ids.pop(_id, None)
# re-entry with new named section node. # re-entry with new named section node.
self.document.note_implicit_target( self.document.note_implicit_target(
@ -310,7 +278,7 @@ class Locale(Transform):
node['translated'] = True node['translated'] = True
#phase3: translation #phase2: translation
for node, msg in extract_messages(self.document): for node, msg in extract_messages(self.document):
if node.get('translated', False): if node.get('translated', False):
continue continue
@ -454,7 +422,7 @@ class Locale(Transform):
node.children = patch.children node.children = patch.children
node['translated'] = True node['translated'] = True
#phase4: Extract and translate messages for index entries. # Extract and translate messages for index entries.
for node, entries in traverse_translatable_index(self.document): for node, entries in traverse_translatable_index(self.document):
new_entries = [] new_entries = []
for type, msg, tid, main in entries: for type, msg, tid, main in entries:

View File

@ -77,13 +77,6 @@ def extract_messages(doctree):
yield node, msg yield node, msg
def traverse_translatable_target(doctree):
"""Extract translatable target from a document tree."""
for node in doctree.traverse(nodes.target):
if 'names' in node and node['names']:
yield node, node['names'][0]
def traverse_translatable_index(doctree): def traverse_translatable_index(doctree):
"""Traverse translatable index node from a document tree.""" """Traverse translatable index node from a document tree."""
def is_block_index(node): def is_block_index(node):

View File

@ -31,10 +31,10 @@ msgstr "X EXPLICIT-TARGET"
msgid "" msgid ""
":ref:`explicit-target` point to ``explicit-target`` and `explicit-target`_" ":ref:`explicit-target` point to ``explicit-target`` and `explicit-target`_"
" point to ``explicit-target`` too." " point to duplicated id like ``id1``."
msgstr "" msgstr ""
":ref:`explicit-target` POINT TO ``explicit-target`` AND `X EXPLICIT-TARGET`_" ":ref:`explicit-target` POINT TO ``explicit-target`` AND `X EXPLICIT-TARGET`_"
" POINT TO ``explicit-target`` TOO." " POINT TO DUPLICATED ID LIKE ``id1``."
msgid "implicit section name" msgid "implicit section name"
msgstr "X IMPLICIT SECTION NAME" msgstr "X IMPLICIT SECTION NAME"
@ -53,21 +53,14 @@ msgstr ""
msgid "label bridged target section" msgid "label bridged target section"
msgstr "X LABEL BRIDGED TARGET SECTION" msgstr "X LABEL BRIDGED TARGET SECTION"
msgid "`bridge label`_ is also translatable and linked to translated section title." msgid "`bridge label`_ is not translatable but linked to translated section title."
msgstr "X `Y BRIDGE LABEL`_ IS ALSO TRANSLATABLE AND LINKED TO TRANSLATED SECTION TITLE." msgstr "X `bridge label`_ IS NOT TRANSLATABLE BUT LINKED TO TRANSLATED SECTION TITLE."
msgid "" msgid ""
"`bridge label2`_ point to ``section and label`` and `bridge label`_ point to " "`bridge label2`_ point to ``section and label`` and `bridge label`_ point to "
"``label bridged target section``. The second appeared `bridge label2`_ point " "``label bridged target section``. The second appeared `bridge label2`_ point "
"to correct target." "to correct target."
msgstr "" msgstr ""
"X `Y BRIDGE LABEL`_ POINT TO ``LABEL BRIDGED TARGET SECTION`` AND " "X `bridge label`_ POINT TO ``LABEL BRIDGED TARGET SECTION`` AND "
"`Z BRIDGE LABEL2`_ POINT TO ``SECTION AND LABEL``. THE SECOND APPEARED " "`bridge label2`_ POINT TO ``SECTION AND LABEL``. THE SECOND APPEARED "
"`Z BRIDGE LABEL2`_ POINT TO CORRECT TARGET." "`bridge label2`_ POINT TO CORRECT TARGET."
msgid "bridge label"
msgstr "Y BRIDGE LABEL"
msgid "bridge label2"
msgstr "Z BRIDGE LABEL2"

View File

@ -21,7 +21,7 @@ explicit-target
.. This case, a duplicated target id is generated by docutils. .. This case, a duplicated target id is generated by docutils.
:ref:`explicit-target` point to ``explicit-target`` and :ref:`explicit-target` point to ``explicit-target`` and
`explicit-target`_ point to ``explicit-target`` too. `explicit-target`_ point to duplicated id like ``id1``.
implicit section name implicit section name
@ -61,7 +61,7 @@ label bridged target section
.. This section is targeted through label definition. .. This section is targeted through label definition.
`bridge label`_ is also translatable and linked to translated section title. `bridge label`_ is not translatable but linked to translated section title.
`bridge label2`_ point to ``section and label`` and `bridge label`_ point to ``label bridged target section``. The second appeared `bridge label2`_ point to correct target. `bridge label2`_ point to ``section and label`` and `bridge label`_ point to ``label bridged target section``. The second appeared `bridge label2`_ point to correct target.

View File

@ -436,8 +436,9 @@ def test_i18n_label_target(app):
assert_elem( assert_elem(
para1[0], para1[0],
texts=['X EXPLICIT-TARGET', 'POINT TO', 'explicit-target', 'AND', texts=['X EXPLICIT-TARGET', 'POINT TO', 'explicit-target', 'AND',
'X EXPLICIT-TARGET', 'POINT TO', 'explicit-target', 'TOO.'], 'X EXPLICIT-TARGET', 'POINT TO DUPLICATED ID LIKE', 'id1',
refs=['explicit-target', 'explicit-target']) '.'],
refs=['explicit-target', 'id1'])
para2 = secs[2].findall('paragraph') para2 = secs[2].findall('paragraph')
assert_elem( assert_elem(
@ -457,16 +458,16 @@ def test_i18n_label_target(app):
para3 = secs[3].findall('paragraph') para3 = secs[3].findall('paragraph')
assert_elem( assert_elem(
para3[0], para3[0],
texts=['X', 'Y BRIDGE LABEL', texts=['X', 'bridge label',
'IS ALSO TRANSLATABLE AND LINKED TO TRANSLATED ' + 'IS NOT TRANSLATABLE BUT LINKED TO TRANSLATED ' +
'SECTION TITLE.'], 'SECTION TITLE.'],
refs=['label-bridged-target-section']) refs=['label-bridged-target-section'])
assert_elem( assert_elem(
para3[1], para3[1],
texts=['X', 'Y BRIDGE LABEL', 'POINT TO', texts=['X', 'bridge label', 'POINT TO',
'LABEL BRIDGED TARGET SECTION', 'AND', 'Z BRIDGE LABEL2', 'LABEL BRIDGED TARGET SECTION', 'AND', 'bridge label2',
'POINT TO', 'SECTION AND LABEL', '. THE SECOND APPEARED', 'POINT TO', 'SECTION AND LABEL', '. THE SECOND APPEARED',
'Z BRIDGE LABEL2', 'POINT TO CORRECT TARGET.'], 'bridge label2', 'POINT TO CORRECT TARGET.'],
refs=['label-bridged-target-section', refs=['label-bridged-target-section',
'section-and-label', 'section-and-label',
'section-and-label']) 'section-and-label'])