Skip to content

Commit e93c3a5

Browse files
authored
Merge pull request #2545 from haxtibal/tdmg/fix_text_nodes_in_source_view
fix(export/html): Consider MARKUP = Text option in source file view
2 parents 7c4a21b + c9559fb commit e93c3a5

File tree

6 files changed

+52
-9
lines changed

6 files changed

+52
-9
lines changed

strictdoc/export/html/generators/source_file_view_generator.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from pygments.lexers.templates import HtmlDjangoLexer
2121
from pygments.util import ClassNotFound
2222

23+
from strictdoc.backend.sdoc.constants import SDocMarkup
2324
from strictdoc.backend.sdoc_source_code.models.function_range_marker import (
2425
ForwardFunctionRangeMarker,
2526
FunctionRangeMarker,
@@ -114,7 +115,15 @@ def export(
114115
static_path=project_config.dir_for_sdoc_assets,
115116
)
116117
markup_renderer = MarkupRenderer.create(
117-
"RST",
118+
SDocMarkup.RST,
119+
traceability_index,
120+
link_renderer,
121+
html_templates,
122+
project_config,
123+
None,
124+
)
125+
text_renderer = MarkupRenderer.create(
126+
SDocMarkup.TEXT,
118127
traceability_index,
119128
link_renderer,
120129
html_templates,
@@ -127,6 +136,7 @@ def export(
127136
project_config=project_config,
128137
link_renderer=link_renderer,
129138
markup_renderer=markup_renderer,
139+
text_renderer=text_renderer,
130140
source_file=source_file,
131141
pygments_styles=pygments_styles,
132142
pygmented_source_file_lines=pygmented_source_file_lines,

strictdoc/export/html/generators/view_objects/source_file_view_object.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from markupsafe import Markup
99

1010
from strictdoc import __version__
11+
from strictdoc.backend.sdoc.constants import SDocMarkup
1112
from strictdoc.backend.sdoc.models.anchor import Anchor
1213
from strictdoc.backend.sdoc.models.document import SDocDocument
1314
from strictdoc.backend.sdoc.models.document_view import NullViewElement
@@ -71,6 +72,7 @@ def __init__(
7172
project_config: ProjectConfig,
7273
link_renderer: LinkRenderer,
7374
markup_renderer: MarkupRenderer,
75+
text_renderer: MarkupRenderer,
7476
source_file: SourceFile,
7577
pygments_styles: Markup,
7678
pygmented_source_file_lines: List[SourceLineEntry],
@@ -81,6 +83,7 @@ def __init__(
8183
self.project_config: ProjectConfig = project_config
8284
self.link_renderer: LinkRenderer = link_renderer
8385
self.markup_renderer: MarkupRenderer = markup_renderer
86+
self.text_renderer: MarkupRenderer = text_renderer
8487
self.source_file: SourceFile = source_file
8588
self.pygments_styles: Markup = pygments_styles
8689
self.pygmented_source_file_lines: List[SourceLineEntry] = (
@@ -144,20 +147,21 @@ def render_aside_requirement(
144147
)
145148

146149
def render_node_statement(self, node: SDocNode) -> Markup:
147-
return self.markup_renderer.render_node_statement(
148-
DocumentType.DOCUMENT, node
149-
)
150+
renderer = self.get_node_renderer(node)
151+
return renderer.render_node_statement(DocumentType.DOCUMENT, node)
150152

151153
def render_node_rationale(self, node: SDocNode) -> Markup:
152-
return self.markup_renderer.render_node_rationale(
153-
DocumentType.DOCUMENT, node
154-
)
154+
renderer = self.get_node_renderer(node)
155+
return renderer.render_node_rationale(DocumentType.DOCUMENT, node)
155156

156157
def render_node_field(self, node_field: SDocNodeField) -> Markup:
157158
assert isinstance(node_field, SDocNodeField), node_field
158-
return self.markup_renderer.render_node_field(
159-
DocumentType.DOCUMENT, node_field
159+
renderer = (
160+
self.get_node_renderer(node_field.parent)
161+
if node_field.parent is not None
162+
else self.markup_renderer
160163
)
164+
return renderer.render_node_field(DocumentType.DOCUMENT, node_field)
161165

162166
def render_url(self, url: str) -> str:
163167
return self.link_renderer.render_url(url)
@@ -193,6 +197,13 @@ def render_issues(
193197
"""
194198
return ""
195199

200+
def get_node_renderer(self, node: SDocNode) -> MarkupRenderer:
201+
parent_doc = node.get_parent_or_including_document()
202+
parent_doc_config = parent_doc.config
203+
if parent_doc_config.markup is SDocMarkup.RST:
204+
return self.markup_renderer
205+
return self.text_renderer
206+
196207
def get_source_file_path(self) -> str:
197208
return self.source_file.in_doctree_source_file_rel_path_posix
198209

tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/input.sdoc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,9 @@ STATEMENT: >>>
88
**This text will not be converted to strong tag**
99
<a href="url">link</a>
1010
<<<
11+
12+
[REQUIREMENT]
13+
UID: REQ-1
14+
TITLE: This Requirement Is Rendered in Document View *and* Source Code View
15+
STATEMENT: Writing about '*name' in statement shall not cause an RST parser error.
16+
RATIONALE: Writing about '*name' in rationale shall not cause an RST parser error.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#include <stdio.h>
2+
3+
// @relation(REQ-1, scope=line)
4+
void examle_1(char *name) {
5+
print("hello %s\n", name);
6+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[project]
2+
3+
features = [
4+
"REQUIREMENT_TO_SOURCE_TRACEABILITY",
5+
]

tests/integration/features/options/options_per_document/MARKUP/02_options_markup_is_text/test.itest

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,8 @@ CHECK: Published: Hello world doc
44
RUN: %cat %T/html/02_options_markup_is_text/input.html | filecheck %s --dump-input=fail --check-prefix CHECK-HTML
55
CHECK-HTML: **This text will not be converted to strong tag**
66
CHECK-HTML: &lt;a href=&#34;url&#34;&gt;link&lt;/a&gt;
7+
8+
RUN: %cat %T/html/_source_files/src/file.c.html | filecheck %s --check-prefix CHECK-SOURCE-FILE
9+
CHECK-SOURCE-FILE: This Requirement Is Rendered in Document View *and* Source Code View
10+
CHECK-SOURCE-FILE: Writing about &#39;*name&#39; in statement shall not cause an RST parser error.
11+
CHECK-SOURCE-FILE: Writing about &#39;*name&#39; in rationale shall not cause an RST parser error.

0 commit comments

Comments
 (0)