[rtems-central commit] sphinxcontent: Add SphinxInterfaceMapper

Sebastian Huber sebh at rtems.org
Wed Mar 10 09:02:05 UTC 2021


Module:    rtems-central
Branch:    master
Commit:    cf72a499f35b9bfa77b7ee3a9b0dd4a0ad7d9326
Changeset: http://git.rtems.org/rtems-central/commit/?id=cf72a499f35b9bfa77b7ee3a9b0dd4a0ad7d9326

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Mar  9 08:45:52 2021 +0100

sphinxcontent: Add SphinxInterfaceMapper

---

 rtemsspec/applconfig.py                |  4 ++--
 rtemsspec/glossary.py                  |  4 ++--
 rtemsspec/interfacedoc.py              |  4 ++--
 rtemsspec/sphinxcontent.py             | 26 ++++++++++++++++++++++----
 rtemsspec/tests/spec-sphinx/a.yml      | 13 +++++++++++++
 rtemsspec/tests/test_content_sphinx.py |  1 +
 6 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/rtemsspec/applconfig.py b/rtemsspec/applconfig.py
index 07a7490..364b122 100644
--- a/rtemsspec/applconfig.py
+++ b/rtemsspec/applconfig.py
@@ -29,7 +29,7 @@ from typing import Any, Dict, List, Optional
 
 from rtemsspec.content import CContent, get_value_double_colon, \
     get_value_doxygen_function, get_value_doxygen_group, get_value_hash
-from rtemsspec.sphinxcontent import SphinxContent, SphinxMapper
+from rtemsspec.sphinxcontent import SphinxContent, SphinxInterfaceMapper
 from rtemsspec.items import EmptyItem, Item, ItemCache, ItemGetValueContext, \
     ItemMapper
 
