code wiki / wiki / nx_wiki_doc_render.nx

nx_wiki_doc_render.nx

buildroot/runtime/wiki/nx_wiki_doc_render.nx

52572 B903 linesdepth 9pulls 21 transitivereach 23 importersview sourcekind librarytopic wiki
docsdependenciesstructsconstsfunctions

about

nx_wiki_doc_render.nx -- markdown source -> HTTP-ready HTML body. Composes existing substrate primitives (per the duplicate-primitives audit inp NISHI_PRODUCT_OPS_PLATFORM §4): markdown_block CommonMark subset block-level parser markdown_inline CommonMark subset inline parser html_escape HTML-unsafe-byte escape Adds wiki-specific structural rendering on top: - NISHIDOC_STANDARD section sidebar TOC (sealed: §1 - §17) - [N] / [I] / [R] paragraph-tag CSS class injection - [[wikilink-target]] cross-reference resolution - Page chrome (header, footer, sidebar) Status: V1 SEED. 2026-05-27. WINNER-TIER: BASELINE-C provisional (no incumbent matches the NISHIDOC-aware rendering + sealed cross-reference resolution; provisional pending paired render-speed bench vs pandoc + commonmark.js) INCUMBENTS: pandoc (Haskell), commonmark.js, markdown-it, GitHub's gh-markdown, MediaWiki Parsoid NUMBERS: V1 ships the render path; throughput vs pandoc on 100 docs / 1MB total pending paired bench GAP: pandoc covers more markdown features (footnotes, definition lists, raw HTML passthrough); V1 covers the subset NISHIDOC_STANDARD uses + adds the NISHIDOC-specific structural rendering pandoc doesn't ship PLAN: M-next paired render-speed bench vs pandoc; extend block syntax to footnotes when an actual doc needs them EXEMPTION REASON: n/a; provisional pending measurement Hygiene-standard compliance per NISHI_CODE_HYGIENE_STANDARD.md: M1 no NULL creation: callers receive verdict + buffer-offset via out-param; no *T returns M2 overflow safety: all length arithmetic checked against caller cap M3 bounded loops: every while has an explicit max-iter cap M4 alloc safety: sys_mmap calls use sized named constants M5 index safety: every src[i] access bounded by len check

dependencies 7 imports · 9 importers

nx_syscalls.nx markdown_block.nx markdown_inline.nx html_escape.nx nx_nishi_page_emit.nx nx_wiki_cite_render.nx nx_wiki_toc.nx nx_wiki_doc_render.nx _wiki_discovery_gate.nx nx_wiki_article.nx nx_wiki_dashboard.nx nx_wiki_doc_handler.nx nx_wiki_projects.nx nx_wiki_queue.nx nx_wiki_routes.nx nx_wiki_search_render.nx nx_wiki_status.nx

imports: nx_syscalls.nxmarkdown_block.nxmarkdown_inline.nxhtml_escape.nxnx_nishi_page_emit.nxnx_wiki_cite_render.nxnx_wiki_toc.nx

imported by: _wiki_discovery_gate.nxnx_wiki_article.nxnx_wiki_dashboard.nxnx_wiki_doc_handler.nxnx_wiki_projects.nxnx_wiki_queue.nxnx_wiki_routes.nxnx_wiki_search_render.nxnx_wiki_status.nx

structs

103struct NxWikiDocCtx

consts

