@@ -36,10 +36,7 @@ def get_page_path(self, page: MkDocsPage) -> str:
3636
3737 def page_if_exists (self , page : str ) -> str :
3838 page = self .get_path (self .site_path , page )
39- for k ,_ in self .nodes .items ():
40- if k == page :
41- return page
42- return None
39+ return page if page in self .nodes else None
4340
4441 def collect_pages (self , nav : MkDocsNav , config : MkDocsConfig ):
4542 for page in nav .pages :
@@ -74,13 +71,7 @@ def parse_markdown(self, markdown: str, page: MkDocsPage):
7471 wikilink = self .page_if_exists (wikilink ) or self .page_if_exists (self .get_path (page_path , wikilink )) or wikilink
7572
7673 # find something that matches: shortest path depth
77- abslen = None
78- for k ,_ in self .nodes .items ():
79- for _ in re .finditer (re .compile (r"(.*" + wikilink + r")" ), k ):
80- curlen = k .count ('/' )
81- if abslen == None or curlen < abslen :
82- target_page_path = k
83- abslen = curlen
74+ target_page_path = find_best_target (self .nodes , wikilink )
8475
8576 if target_page_path == "" :
8677 self .logger .warning (page .file .src_uri + ": no target page found for wikilink: " + wikilink )
@@ -97,12 +88,12 @@ def parse_markdown(self, markdown: str, page: MkDocsPage):
9788 self .nodes [target_page_path ]["symbolSize" ] = self .nodes [target_page_path ].get ("symbolSize" , 1 ) + 1
9889
9990 def create_graph_json (self , config : MkDocsConfig ):
100- for i , (k ,v ) in enumerate (self .nodes .items ()):
91+ for i , (k , v ) in enumerate (self .nodes .items ()):
10192 node = {
102- "id" : str (i ),
103- "name" : v ["title" ],
104- "symbolSize" : v ["symbolSize" ],
105- "value" : v ["url" ]
93+ "id" : str (i ),
94+ "name" : v ["title" ],
95+ "symbolSize" : v ["symbolSize" ],
96+ "value" : v ["url" ]
10697 }
10798 self .data ["nodes" ].append (node )
10899
@@ -122,3 +113,15 @@ def on_page_markdown(self, markdown: str, page: MkDocsPage, config: MkDocsConfig
122113
123114 def on_env (self , env , config : MkDocsConfig , files : MkDocsFiles ):
124115 self .create_graph_json (config )
116+
117+
118+ def find_best_target (nodes , wikilink : str ) -> str :
119+ abslen = None
120+ target_page_path = ""
121+ for k in nodes .keys ():
122+ for _ in re .finditer (re .compile (r"(.*" + wikilink + r"[^/]*$)" ), k ):
123+ curlen = k .count ('/' )
124+ if abslen is None or curlen < abslen :
125+ target_page_path = k
126+ abslen = curlen
127+ return target_page_path
0 commit comments