diff --git a/strictdoc/export/html/generators/source_file_view_generator.py b/strictdoc/export/html/generators/source_file_view_generator.py
index 2c94ad945..817507061 100644
--- a/strictdoc/export/html/generators/source_file_view_generator.py
+++ b/strictdoc/export/html/generators/source_file_view_generator.py
@@ -20,6 +20,7 @@
from pygments.lexers.templates import HtmlDjangoLexer
from pygments.util import ClassNotFound
+from strictdoc.backend.sdoc.constants import SDocMarkup
from strictdoc.backend.sdoc_source_code.models.function_range_marker import (
ForwardFunctionRangeMarker,
FunctionRangeMarker,
@@ -114,7 +115,15 @@ def export(
static_path=project_config.dir_for_sdoc_assets,
)
markup_renderer = MarkupRenderer.create(
- "RST",
+ SDocMarkup.RST,
+ traceability_index,
+ link_renderer,
+ html_templates,
+ project_config,
+ None,
+ )
+ text_renderer = MarkupRenderer.create(
+ SDocMarkup.TEXT,
traceability_index,
link_renderer,
html_templates,
@@ -127,6 +136,7 @@ def export(
project_config=project_config,
link_renderer=link_renderer,
markup_renderer=markup_renderer,
+ text_renderer=text_renderer,
source_file=source_file,
pygments_styles=pygments_styles,
pygmented_source_file_lines=pygmented_source_file_lines,
diff --git a/strictdoc/export/html/generators/view_objects/source_file_view_object.py b/strictdoc/export/html/generators/view_objects/source_file_view_object.py
index 3ab9d7c01..88da08568 100644
--- a/strictdoc/export/html/generators/view_objects/source_file_view_object.py
+++ b/strictdoc/export/html/generators/view_objects/source_file_view_object.py
@@ -8,6 +8,7 @@
from markupsafe import Markup
from strictdoc import __version__
+from strictdoc.backend.sdoc.constants import SDocMarkup
from strictdoc.backend.sdoc.models.anchor import Anchor
from strictdoc.backend.sdoc.models.document import SDocDocument
from strictdoc.backend.sdoc.models.document_view import NullViewElement
@@ -71,6 +72,7 @@ def __init__(
project_config: ProjectConfig,
link_renderer: LinkRenderer,
markup_renderer: MarkupRenderer,
+ text_renderer: MarkupRenderer,
source_file: SourceFile,
pygments_styles: Markup,
pygmented_source_file_lines: List[SourceLineEntry],
@@ -81,6 +83,7 @@ def __init__(
self.project_config: ProjectConfig = project_config
self.link_renderer: LinkRenderer = link_renderer
self.markup_renderer: MarkupRenderer = markup_renderer
+ self.text_renderer: MarkupRenderer = text_renderer
self.source_file: SourceFile = source_file
self.pygments_styles: Markup = pygments_styles
self.pygmented_source_file_lines: List[SourceLineEntry] = (
@@ -144,20 +147,21 @@ def render_aside_requirement(
)
def render_node_statement(self, node: SDocNode) -> Markup:
- return self.markup_renderer.render_node_statement(
- DocumentType.DOCUMENT, node
- )
+ renderer = self.get_node_renderer(node)
+ return renderer.render_node_statement(DocumentType.DOCUMENT, node)
def render_node_rationale(self, node: SDocNode) -> Markup:
- return self.markup_renderer.render_node_rationale(
- DocumentType.DOCUMENT, node
- )
+ renderer = self.get_node_renderer(node)
+ return renderer.render_node_rationale(DocumentType.DOCUMENT, node)
def render_node_field(self, node_field: SDocNodeField) -> Markup:
assert isinstance(node_field, SDocNodeField), node_field
- return self.markup_renderer.render_node_field(
- DocumentType.DOCUMENT, node_field
+ renderer = (
+ self.get_node_renderer(node_field.parent)
+ if node_field.parent is not None
+ else self.markup_renderer
)
+ return renderer.render_node_field(DocumentType.DOCUMENT, node_field)
def render_url(self, url: str) -> str:
return self.link_renderer.render_url(url)
@@ -193,6 +197,13 @@ def render_issues(
"""
return ""
+ def get_node_renderer(self, node: SDocNode) -> MarkupRenderer:
+ parent_doc = node.get_parent_or_including_document()
+ parent_doc_config = parent_doc.config
+ if parent_doc_config.markup is SDocMarkup.RST:
+ return self.markup_renderer
+ return self.text_renderer
+
def get_source_file_path(self) -> str:
return self.source_file.in_doctree_source_file_rel_path_posix
diff --git a/tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/input.sdoc b/tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/input.sdoc
index 102658d09..9b9b07acd 100644
--- a/tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/input.sdoc
+++ b/tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/input.sdoc
@@ -8,3 +8,9 @@ STATEMENT: >>>
**This text will not be converted to strong tag**
link
<<<
+
+[REQUIREMENT]
+UID: REQ-1
+TITLE: This Requirement Is Rendered in Document View *and* Source Code View
+STATEMENT: Writing about '*name' in statement shall not cause an RST parser error.
+RATIONALE: Writing about '*name' in rationale shall not cause an RST parser error.
diff --git a/tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/src/file.c b/tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/src/file.c
new file mode 100644
index 000000000..c068454e7
--- /dev/null
+++ b/tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/src/file.c
@@ -0,0 +1,6 @@
+#include
+
+// @relation(REQ-1, scope=line)
+void examle_1(char *name) {
+ print("hello %s\n", name);
+}
diff --git a/tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/strictdoc.toml b/tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/strictdoc.toml
new file mode 100644
index 000000000..943e69f5a
--- /dev/null
+++ b/tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/strictdoc.toml
@@ -0,0 +1,5 @@
+[project]
+
+features = [
+ "REQUIREMENT_TO_SOURCE_TRACEABILITY",
+]
diff --git a/tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/test.itest b/tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/test.itest
index 594ab583a..04a4e0675 100644
--- a/tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/test.itest
+++ b/tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/test.itest
@@ -4,3 +4,8 @@ CHECK: Published: Hello world doc
RUN: %cat %T/html/02_options_markup_is_text/input.html | filecheck %s --dump-input=fail --check-prefix CHECK-HTML
CHECK-HTML: **This text will not be converted to strong tag**
CHECK-HTML: <a href="url">link</a>
+
+RUN: %cat %T/html/_source_files/src/file.c.html | filecheck %s --check-prefix CHECK-SOURCE-FILE
+CHECK-SOURCE-FILE: This Requirement Is Rendered in Document View *and* Source Code View
+CHECK-SOURCE-FILE: Writing about '*name' in statement shall not cause an RST parser error.
+CHECK-SOURCE-FILE: Writing about '*name' in rationale shall not cause an RST parser error.