Skip to content

Commit ae20023

Browse files
Merge pull request #105 from Nerixyz/fix/inherited-links
2 parents 78f261d + bced434 commit ae20023

File tree

5 files changed

+51
-48
lines changed

5 files changed

+51
-48
lines changed

mkdoxy/doxygen.py

+12-11
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

+15-17
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

+16-19
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
from xml.etree import ElementTree
44
from xml.etree.ElementTree import Element as Element
55

6-
from mkdoxy.cache import Cache
76
from mkdoxy.constants import OVERLOAD_OPERATORS, Kind, Visibility
87
from mkdoxy.markdown import escape
8+
from mkdoxy.project import ProjectContext
99
from mkdoxy.property import Property
1010
from mkdoxy.utils import split_safe
1111
from mkdoxy.xml_parser import XmlParser
@@ -18,18 +18,18 @@ def __init__(
1818
self,
1919
xml_file: str,
2020
xml: Element,
21-
cache: Cache,
21+
project: ProjectContext,
2222
parser: XmlParser,
2323
parent: "Node",
2424
refid: str = None,
2525
debug: bool = False,
2626
):
2727
self._children: ["Node"] = []
28-
self._cache: Cache = cache
28+
self._cache = project.cache
2929
self._parser: XmlParser = parser
3030
self._parent = parent
3131
self.debug = debug
32-
self.linkPrefix = ""
32+
self.project = project
3333

3434
if xml_file == "root":
3535
self._refid = "root"
@@ -91,9 +91,6 @@ def __init__(
9191
def __repr__(self):
9292
return f"Node: {self.name} refid: {self._refid}"
9393

94-
def setLinkPrefix(self, linkPrefix: str):
95-
self.linkPrefix = linkPrefix
96-
9794
def add_child(self, child: "Node"):
9895
self._children.append(child)
9996

@@ -113,7 +110,7 @@ def _check_for_children(self):
113110
child = Node(
114111
os.path.join(self._dirname, f"{refid}.xml"),
115112
None,
116-
self._cache,
113+
self.project,
117114
self._parser,
118115
self,
119116
)
@@ -138,15 +135,15 @@ def _check_for_children(self):
138135
child = Node(
139136
os.path.join(self._dirname, f"{refid}.xml"),
140137
None,
141-
self._cache,
138+
self.project,
142139
self._parser,
143140
self,
144141
)
145142
except FileNotFoundError:
146143
child = Node(
147144
os.path.join(self._dirname, f"{refid}.xml"),
148145
Element("compounddef"),
149-
self._cache,
146+
self.project,
150147
self._parser,
151148
self,
152149
refid=refid,
@@ -168,7 +165,7 @@ def _check_for_children(self):
168165
child = Node(
169166
os.path.join(self._dirname, f"{refid}.xml"),
170167
None,
171-
self._cache,
168+
self.project,
172169
self._parser,
173170
self,
174171
)
@@ -188,7 +185,7 @@ def _check_for_children(self):
188185
child = Node(
189186
os.path.join(self._dirname, f"{refid}.xml"),
190187
None,
191-
self._cache,
188+
self.project,
192189
self._parser,
193190
self,
194191
)
@@ -209,7 +206,7 @@ def _check_for_children(self):
209206
child = Node(
210207
os.path.join(self._dirname, f"{refid}.xml"),
211208
None,
212-
self._cache,
209+
self.project,
213210
self._parser,
214211
self,
215212
)
@@ -228,7 +225,7 @@ def _check_for_children(self):
228225
continue
229226
except Exception:
230227
pass
231-
child = Node(None, memberdef, self._cache, self._parser, self)
228+
child = Node(None, memberdef, self.project, self._parser, self)
232229
self.add_child(child)
233230

234231
# for detaileddescription in self._xml.findall('detaileddescription'):
@@ -477,14 +474,14 @@ def anchor(self) -> str:
477474
@property
478475
def url(self) -> str:
479476
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"
477+
return self.project.linkPrefix + self._refid + ".md"
481478
else:
482479
return f"{self._parent.url}#{self.anchor}"
483480

484481
@property
485482
def base_url(self) -> str:
486483
def prefix(page: str):
487-
return self.linkPrefix + page
484+
return self.project.linkPrefix + page
488485

489486
if self.is_group:
490487
return prefix("modules.md")
@@ -509,13 +506,13 @@ def base_name(self) -> str:
509506
@property
510507
def url_source(self) -> str:
511508
if self.is_parent or self.is_group or self.is_file or self.is_dir:
512-
return self.linkPrefix + self._refid + "_source.md"
509+
return self.project.linkPrefix + self._refid + "_source.md"
513510
else:
514-
return self.linkPrefix + self._refid + ".md"
511+
return self.project.linkPrefix + self._refid + ".md"
515512

516513
@property
517514
def filename(self) -> str:
518-
return self.linkPrefix + self._refid + ".md"
515+
return self.project.linkPrefix + self._refid + ".md"
519516

520517
@property
521518
def root(self) -> "Node":

mkdoxy/project.py

+7
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 = ""

mkdoxy/templates/memTab.jinja2

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ See [{{node.name_long}}]({{node.url}})
2424
{%- elif member.is_class or member.is_interface or member.is_struct -%}
2525
| {{member.kind.value}} | [**{{member.name_long if node.is_group else member.name_short}}**]({{member.url}}) {{member.suffix}}<br>{{member.brief}} |
2626
{%- elif member.is_enum or member.is_function or member.is_variable or member.is_union or member.is_typedef -%}
27-
| {{member.prefix}} {{member.type}} | [**{{member.name_long if node.is_group else member.name_short}}**](#{{member.anchor}}) {{member.params}} {{member.suffix}}<br>{{member.brief}} |
27+
| {{member.prefix}} {{member.type}} | [**{{member.name_long if node.is_group else member.name_short}}**]({%- if parent %}{{member.url}}{%- else -%}#{{member.anchor}}{%- endif -%}) {{member.params}} {{member.suffix}}<br>{{member.brief}} |
2828
{%- else -%}
2929
| {{member.prefix}} {{member.type}} | [**{{member.name_long if node.is_group else member.name_short}}**]({{member.url}}) {{member.params}} {{member.suffix}}<br>{{member.brief}} |
3030
{%- endif %}

0 commit comments

Comments
 (0)