@@ -105,6 +105,10 @@ class Builder:
105
105
Name of API directory.
106
106
title:
107
107
Title of the API index page.
108
+ renderer: Renderer
109
+ The renderer used to convert docstrings (e.g. to markdown).
110
+ out_index:
111
+ The output path of the index file, used to list all API functions.
108
112
"""
109
113
110
114
# builder dispatching ----
@@ -114,6 +118,7 @@ class Builder:
114
118
# misc config
115
119
out_inventory : str = "objects.json"
116
120
out_index : str = "index.qmd"
121
+ out_page_suffix = ".qmd"
117
122
118
123
# quarto yaml config -----
119
124
# TODO: add model for section with the fields:
@@ -143,6 +148,7 @@ def __init__(
143
148
title : str = "Function reference" ,
144
149
renderer : "dict | Renderer | str" = "markdown" ,
145
150
out_index : str = None ,
151
+ use_interlinks : bool = False ,
146
152
):
147
153
self .validate (sections )
148
154
@@ -163,6 +169,8 @@ def __init__(
163
169
if out_index is not None :
164
170
self .out_index = out_index
165
171
172
+ self .use_interlinks = use_interlinks
173
+
166
174
def build (self ):
167
175
"""Build index page, sphinx inventory, and individual doc pages."""
168
176
@@ -222,6 +230,14 @@ def render_index(self):
222
230
223
231
raise NotImplementedError ()
224
232
233
+ def render_item_link (self , obj ):
234
+ if self .use_interlinks :
235
+ return f"[](`{ obj .path } `)"
236
+
237
+ link = "/" + self .fetch_object_uri (obj , suffix = self .out_page_suffix )
238
+ name = self .fetch_object_dispname (obj )
239
+ return f"[{ name } ]({ link } )"
240
+
225
241
def write_doc_pages (self ):
226
242
"""Write individual function documentation pages."""
227
243
@@ -231,7 +247,7 @@ def write_doc_pages(self):
231
247
html_path = Path (self .fetch_object_uri (item ))
232
248
html_path .parent .mkdir (exist_ok = True , parents = True )
233
249
234
- html_path .with_suffix (".qmd" ).write_text (rendered )
250
+ html_path .with_suffix (self . out_page_suffix ).write_text (rendered )
235
251
236
252
# constructors ----
237
253
@@ -289,7 +305,7 @@ def _render_object(self, obj):
289
305
docstring_parts = doc .parsed
290
306
291
307
# TODO: look up from inventory?
292
- link = f"[](` { obj . path } `)"
308
+ link = self . render_item_link ( obj )
293
309
if len (docstring_parts ):
294
310
# TODO: or canonical_path
295
311
description = docstring_parts [0 ].value
@@ -298,8 +314,8 @@ def _render_object(self, obj):
298
314
else :
299
315
return f"| { link } | |"
300
316
301
- def fetch_object_uri (self , obj ):
302
- return f"{ self .dir } /{ obj .name } .html "
317
+ def fetch_object_uri (self , obj , suffix = ".html" ):
318
+ return f"{ self .dir } /{ obj .name } { suffix } "
303
319
304
320
def fetch_object_dispname (self , obj ):
305
321
return obj .name
@@ -311,10 +327,10 @@ class BuilderSinglePage(Builder):
311
327
style = "single-page"
312
328
313
329
def render_index (self ):
314
- return "\n \n " .join ([self .renderer .to_md (item ) for item in self .items ])
330
+ return "\n \n " .join ([self .renderer .to_md (item ) for item in self .items . values () ])
315
331
316
332
def fetch_object_uri (self , obj ):
317
- index_name = Path (self .out_index ).with_suffix ("html" )
333
+ index_name = Path (self .out_index ).with_suffix (". html" )
318
334
return f"{ self .dir } /{ index_name } #{ obj .path } "
319
335
320
336
def write_doc_pages (self ):
0 commit comments