Skip to content

Commit

Permalink
Fix #7768: i18n: Wrong root element is passed to figure_language_file…
Browse files Browse the repository at this point in the history
…name

The root element should be a user specified path; a relative path from
current document or absolute path based on source directory.  But an
absolute path is passed instead.
  • Loading branch information
tk0miya committed Jul 26, 2020
1 parent ff4330a commit 09ca58d
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 14 deletions.
2 changes: 2 additions & 0 deletions CHANGES
Expand Up @@ -70,6 +70,8 @@ Bugs fixed
* #7928: py domain: failed to resolve a type annotation for the attribute
* #7968: i18n: The content of ``math`` directive is interpreted as reST on
translation
* #7768: i18n: The ``root`` element for :confval:`figure_language_filename` is
not a path that user specifies in the document
* #7869: :rst:role:`abbr` role without an explanation will show the explanation
from the previous abbr role
* C and C++, removed ``noindex`` directive option as it did
Expand Down
28 changes: 16 additions & 12 deletions sphinx/environment/collectors/asset.py
Expand Up @@ -58,17 +58,13 @@ def process_doc(self, app: Sphinx, doctree: nodes.document) -> None:
elif imguri.find('://') != -1:
candidates['?'] = imguri
continue
rel_imgpath, full_imgpath = app.env.relfn2path(imguri, docname)
if app.config.language:
# substitute figures (ex. foo.png -> foo.en.png)
i18n_full_imgpath = search_image_for_language(full_imgpath, app.env)
if i18n_full_imgpath != full_imgpath:
full_imgpath = i18n_full_imgpath
rel_imgpath = relative_path(path.join(app.srcdir, 'dummy'),
i18n_full_imgpath)
# set imgpath as default URI
node['uri'] = rel_imgpath
if rel_imgpath.endswith(os.extsep + '*'):

if imguri.endswith(os.extsep + '*'):
# Update `node['uri']` to a relative path from srcdir
# from a relative path from current document.
rel_imgpath, full_imgpath = app.env.relfn2path(imguri, docname)
node['uri'] = rel_imgpath

if app.config.language:
# Search language-specific figures at first
i18n_imguri = get_image_filename_for_language(imguri, app.env)
Expand All @@ -77,7 +73,15 @@ def process_doc(self, app: Sphinx, doctree: nodes.document) -> None:

self.collect_candidates(app.env, full_imgpath, candidates, node)
else:
candidates['*'] = rel_imgpath
if app.config.language:
# substitute imguri by figure_language_filename
# (ex. foo.png -> foo.en.png)
imguri = search_image_for_language(imguri, app.env)

# Update `node['uri']` to a relative path from srcdir
# from a relative path from current document.
node['uri'], _ = app.env.relfn2path(imguri, docname)
candidates['*'] = node['uri']

# map image paths to unique image names (so that they can be put
# into a single directory)
Expand Down
4 changes: 2 additions & 2 deletions sphinx/util/i18n.py
Expand Up @@ -320,8 +320,8 @@ def search_image_for_language(filename: str, env: "BuildEnvironment") -> str:
return filename

translated = get_image_filename_for_language(filename, env)
dirname = path.dirname(env.docname)
if path.exists(path.join(env.srcdir, dirname, translated)):
_, abspath = env.relfn2path(translated)
if path.exists(abspath):
return translated
else:
return filename

0 comments on commit 09ca58d

Please sign in to comment.