65const NX_WIKI_DOC_OK: i64 = 0
66const NX_WIKI_DOC_BAD_INPUT: i64 = 1
67const NX_WIKI_DOC_OUTPUT_OVERFLOW: i64 = 2
68const NX_WIKI_DOC_PARSE_FAILED: i64 = 3
69const NX_WIKI_DOC_BROKEN_WIKILINK: i64 = 4
70const NX_WIKI_DOC_LOOP_BUDGET_EXCEEDED: i64 = 5
71const NX_WIKI_DOC_RENDER_NOT_IMPLEMENTED: i64 = 6
74const NX_WIKI_DOC_MAX_SECTIONS: i64 = 32 // NISHIDOC §1-§17 + headroom
75const NX_WIKI_DOC_MAX_TITLE_LEN: i64 = 256
76const NX_WIKI_DOC_MAX_WIKILINKS: i64 = 256
77const NX_WIKI_DOC_MAX_WIKILINK_LEN: i64 = 128
78const NX_WIKI_DOC_MAX_PARSE_ITER: i64 = 100000 // hard cap per render call
79const NX_WIKI_DOC_HTML_SCRATCH_BYTES: i64 = 32 // for itoa + small temp writes
80const NX_WIKI_DOC_TITLE_SCRATCH_BYTES: i64 = 256
81const NX_WIKI_DOC_CITE_CAP: i64 = 1048576 // 1 MB cite-expanded body buffer (standalone render path)
82const NX_WIKI_DOC_MD_TMP_CAP: i64 = 1048576 // 1 MB markdown-HTML temp (R4 TOC/id-inject staging)
83const NX_WIKI_DOC_INJECT_CAP: i64 = 1310720 // 1.25 MB id-injected copy (headroom for id= attrs)
84const NX_WIKI_DOC_TOC_CAP: i64 = 131072 // 128 KB TOC nav
87const NX_ASCII_LT: i64 = 0x3C // '<'
88const NX_ASCII_GT: i64 = 0x3E // '>'
89const NX_ASCII_QUOT: i64 = 0x22 // '"'
90const NX_ASCII_LBRACKET: i64 = 0x5B // '['
91const NX_ASCII_RBRACKET: i64 = 0x5D // ']'
92const NX_ASCII_LF: i64 = 0x0A // '\n'
93const NX_ASCII_CR: i64 = 0x0D // '\r'
94const NX_ASCII_HASH: i64 = 0x23 // '#'
95const NX_ASCII_SP: i64 = 0x20 // ' '
96const NX_ASCII_SECTION: i64 = 0xA7 // '§' first UTF-8 byte (sentinel for §<NN>)
266const NX_WIKI_DOC_NAME_ENTRY_BYTES: i64 = 64
267const NX_WIKI_DOC_NAME_MAX_LEN: i64 = 63
272const NX_WIKI_DOC_NAME_SCAN_CAP: i64 = 1000

functions

149func nx_wiki_doc_ctx_init(ctx: *NxWikiDocCtx,
195func nx_wiki_doc_write_byte(ctx: *NxWikiDocCtx, b: i64) -> i64
203func nx_wiki_doc_write_bytes(ctx: *NxWikiDocCtx, src: *u8, n: i64) -> i64
called by 1: nx_wiki_doc_write_z
222func nx_wiki_doc_write_run(ctx: *NxWikiDocCtx, src: *u8, n: i64) -> i64
called by 1: nx_wiki_doc_render
237func nx_wiki_doc_write_z(ctx: *NxWikiDocCtx, s: *u8) -> i64
248func nx_wiki_doc_write_escaped(ctx: *NxWikiDocCtx, src: *u8, n: i64) -> i64
274func nx_wiki_doc_name_resolves(ctx: *NxWikiDocCtx, name: *u8, name_n: i64) -> i64
532func nx_wiki_doc_postpass_cite(ctx: *NxWikiDocCtx, prefix: *u8,
634func nx_wiki_doc_ctx_set_meta(ctx: *NxWikiDocCtx,
680func nx_wiki_doc_emit_css(ctx: *NxWikiDocCtx) -> i64
700func nx_wiki_doc_meta(ctx: *NxWikiDocCtx, name_z: *u8, name_n: i64,
709func nx_wiki_doc_write_header_v1(ctx: *NxWikiDocCtx,
779func nx_wiki_doc_write_header(ctx: *NxWikiDocCtx, doc_title: *u8, doc_title_n: i64) -> i64
814func nx_wiki_doc_render(ctx: *NxWikiDocCtx,