Skip to content

Commit d036f4a

Browse files
committed
fix: links in snippets
1 parent a2b1e25 commit d036f4a

File tree

4 files changed

+50
-46
lines changed

4 files changed

+50
-46
lines changed

mkdoxy/doxygen.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from mkdoxy.cache import Cache
66
from mkdoxy.constants import Kind, Visibility
77
from mkdoxy.node import Node
8+
from mkdoxy.project import ProjectContext
89
from mkdoxy.xml_parser import XmlParser
910

1011
log: logging.Logger = logging.getLogger("mkdocs")
@@ -19,13 +20,13 @@ def __init__(self, index_path: str, parser: XmlParser, cache: Cache):
1920
xml = ElementTree.parse(path_xml).getroot()
2021

2122
self.parser = parser
22-
self.cache = cache
23+
self.ctx = ProjectContext(cache)
2324

24-
self.root = Node("root", None, self.cache, self.parser, None)
25-
self.groups = Node("root", None, self.cache, self.parser, None)
26-
self.files = Node("root", None, self.cache, self.parser, None)
27-
self.pages = Node("root", None, self.cache, self.parser, None)
28-
self.examples = Node("root", None, self.cache, self.parser, None)
25+
self.root = Node("root", None, self.ctx, self.parser, None)
26+
self.groups = Node("root", None, self.ctx, self.parser, None)
27+
self.files = Node("root", None, self.ctx, self.parser, None)
28+
self.pages = Node("root", None, self.ctx, self.parser, None)
29+
self.examples = Node("root", None, self.ctx, self.parser, None)
2930

3031
for compound in xml.findall("compound"):
3132
kind = Kind.from_str(compound.get("kind"))
@@ -34,7 +35,7 @@ def __init__(self, index_path: str, parser: XmlParser, cache: Cache):
3435
node = Node(
3536
os.path.join(index_path, f"{refid}.xml"),
3637
None,
37-
self.cache,
38+
self.ctx,
3839
self.parser,
3940
self.root,
4041
)
@@ -44,7 +45,7 @@ def __init__(self, index_path: str, parser: XmlParser, cache: Cache):
4445
node = Node(
4546
os.path.join(index_path, f"{refid}.xml"),
4647
None,
47-
self.cache,
48+
self.ctx,
4849
self.parser,
4950
self.root,
5051
)
@@ -54,7 +55,7 @@ def __init__(self, index_path: str, parser: XmlParser, cache: Cache):
5455
node = Node(
5556
os.path.join(index_path, f"{refid}.xml"),
5657
None,
57-
self.cache,
58+
self.ctx,
5859
self.parser,
5960
self.root,
6061
)
@@ -64,7 +65,7 @@ def __init__(self, index_path: str, parser: XmlParser, cache: Cache):
6465
node = Node(
6566
os.path.join(index_path, f"{refid}.xml"),
6667
None,
67-
self.cache,
68+
self.ctx,
6869
self.parser,
6970
self.root,
7071
)
@@ -74,7 +75,7 @@ def __init__(self, index_path: str, parser: XmlParser, cache: Cache):
7475
node = Node(
7576
os.path.join(index_path, f"{refid}.xml"),
7677
None,
77-
self.cache,
78+
self.ctx,
7879
self.parser,
7980
self.root,
8081
)

