~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/sphinx/translations.py

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 # SPDX-License-Identifier: GPL-2.0
  2 #
  3 # Copyright © 2023, Oracle and/or its affiliates.
  4 # Author: Vegard Nossum <vegard.nossum@oracle.com>
  5 #
  6 # Add translation links to the top of the document.
  7 #
  8 
  9 import os
 10 
 11 from docutils import nodes
 12 from docutils.transforms import Transform
 13 
 14 import sphinx
 15 from sphinx import addnodes
 16 from sphinx.errors import NoUri
 17 
 18 all_languages = {
 19     # English is always first
 20     None: 'English',
 21 
 22     # Keep the rest sorted alphabetically
 23     'zh_CN': 'Chinese (Simplified)',
 24     'zh_TW': 'Chinese (Traditional)',
 25     'it_IT': 'Italian',
 26     'ja_JP': 'Japanese',
 27     'ko_KR': 'Korean',
 28     'sp_SP': 'Spanish',
 29 }
 30 
 31 class LanguagesNode(nodes.Element):
 32     pass
 33 
 34 class TranslationsTransform(Transform):
 35     default_priority = 900
 36 
 37     def apply(self):
 38         app = self.document.settings.env.app
 39         docname = self.document.settings.env.docname
 40 
 41         this_lang_code = None
 42         components = docname.split(os.sep)
 43         if components[0] == 'translations' and len(components) > 2:
 44             this_lang_code = components[1]
 45 
 46             # normalize docname to be the untranslated one
 47             docname = os.path.join(*components[2:])
 48 
 49         new_nodes = LanguagesNode()
 50         new_nodes['current_language'] = all_languages[this_lang_code]
 51 
 52         for lang_code, lang_name in all_languages.items():
 53             if lang_code == this_lang_code:
 54                 continue
 55 
 56             if lang_code is None:
 57                 target_name = docname
 58             else:
 59                 target_name = os.path.join('translations', lang_code, docname)
 60 
 61             pxref = addnodes.pending_xref('', refdomain='std',
 62                 reftype='doc', reftarget='/' + target_name, modname=None,
 63                 classname=None, refexplicit=True)
 64             pxref += nodes.Text(lang_name)
 65             new_nodes += pxref
 66 
 67         self.document.insert(0, new_nodes)
 68 
 69 def process_languages(app, doctree, docname):
 70     for node in doctree.traverse(LanguagesNode):
 71         if app.builder.format not in ['html']:
 72             node.parent.remove(node)
 73             continue
 74 
 75         languages = []
 76 
 77         # Iterate over the child nodes; any resolved links will have
 78         # the type 'nodes.reference', while unresolved links will be
 79         # type 'nodes.Text'.
 80         languages = list(filter(lambda xref:
 81             isinstance(xref, nodes.reference), node.children))
 82 
 83         html_content = app.builder.templates.render('translations.html',
 84             context={
 85                 'current_language': node['current_language'],
 86                 'languages': languages,
 87             })
 88 
 89         node.replace_self(nodes.raw('', html_content, format='html'))
 90 
 91 def setup(app):
 92     app.add_node(LanguagesNode)
 93     app.add_transform(TranslationsTransform)
 94     app.connect('doctree-resolved', process_languages)
 95 
 96     return {
 97         'parallel_read_safe': True,
 98         'parallel_write_safe': True,
 99     }

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php