@@ -471,7 +471,7 @@ def generate(config: dict, item_cache: ItemCache) -> None:
     :param item_cache: The specification item cache containing the application
                        configuration groups and options.
     """
-    sphinx_mapper = SphinxMapper(EmptyItem())
+    sphinx_mapper = SphinxInterfaceMapper(EmptyItem())
     _add_sphinx_get_values(sphinx_mapper)
     doxygen_mapper = ItemMapper(EmptyItem())
     _add_doxygen_get_values(doxygen_mapper)
diff --git a/rtemsspec/glossary.py b/rtemsspec/glossary.py
index 64fcbc6..f42781b 100644
--- a/rtemsspec/glossary.py
+++ b/rtemsspec/glossary.py
@@ -28,7 +28,7 @@ import glob
 import re
 from typing import Any, Dict, NamedTuple
 
-from rtemsspec.sphinxcontent import SphinxContent, SphinxMapper
+from rtemsspec.sphinxcontent import SphinxContent, SphinxInterfaceMapper
 from rtemsspec.items import Item, ItemCache, ItemGetValueContext, ItemMapper
 
 ItemMap = Dict[str, Item]
@@ -59,7 +59,7 @@ def _generate_glossary_content(terms: ItemMap, header: str,
         content.add(":sorted:")
         for item in sorted(terms.values(), key=lambda x: x["term"].lower()):
             content.register_license_and_copyrights_of_item(item)
-            text = SphinxMapper(item).substitute(item["text"])
+            text = SphinxInterfaceMapper(item).substitute(item["text"])
             content.add_definition_item(item["term"], text)
     content.add_licence_and_copyrights()
     content.write(target)
diff --git a/rtemsspec/interfacedoc.py b/rtemsspec/interfacedoc.py
index 3c575e1..0787c20 100644
--- a/rtemsspec/interfacedoc.py
+++ b/rtemsspec/interfacedoc.py
@@ -32,7 +32,7 @@ from typing import Any, Dict, List, Tuple
 
 from rtemsspec.content import CContent
 from rtemsspec.sphinxcontent import get_label, get_reference, SphinxContent, \
-     SphinxMapper
+     SphinxInterfaceMapper
 from rtemsspec.items import Item, ItemCache, ItemGetValueContext, ItemMapper
 
 ItemMap = Dict[str, Item]
@@ -68,7 +68,7 @@ def _get_param(ctx: ItemGetValueContext) -> Any:
     return f"``{_sanitize_name(ctx.value[ctx.key])}``"
 
 
-class _Mapper(SphinxMapper):
+class _Mapper(SphinxInterfaceMapper):
     def __init__(self, item: Item, group_uids: List[str]):
         super().__init__(item)
         self._group_uids = set(group_uids)
diff --git a/rtemsspec/sphinxcontent.py b/rtemsspec/sphinxcontent.py
index 2d21402..1a00b79 100644
--- a/rtemsspec/sphinxcontent.py
+++ b/rtemsspec/sphinxcontent.py
@@ -209,6 +209,10 @@ def _get_appl_config_option(ctx: ItemGetValueContext) -> Any:
     return f":ref:`{ctx.value[ctx.key]}`"
 
 
+def _get_value_sphinx_data(ctx: ItemGetValueContext) -> Any:
+    return f":c:data:`{ctx.value[ctx.key]}`"
+
+
 def _get_value_sphinx_macro(ctx: ItemGetValueContext) -> Any:
     return f":c:macro:`{ctx.value[ctx.key]}`"
 
@@ -244,13 +248,13 @@ class SphinxMapper(ItemMapper):
         self.add_get_value("glossary/term:/term", _get_ref_term)
         self.add_get_value("glossary/term:/plural", _get_ref_term_plural)
         self.add_get_value("interface/appl-config-option/feature-enable:/name",
-                           _get_appl_config_option)
+                           _get_value_sphinx_data)
         self.add_get_value("interface/appl-config-option/feature:/name",
-                           _get_appl_config_option)
+                           _get_value_sphinx_data)
         self.add_get_value("interface/appl-config-option/initializer:/name",
-                           _get_appl_config_option)
+                           _get_value_sphinx_data)
         self.add_get_value("interface/appl-config-option/integer:/name",
-                           _get_appl_config_option)
+                           _get_value_sphinx_data)
         self.add_get_value("interface/define:/name", _get_value_sphinx_macro)
         self.add_get_value("interface/enum:/name", _get_value_sphinx_type)
         self.add_get_value("interface/enumerator:/name",
@@ -267,3 +271,17 @@ class SphinxMapper(ItemMapper):
                            _get_value_sphinx_function)
         self.add_get_value("interface/unspecified-type:/name",
                            _get_value_sphinx_unspecified_type)
+
+
+class SphinxInterfaceMapper(SphinxMapper):
+    """ Sphinx item mapper for the interface documentation. """
+    def __init__(self, item: Item, recursive: bool = False):
+        super().__init__(item, recursive)
+        self.add_get_value("interface/appl-config-option/feature-enable:/name",
+                           _get_appl_config_option)
+        self.add_get_value("interface/appl-config-option/feature:/name",
+                           _get_appl_config_option)
+        self.add_get_value("interface/appl-config-option/initializer:/name",
+                           _get_appl_config_option)
+        self.add_get_value("interface/appl-config-option/integer:/name",
+                           _get_appl_config_option)
diff --git a/rtemsspec/tests/spec-sphinx/a.yml b/rtemsspec/tests/spec-sphinx/a.yml
new file mode 100644
index 0000000..a3e406a
--- /dev/null
+++ b/rtemsspec/tests/spec-sphinx/a.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+default: default a
+description: description a
+index-entries: []
+name: a
+notes: null
+appl-config-option-type: feature
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+interface-type: appl-config-option
+links: []
+type: interface
diff --git a/rtemsspec/tests/test_content_sphinx.py b/rtemsspec/tests/test_content_sphinx.py
index f923508..85d1e15 100644
--- a/rtemsspec/tests/test_content_sphinx.py
+++ b/rtemsspec/tests/test_content_sphinx.py
@@ -299,3 +299,4 @@ def test_substitute(tmpdir):
     assert mapper.substitute("${x:/plural}") == ":term:`ys <y>`"
     mapper.add_get_value("other:/name", lambda ctx: ctx.value[ctx.key])
     assert mapper.substitute("${y:/name}") == "foobar"
+    assert mapper.substitute("${a:/name}") == ":c:data:`a`"



More information about the vc mailing list