summaryrefslogtreecommitdiff
path: root/rtemsspec
diff options
context:
space:
mode:
Diffstat (limited to 'rtemsspec')
-rw-r--r--rtemsspec/sphinxcontent.py7
-rw-r--r--rtemsspec/tests/test_content_sphinx.py12
2 files changed, 19 insertions, 0 deletions
diff --git a/rtemsspec/sphinxcontent.py b/rtemsspec/sphinxcontent.py
index c47ea68e..12497ccc 100644
--- a/rtemsspec/sphinxcontent.py
+++ b/rtemsspec/sphinxcontent.py
@@ -113,6 +113,13 @@ class SphinxContent(Content):
""" Pops the top from the label stack. """
self._label_stack.pop()
+ @contextmanager
+ def label_scope(self, label: str) -> Iterator[None]:
+ """ Opens a label scope context. """
+ self.push_label(label)
+ yield
+ self.pop_label()
+
def add_label(self, label: str) -> None:
""" Adds a label. """
self.add(".. _" + label.strip() + ":")
diff --git a/rtemsspec/tests/test_content_sphinx.py b/rtemsspec/tests/test_content_sphinx.py
index 00be7a5f..e6bbd4bf 100644
--- a/rtemsspec/tests/test_content_sphinx.py
+++ b/rtemsspec/tests/test_content_sphinx.py
@@ -40,6 +40,18 @@ def test_add_label():
"""
+def test_label_scope():
+ content = SphinxContent()
+ with content.label_scope("x"):
+ with content.section("y"):
+ pass
+ assert str(content) == """.. _xY:
+
+y
+=
+"""
+
+
def test_directive():
content = SphinxContent()
with content.directive("x"):