diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-06-12 17:54:40 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-06-12 17:54:40 +1000 |
| commit | 64bd9053a25297f7a442ca831c7da5b44bd33f84 (patch) | |
| tree | a90c6cad25a12028302ab1a5334510fba0229bae /lib/lvgl/docs/_ext | |
| parent | 611176ed667c4ed7ee9f609e958f9404f4aee91d (diff) | |
| download | tangara-fw-64bd9053a25297f7a442ca831c7da5b44bd33f84.tar.gz | |
Update LVGL to v9.1.0
Diffstat (limited to 'lib/lvgl/docs/_ext')
| -rw-r--r-- | lib/lvgl/docs/_ext/link_roles.py | 58 | ||||
| -rw-r--r-- | lib/lvgl/docs/_ext/lv_example.py | 51 |
2 files changed, 92 insertions, 17 deletions
diff --git a/lib/lvgl/docs/_ext/link_roles.py b/lib/lvgl/docs/_ext/link_roles.py new file mode 100644 index 00000000..48e36180 --- /dev/null +++ b/lib/lvgl/docs/_ext/link_roles.py @@ -0,0 +1,58 @@ +# based on http://protips.readthedocs.io/link-roles.html + +#from __future__ import print_function, unicode_literals + +import os +import re +import subprocess +from collections import namedtuple + +from docutils import nodes +from sphinx.transforms.post_transforms import SphinxPostTransform + +URL_BASE = { + "zh_CN": "https://lvgl.100ask.net/" +} + +class translation_link(nodes.Element): + """Node for "link_to_translation" role.""" + + +# Linking to translation is done at the "writing" stage to avoid issues with the info being cached between builders +def link_to_translation(name, rawtext, text, lineno, inliner, options={}, content=[]): + node = translation_link() + node['expr'] = (rawtext, text, options) + return [node], [] + + +class TranslationLinkNodeTransform(SphinxPostTransform): + # Transform needs to happen early to ensure the new reference node is also transformed + default_priority = 0 + + def run(self, **kwargs): + # Only output relative links if building HTML + for node in self.document.traverse(translation_link): + if 'html' in self.app.builder.name: + rawtext, text, options = node['expr'] + (language, link_text) = text.split(':') + env = self.document.settings.env + docname = env.docname + #doc_path = env.doc2path(docname, False) + urlpath = os.environ['LVGL_URLPATH']+'/' + return_path = URL_BASE.get(language, "") + urlpath + + url = '{}.html'.format(os.path.join(return_path, docname)) + + node.replace_self(nodes.reference(rawtext, link_text, refuri=url, **options)) + else: + node.replace_self([]) + + +def setup(app): + + # link to the current documentation file in specific language version + app.add_role('link_to_translation', link_to_translation) + app.add_node(translation_link) + app.add_post_transform(TranslationLinkNodeTransform) + + return {'parallel_read_safe': True, 'parallel_write_safe': True, 'version': '0.5'} diff --git a/lib/lvgl/docs/_ext/lv_example.py b/lib/lvgl/docs/_ext/lv_example.py index 1a818e24..014e7c3e 100644 --- a/lib/lvgl/docs/_ext/lv_example.py +++ b/lib/lvgl/docs/_ext/lv_example.py @@ -2,16 +2,14 @@ import os from docutils import nodes from docutils.parsers.rst import Directive, directives -from docutils.parsers.rst.directives.images import Image -from sphinx.directives.code import LiteralInclude +# from docutils.parsers.rst.directives.images import Image +# from sphinx.directives.code import LiteralInclude def excluded_list(argument): return argument.split(',') - - class LvExample(Directive): required_arguments = 1 option_spec = { @@ -19,8 +17,13 @@ class LvExample(Directive): 'language': directives.unchanged, 'description': directives.unchanged } + def get_example_code_path(self, example_path, language): - return os.path.abspath("../examples/" + example_path + "." + language) + base_path = os.path.dirname(__file__) + examples_path = os.path.abspath(os.path.join(base_path, '..', 'examples')) + example_path = os.path.join(examples_path, example_path + '.' + language) + return example_path + def human_language_name(self, language): if language == 'py': return 'MicroPython' @@ -28,18 +31,23 @@ class LvExample(Directive): return 'C' else: return language + def github_path(self, example_path, language): env = self.state.document.settings.env return f"https://github.com/lvgl/lvgl/blob/{env.config.repo_commit_hash}/examples/{example_path}.{language}" + def embed_code(self, example_file, example_path, language, buttons={}): toggle = nodes.container('', literal_block=False, classes=['toggle']) header = nodes.container('', literal_block=False, classes=['header']) toggle.append(header) + try: - with open(example_file) as f: - contents = f.read() + with open(example_file, 'rb') as f: + contents = f.read().decode('utf-8') except FileNotFoundError: + print('File Not Found', example_file) contents = 'Error encountered while trying to open ' + example_file + literal_list = nodes.literal_block(contents, contents) literal_list['language'] = language toggle.append(literal_list) @@ -48,6 +56,7 @@ class LvExample(Directive): paragraph_node.append(nodes.raw(text=f"<a class='lv-example-link-button' onclick=\"event.stopPropagation();\" href='{url}'>{text}</a>", format='html')) header.append(paragraph_node) return toggle + def run(self): example_path = self.arguments[0] example_name = os.path.split(example_path)[1] @@ -61,15 +70,22 @@ class LvExample(Directive): c_path = self.get_example_code_path(example_path, 'c') py_path = self.get_example_code_path(example_path, 'py') - c_code = self.embed_code(c_path, example_path, 'c', buttons={ - '<i class="fa fa-github"></i> GitHub': self.github_path(example_path, 'c') - }) - py_code = self.embed_code(py_path, example_path, 'py', buttons={ - '<i class="fa fa-github"></i> GitHub': self.github_path(example_path, 'py'), - '<i class="fa fa-play"></i> Simulator': f"https://sim.lvgl.io/v{env.config.version}/micropython/ports/javascript/index.html?script_startup=https://raw.githubusercontent.com/lvgl/lvgl/{env.config.repo_commit_hash}/examples/header.py&script=https://raw.githubusercontent.com/lvgl/lvgl/{env.config.repo_commit_hash}/examples/{example_path}.py" - }) + if os.path.exists(c_path): + c_code = self.embed_code(c_path, example_path, 'c', buttons={ + '<i class="fa fa-github"></i> View on GitHub': self.github_path(example_path, 'c') + }) + else: + c_code = None + + if os.path.exists(py_path): + py_code = self.embed_code(py_path, example_path, 'py', buttons={ + '<i class="fa fa-github"></i> View on GitHub': self.github_path(example_path, 'py'), + '<i class="fa fa-play"></i> MicroPython Simulator': f"https://sim.lvgl.io/v{env.config.version}/micropython/ports/javascript/index.html?script_startup=https://raw.githubusercontent.com/lvgl/lvgl/{env.config.repo_commit_hash}/examples/header.py&script=https://raw.githubusercontent.com/lvgl/lvgl/{env.config.repo_commit_hash}/examples/{example_path}.py" + }) + else: + py_code = None - if not 'c' in excluded_languages: + if 'c' not in excluded_languages: if env.app.tags.has('html'): iframe_html = f"<div class='lv-example' data-real-src='/{env.config.version}/_static/built_lv_examples/index.html?example={example_name}&w=320&h=240'></div>" @@ -77,9 +93,9 @@ class LvExample(Directive): layout_node = nodes.raw(text=f"<div class='lv-example-container'>{iframe_html}{description_html}</div>", format='html') node_list.append(layout_node) - if not 'c' in excluded_languages: + if 'c' not in excluded_languages and c_code is not None: node_list.append(c_code) - if not 'py' in excluded_languages: + if 'py' not in excluded_languages and py_code is not None: node_list.append(py_code) trailing_node = nodes.raw(text=f"<hr/>", format='html') @@ -87,6 +103,7 @@ class LvExample(Directive): return node_list + def setup(app): app.add_directive("lv_example", LvExample) app.add_config_value("repo_commit_hash", "", "env") |
