summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshimizukawa <shimizukawa@gmail.com>2012-12-16 22:56:38 +0900
committershimizukawa <shimizukawa@gmail.com>2012-12-16 22:56:38 +0900
commitc4e8dfd718af805a9cff0e68cd6ef5d1cee965d2 (patch)
tree719bda85249bb00f118604894ea29c561672b103
parent657d4a741bfa2ee335d38759d92885c2636d0e71 (diff)
downloadsphinx-c4e8dfd718af805a9cff0e68cd6ef5d1cee965d2.tar.gz
Avoid unusable warning in using i18n translation. Closes #1057.
And there is related information at pull request #86
-rw-r--r--sphinx/environment.py8
-rw-r--r--tests/root/i18n/index.txt1
-rw-r--r--tests/root/i18n/literalblock.po30
-rw-r--r--tests/root/i18n/literalblock.txt13
-rw-r--r--tests/test_build_html.py1
-rw-r--r--tests/test_intl.py22
6 files changed, 75 insertions, 0 deletions
diff --git a/sphinx/environment.py b/sphinx/environment.py
index cada082d..0b9e5bcc 100644
--- a/sphinx/environment.py
+++ b/sphinx/environment.py
@@ -220,6 +220,14 @@ class Locale(Transform):
if not msgstr or msgstr == msg: # as-of-yet untranslated
continue
+ # Avoid "Literal block expected; none found." warnings.
+ # If msgstr ends with '::' then it cause warning message at
+ # parser.parse() processing.
+ # literal-block-warning is only appear in avobe case.
+ if msgstr.strip().endswith('::'):
+ msgstr += '\n\n dummy literal'
+ # dummy literal node will discard by 'patch = patch[0]'
+
patch = new_document(source, settings)
parser.parse(msgstr, patch)
patch = patch[0]
diff --git a/tests/root/i18n/index.txt b/tests/root/i18n/index.txt
index f35e2766..ee2d1c5f 100644
--- a/tests/root/i18n/index.txt
+++ b/tests/root/i18n/index.txt
@@ -5,3 +5,4 @@
footnote
external_links
refs_inconsistency
+ literalblock
diff --git a/tests/root/i18n/literalblock.po b/tests/root/i18n/literalblock.po
new file mode 100644
index 00000000..8ea83b3b
--- /dev/null
+++ b/tests/root/i18n/literalblock.po
@@ -0,0 +1,30 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2012, foof
+# This file is distributed under the same license as the foo package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: sphinx 1.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-11-22 08:28\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "i18n with literal block"
+msgstr "I18N WITH LITERAL BLOCK"
+
+msgid "Correct literal block::"
+msgstr "CORRECT LITERAL BLOCK::"
+
+msgid "Missing literal block::"
+msgstr "MISSING LITERAL BLOCK::"
+
+msgid "That's all."
+msgstr "THAT'S ALL."
+
diff --git a/tests/root/i18n/literalblock.txt b/tests/root/i18n/literalblock.txt
new file mode 100644
index 00000000..c9c71099
--- /dev/null
+++ b/tests/root/i18n/literalblock.txt
@@ -0,0 +1,13 @@
+:tocdepth: 2
+
+i18n with literal block
+=========================
+
+Correct literal block::
+
+ this is
+ literal block
+
+Missing literal block::
+
+That's all.
diff --git a/tests/test_build_html.py b/tests/test_build_html.py
index a693e6c0..69111d4e 100644
--- a/tests/test_build_html.py
+++ b/tests/test_build_html.py
@@ -35,6 +35,7 @@ ENV_WARNINGS = """\
%(root)s/autodoc_fodder.py:docstring of autodoc_fodder\\.MarkupError:2: \
WARNING: Explicit markup ends without a blank line; unexpected \
unindent\\.\\n?
+%(root)s/i18n/literalblock.txt:13: WARNING: Literal block expected; none found.
%(root)s/images.txt:9: WARNING: image file not readable: foo.png
%(root)s/images.txt:23: WARNING: nonlocal image URI found: \
http://www.python.org/logo.png
diff --git a/tests/test_intl.py b/tests/test_intl.py
index 30854478..67507ed1 100644
--- a/tests/test_intl.py
+++ b/tests/test_intl.py
@@ -184,3 +184,25 @@ def test_i18n_keep_external_links(app):
if matched:
matched_line = matched.group()
assert expect_line == matched_line
+
+
+@with_app(buildername='text', warning=warnfile, cleanenv=True,
+ confoverrides={'language': 'xx', 'locale_dirs': ['.'],
+ 'gettext_compact': False})
+def test_i18n_literalblock_warning(app):
+ app.builddir.rmtree(True) #for warnings acceleration
+ app.builder.build(['i18n/literalblock'])
+ result = (app.outdir / 'i18n' / 'literalblock.txt').text(encoding='utf-8')
+ expect = (u"\nI18N WITH LITERAL BLOCK"
+ u"\n***********************\n"
+ u"\nCORRECT LITERAL BLOCK:\n"
+ u"\n this is"
+ u"\n literal block\n"
+ u"\nMISSING LITERAL BLOCK:\n"
+ u"\n<SYSTEM MESSAGE: ")
+ assert result.startswith(expect)
+
+ warnings = warnfile.getvalue().replace(os.sep, '/')
+ expected_warning_expr = u'.*/i18n/literalblock.txt:\\d+: ' \
+ u'WARNING: Literal block expected; none found.'
+ assert re.search(expected_warning_expr, warnings)