mkdoxy/generatorSnippets.py

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ def incorrect_argument(self, project: str, argument: str, config: dict, snippet:
152152
project,
153153
config,
154154
f"Incorrect argument: {argument}" if argument else f"Add argument to snippet: {project}",
155-
f"Argument have to be based on this diagram → **:::doxy.{project}.<argument\>**",
155+
f"Argument have to be based on this diagram → **:::doxy.{project}.<argument\\>**",
156156
"A list of available arguments:",
157157
"\n".join(self.doxy_arguments.keys()),
158158
"yaml",
@@ -162,14 +162,12 @@ def incorrect_argument(self, project: str, argument: str, config: dict, snippet:
162162
def replace_markdown(self, start: int, end: int, replacement: str):
163163
self.markdown = self.markdown[:start] + replacement + "\n" + self.markdown[end:]
164164

165-
def _recurs_setLinkPrefixNode(self, node: Node, linkPrefix: str):
166-
node.setLinkPrefix(linkPrefix)
167-
if node.kind.is_parent():
168-
self._recurs_setLinkPrefixNodes(node.children, linkPrefix)
165+
def _setLinkPrefixNode(self, node: Node, linkPrefix: str):
166+
node.project.linkPrefix = linkPrefix
169167

170-
def _recurs_setLinkPrefixNodes(self, nodes: [Node], linkPrefix: str):
171-
for node in nodes:
172-
self._recurs_setLinkPrefixNode(node, linkPrefix)
168+
def _setLinkPrefixNodes(self, nodes: list[Node], linkPrefix: str):
169+
if nodes:
170+
nodes[0].project.linkPrefix = linkPrefix
173171

174172
def is_project_exist(self, project: str):
175173
return project in self.projects
@@ -249,7 +247,7 @@ def doxyCode(self, snippet, project: str, config):
249247
f"{snippet}",
250248
"yaml",
251249
)
252-
self._recurs_setLinkPrefixNode(node, self.pageUrlPrefix + project + "/")
250+
self._setLinkPrefixNode(node, self.pageUrlPrefix + project + "/")
253251
return self.generatorBase[project].code(node, config, progCode)
254252
return self.doxyError(
255253
project,
@@ -281,7 +279,7 @@ def doxyFunction(self, snippet, project: str, config: dict):
281279
return self.doxyNodeIsNone(project, config, snippet)
282280

283281
if isinstance(node, Node):
284-
self._recurs_setLinkPrefixNode(node, self.pageUrlPrefix + project + "/")
282+
self._setLinkPrefixNode(node, self.pageUrlPrefix + project + "/")
285283
return self.generatorBase[project].function(node, config)
286284
return self.doxyError(
287285
project,
@@ -304,7 +302,7 @@ def doxyClass(self, snippet, project: str, config: dict):
304302
return self.doxyNodeIsNone(project, config, snippet)
305303

306304
if isinstance(node, Node):
307-
self._recurs_setLinkPrefixNode(node, self.pageUrlPrefix + project + "/")
305+
self._setLinkPrefixNode(node, self.pageUrlPrefix + project + "/")
308306
return self.generatorBase[project].member(node, config)
309307
return self.doxyError(
310308
project,
@@ -327,7 +325,7 @@ def doxyClassMethod(self, snippet, project: str, config):
327325
return self.doxyNodeIsNone(project, config, snippet)
328326

329327
if isinstance(node, Node):
330-
self._recurs_setLinkPrefixNode(node, self.pageUrlPrefix + project + "/")
328+
self._setLinkPrefixNode(node, self.pageUrlPrefix + project + "/")
331329
return self.generatorBase[project].function(node, config)
332330
return self.doxyError(
333331
project,
@@ -345,39 +343,39 @@ def doxyClassList(self, snippet, project: str, config):
345343
if errorMsg:
346344
return errorMsg
347345
nodes = self.doxygen[project].root.children
348-
self._recurs_setLinkPrefixNodes(nodes, self.pageUrlPrefix + project + "/")
346+
self._setLinkPrefixNodes(nodes, self.pageUrlPrefix + project + "/")
349347
return self.generatorBase[project].annotated(nodes, config)
350348

351349
def doxyClassIndex(self, snippet, project: str, config):
352350
errorMsg = self.checkConfig(snippet, project, config, [])
353351
if errorMsg:
354352
return errorMsg
355353
nodes = self.doxygen[project].root.children
356-
self._recurs_setLinkPrefixNodes(nodes, self.pageUrlPrefix + project + "/")
354+
self._setLinkPrefixNodes(nodes, self.pageUrlPrefix + project + "/")
357355
return self.generatorBase[project].classes(nodes, config)
358356

359357
def doxyClassHierarchy(self, snippet, project: str, config):
360358
errorMsg = self.checkConfig(snippet, project, config, [])
361359
if errorMsg:
362360
return errorMsg
363361
nodes = self.doxygen[project].root.children
364-
self._recurs_setLinkPrefixNodes(nodes, self.pageUrlPrefix + project + "/")
362+
self._setLinkPrefixNodes(nodes, self.pageUrlPrefix + project + "/")
365363
return self.generatorBase[project].hierarchy(nodes, config)
366364

367365
def doxyNamespaceList(self, snippet, project: str, config):
368366
errorMsg = self.checkConfig(snippet, project, config, [])
369367
if errorMsg:
370368
return errorMsg
371369
nodes = self.doxygen[project].root.children
372-
self._recurs_setLinkPrefixNodes(nodes, self.pageUrlPrefix + project + "/")
370+
self._setLinkPrefixNodes(nodes, self.pageUrlPrefix + project + "/")
373371
return self.generatorBase[project].namespaces(nodes, config)
374372

375373
def doxyFileList(self, snippet, project: str, config):
376374
errorMsg = self.checkConfig(snippet, project, config, [])
377375
if errorMsg:
378376
return errorMsg
379377
nodes = self.doxygen[project].files.children
380-
self._recurs_setLinkPrefixNodes(nodes, self.pageUrlPrefix + project + "/")
378+
self._setLinkPrefixNodes(nodes, self.pageUrlPrefix + project + "/")
381379
return self.generatorBase[project].fileindex(nodes, config)
382380

383381
def doxyNodeIsNone(self, project: str, config: dict, snippet: str) -> str:

mkdoxy/node.py

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from mkdoxy.cache import Cache
77
from mkdoxy.constants import OVERLOAD_OPERATORS, Kind, Visibility
88
from mkdoxy.markdown import escape
9+
from mkdoxy.project import ProjectContext
910
from mkdoxy.property import Property
1011
from mkdoxy.utils import split_safe
1112
from mkdoxy.xml_parser import XmlParser
@@ -18,18 +19,18 @@ def __init__(
1819
self,
1920
xml_file: str,
2021
xml: Element,
21-
cache: Cache,
22+
project: ProjectContext,
2223
parser: XmlParser,
2324
parent: "Node",
2425
refid: str = None,
2526
debug: bool = False,
2627
):
2728
self._children: ["Node"] = []
28-
self._cache: Cache = cache
29+
self._cache = project.cache
2930
self._parser: XmlParser = parser
3031
self._parent = parent
3132
self.debug = debug
32-
self.linkPrefix = ""
33+
self.project = project
3334

3435
if xml_file == "root":
3536
self._refid = "root"
@@ -91,9 +92,6 @@ def __init__(
9192
def __repr__(self):
9293
return f"Node: {self.name} refid: {self._refid}"
9394

94-
def setLinkPrefix(self, linkPrefix: str):
95-
self.linkPrefix = linkPrefix
96-
9795
def add_child(self, child: "Node"):
9896
self._children.append(child)
9997

@@ -113,7 +111,7 @@ def _check_for_children(self):
113111
child = Node(
114112
os.path.join(self._dirname, f"{refid}.xml"),
115113
None,
116-
self._cache,
114+
self.project,
117115
self._parser,
118116
self,
119117
)
@@ -138,15 +136,15 @@ def _check_for_children(self):
138136
child = Node(
139137
os.path.join(self._dirname, f"{refid}.xml"),
140138
None,
141-
self._cache,
139+
self.project,
142140
self._parser,
143141
self,
144142
)
145143
except FileNotFoundError:
146144
child = Node(
147145
os.path.join(self._dirname, f"{refid}.xml"),
148146
Element("compounddef"),
149-
self._cache,
147+
self.project,
150148
self._parser,
151149
self,
152150
refid=refid,
@@ -168,7 +166,7 @@ def _check_for_children(self):
168166
child = Node(
169167
os.path.join(self._dirname, f"{refid}.xml"),
170168
None,
171-
self._cache,
169+
self.project,
172170
self._parser,
173171
self,
174172
)
@@ -188,7 +186,7 @@ def _check_for_children(self):
188186
child = Node(
189187
os.path.join(self._dirname, f"{refid}.xml"),
190188
None,
191-
self._cache,
189+
self.project,
192190
self._parser,
193191
self,
194192
)
@@ -209,7 +207,7 @@ def _check_for_children(self):
209207
child = Node(
210208
os.path.join(self._dirname, f"{refid}.xml"),
211209
None,
212-
self._cache,
210+
self.project,
213211
self._parser,
214212
self,
215213
)
@@ -228,7 +226,7 @@ def _check_for_children(self):
228226
continue
229227
except Exception:
230228
pass
231-
child = Node(None, memberdef, self._cache, self._parser, self)
229+
child = Node(None, memberdef, self.project, self._parser, self)
232230
self.add_child(child)
233231

234232
# for detaileddescription in self._xml.findall('detaileddescription'):
@@ -477,14 +475,14 @@ def anchor(self) -> str:
477475
@property
478476
def url(self) -> str:
479477
if self.is_parent or self.is_group or self.is_file or self.is_dir or self.is_page:
480-
return self.linkPrefix + self._refid + ".md"
478+
return self.project.linkPrefix + self._refid + ".md"
481479
else:
482480
return f"{self._parent.url}#{self.anchor}"
483481

484482
@property
485483
def base_url(self) -> str:
486484
def prefix(page: str):
487-
return self.linkPrefix + page
485+
return self.project.linkPrefix + page
488486

489487
if self.is_group:
490488
return prefix("modules.md")
@@ -509,13 +507,13 @@ def base_name(self) -> str:
509507
@property
510508
def url_source(self) -> str:
511509
if self.is_parent or self.is_group or self.is_file or self.is_dir:
512-
return self.linkPrefix + self._refid + "_source.md"
510+
return self.project.linkPrefix + self._refid + "_source.md"
513511
else:
514-
return self.linkPrefix + self._refid + ".md"
512+
return self.project.linkPrefix + self._refid + ".md"
515513

516514
@property
517515
def filename(self) -> str:
518-
return self.linkPrefix + self._refid + ".md"
516+
return self.project.linkPrefix + self._refid + ".md"
519517

520518
@property
521519
def root(self) -> "Node":

mkdoxy/project.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from mkdoxy.cache import Cache
2+
3+
4+
class ProjectContext:
5+
def __init__(self, cache: Cache) -> None:
6+
self.cache = cache
7+
self.linkPrefix: str = ""

0 commit comments

Comments
 (0)