Merge branch 'stable'

This commit is contained in:
Takeshi KOMIYA 2017-05-28 10:39:26 +09:00
commit 1ce051d4a4
6 changed files with 41 additions and 9 deletions

View File

@ -89,6 +89,7 @@ Bugs fixed
* #3796: env.resolve_references() crashes when non-document node given * #3796: env.resolve_references() crashes when non-document node given
* #3803: Sphinx crashes with invalid PO files * #3803: Sphinx crashes with invalid PO files
* #3791: PDF "continued on next page" for long tables isn't internationalized * #3791: PDF "continued on next page" for long tables isn't internationalized
* #3788: smartquotes emits warnings for unsupported languages
Testing Testing
-------- --------

View File

@ -24,7 +24,7 @@ from sphinx.errors import SphinxError
from sphinx.application import Sphinx from sphinx.application import Sphinx
from sphinx.util import Tee, format_exception_cut_frames, save_traceback from sphinx.util import Tee, format_exception_cut_frames, save_traceback
from sphinx.util.console import red, nocolor, color_terminal # type: ignore from sphinx.util.console import red, nocolor, color_terminal # type: ignore
from sphinx.util.docutils import docutils_namespace from sphinx.util.docutils import docutils_namespace, patch_docutils
from sphinx.util.osutil import abspath, fs_encoding from sphinx.util.osutil import abspath, fs_encoding
from sphinx.util.pycompat import terminal_safe from sphinx.util.pycompat import terminal_safe
@ -299,7 +299,7 @@ def main(argv=sys.argv[1:]): # type: ignore
app = None app = None
try: try:
with docutils_namespace(): with patch_docutils(), docutils_namespace():
app = Sphinx(srcdir, confdir, outdir, doctreedir, opts.builder, app = Sphinx(srcdir, confdir, outdir, doctreedir, opts.builder,
confoverrides, status, warning, opts.freshenv, confoverrides, status, warning, opts.freshenv,
opts.warningiserror, opts.tags, opts.verbosity, opts.jobs) opts.warningiserror, opts.tags, opts.verbosity, opts.jobs)

View File

@ -25,7 +25,7 @@ from six.moves import cPickle as pickle
from docutils.io import NullOutput from docutils.io import NullOutput
from docutils.core import Publisher from docutils.core import Publisher
from docutils.utils import Reporter, get_source_line from docutils.utils import Reporter, get_source_line, normalize_language_tag
from docutils.utils.smartquotes import smartchars from docutils.utils.smartquotes import smartchars
from docutils.parsers.rst import roles from docutils.parsers.rst import roles
from docutils.parsers.rst.languages import en as english from docutils.parsers.rst.languages import en as english
@ -672,10 +672,15 @@ class BuildEnvironment(object):
self.settings['trim_footnote_reference_space'] = \ self.settings['trim_footnote_reference_space'] = \
self.config.trim_footnote_reference_space self.config.trim_footnote_reference_space
self.settings['gettext_compact'] = self.config.gettext_compact self.settings['gettext_compact'] = self.config.gettext_compact
language = (self.config.language or 'en').replace('_', '-')
language = self.config.language or 'en'
self.settings['language_code'] = language self.settings['language_code'] = language
if language in smartchars.quotes: # We enable smartypants by default self.settings['smart_quotes'] = True
self.settings['smart_quotes'] = True for tag in normalize_language_tag(language):
if tag in smartchars.quotes:
break
else:
self.settings['smart_quotes'] = False
docutilsconf = path.join(self.srcdir, 'docutils.conf') docutilsconf = path.join(self.srcdir, 'docutils.conf')
# read docutils.conf from source dir, not from current dir # read docutils.conf from source dir, not from current dir

View File

@ -23,7 +23,7 @@ from distutils.errors import DistutilsOptionError, DistutilsExecError # type: i
from sphinx.application import Sphinx from sphinx.application import Sphinx
from sphinx.cmdline import handle_exception from sphinx.cmdline import handle_exception
from sphinx.util.console import nocolor, color_terminal from sphinx.util.console import nocolor, color_terminal
from sphinx.util.docutils import docutils_namespace from sphinx.util.docutils import docutils_namespace, patch_docutils
from sphinx.util.osutil import abspath from sphinx.util.osutil import abspath
if False: if False:
@ -183,7 +183,7 @@ class BuildDoc(Command):
app = None app = None
try: try:
with docutils_namespace(): with patch_docutils(), docutils_namespace():
app = Sphinx(self.source_dir, self.config_dir, app = Sphinx(self.source_dir, self.config_dir,
builder_target_dir, self.doctree_dir, builder_target_dir, self.doctree_dir,
builder, confoverrides, status_stream, builder, confoverrides, status_stream,

View File

@ -13,9 +13,11 @@ from __future__ import absolute_import
import re import re
import types import types
from copy import copy from copy import copy
from distutils.version import LooseVersion
from contextlib import contextmanager from contextlib import contextmanager
import docutils import docutils
from docutils.languages import get_language
from docutils.utils import Reporter from docutils.utils import Reporter
from docutils.parsers.rst import directives, roles, convert_directive_function from docutils.parsers.rst import directives, roles, convert_directive_function
@ -34,7 +36,7 @@ if False:
from sphinx.environment import BuildEnvironment # NOQA from sphinx.environment import BuildEnvironment # NOQA
__version_info__ = tuple(map(int, docutils.__version__.split('.'))) __version_info__ = tuple(LooseVersion(docutils.__version__).version)
@contextmanager @contextmanager
@ -51,6 +53,29 @@ def docutils_namespace():
roles._roles = _roles roles._roles = _roles
def patched_get_language(language_code, reporter=None):
# type: (unicode, Reporter) -> Any
"""A wrapper for docutils.languages.get_language().
This ignores the second argument ``reporter`` to suppress warnings.
refs: https://github.com/sphinx-doc/sphinx/issues/3788
"""
return get_language(language_code)
@contextmanager
def patch_docutils():
# type: () -> Iterator[None]
"""Patch to docutils temporarily."""
try:
docutils.languages.get_language = patched_get_language
yield
finally:
# restore original implementations
docutils.languages.get_language = get_language
class ElementLookupError(Exception): class ElementLookupError(Exception):
pass pass

View File

@ -12,6 +12,7 @@
from sphinx.websupport import WebSupport from sphinx.websupport import WebSupport
try: try:
sqlalchemy_missing = False sqlalchemy_missing = False
import sqlalchemy # NOQA
except ImportError: except ImportError:
sqlalchemy_missing = True sqlalchemy_missing = True