From 01ee24b63c680a0f67b0a656fc8f11545388af6e Mon Sep 17 00:00:00 2001 From: kou Date: Thu, 26 Jul 2012 00:40:40 +0900 Subject: Use term in description list as translation message Here is a .rst that reproduces the problem fixed by this changes: term-word description-paragraph "description-paragraph" is extracted as translation message by "sphinx-build -b gettext" but "term-word" isn't. It's because nodes.term node doesn't have source information. Source information should be added by Docutils instead of Sphinx. A patch that fix this problem in Doctuils had been submitted: https://sourceforge.net/tracker/?func=detail&aid=3548418&group_id=38414&atid=422032 This changes are workarond to work with docutils-0.9.1 or earlier. --- sphinx/util/nodes.py | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'sphinx/util') diff --git a/sphinx/util/nodes.py b/sphinx/util/nodes.py index dbedb7f2..8b8dd2bc 100644 --- a/sphinx/util/nodes.py +++ b/sphinx/util/nodes.py @@ -43,6 +43,14 @@ IGNORED_NODES = ( def extract_messages(doctree): """Extract translatable messages from a document tree.""" for node in doctree.traverse(nodes.TextElement): + # workaround: nodes.term doesn't have source, line and rawsource + # It should be fixed in Docutils. There is a patch for it in Docutils + # tracker: https://sourceforge.net/tracker/?func=detail&aid=3548418&group_id=38414&atid=422032 + if isinstance(node, nodes.term) and not node.source: + definition_list_item = node.parent; + node.source = definition_list_item.source + node.line = definition_list_item.line - 1 + node.rawsource = definition_list_item.rawsource.split("\n", 2)[0] if not node.source: continue # built-in message if isinstance(node, IGNORED_NODES): -- cgit v1.2.1