Fix #7768: i18n: Wrong root element is passed to figure_language_filename

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.
This commit is contained in:
Takeshi KOMIYA 2020-07-26 13:49:50 +09:00
parent ff4330abe3
commit 09ca58d0dd
3 changed files with 20 additions and 14 deletions

View File

@ -70,6 +70,8 @@ Bugs fixed
* #7928: py domain: failed to resolve a type annotation for the attribute * #7928: py domain: failed to resolve a type annotation for the attribute
* #7968: i18n: The content of ``math`` directive is interpreted as reST on * #7968: i18n: The content of ``math`` directive is interpreted as reST on
translation 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 * #7869: :rst:role:`abbr` role without an explanation will show the explanation
from the previous abbr role from the previous abbr role
* C and C++, removed ``noindex`` directive option as it did * C and C++, removed ``noindex`` directive option as it did

View File

@ -58,17 +58,13 @@ class ImageCollector(EnvironmentCollector):
elif imguri.find('://') != -1: elif imguri.find('://') != -1:
candidates['?'] = imguri candidates['?'] = imguri
continue continue
rel_imgpath, full_imgpath = app.env.relfn2path(imguri, docname)
if app.config.language: if imguri.endswith(os.extsep + '*'):
# substitute figures (ex. foo.png -> foo.en.png) # Update `node['uri']` to a relative path from srcdir
i18n_full_imgpath = search_image_for_language(full_imgpath, app.env) # from a relative path from current document.
if i18n_full_imgpath != full_imgpath: rel_imgpath, full_imgpath = app.env.relfn2path(imguri, docname)
full_imgpath = i18n_full_imgpath node['uri'] = rel_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 app.config.language: if app.config.language:
# Search language-specific figures at first # Search language-specific figures at first
i18n_imguri = get_image_filename_for_language(imguri, app.env) i18n_imguri = get_image_filename_for_language(imguri, app.env)
@ -77,7 +73,15 @@ class ImageCollector(EnvironmentCollector):
self.collect_candidates(app.env, full_imgpath, candidates, node) self.collect_candidates(app.env, full_imgpath, candidates, node)
else: 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 # map image paths to unique image names (so that they can be put
# into a single directory) # into a single directory)

View File

@ -320,8 +320,8 @@ def search_image_for_language(filename: str, env: "BuildEnvironment") -> str:
return filename return filename
translated = get_image_filename_for_language(filename, env) translated = get_image_filename_for_language(filename, env)
dirname = path.dirname(env.docname) _, abspath = env.relfn2path(translated)
if path.exists(path.join(env.srcdir, dirname, translated)): if path.exists(abspath):
return translated return translated
else: else:
return filename return filename