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.