apex-ruby 1.0.18 → 1.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -3
  3. data/ext/apex_ext/apex_ext.c +260 -91
  4. data/ext/apex_ext/apex_src/CHANGELOG.md +440 -0
  5. data/ext/apex_ext/apex_src/CMakeLists.txt +15 -1
  6. data/ext/apex_ext/apex_src/Formula/apex.rb +7 -2
  7. data/ext/apex_ext/apex_src/Package.swift +15 -4
  8. data/ext/apex_ext/apex_src/README.md +94 -35
  9. data/ext/apex_ext/apex_src/VERSION +1 -1
  10. data/ext/apex_ext/apex_src/apex-debug.log +4 -0
  11. data/ext/apex_ext/apex_src/apex.code-workspace +38 -0
  12. data/ext/apex_ext/apex_src/apex.taskpaper +12 -0
  13. data/ext/apex_ext/apex_src/apex_deflist_debug.log +25 -0
  14. data/ext/apex_ext/apex_src/buildnotes.md +1435 -0
  15. data/ext/apex_ext/apex_src/cli/main.c +262 -33
  16. data/ext/apex_ext/apex_src/debug.log +7 -0
  17. data/ext/apex_ext/apex_src/docs/CITATIONS_EXAMPLES.md +274 -0
  18. data/ext/apex_ext/apex_src/docs/CITATIONS_IMPLEMENTATION_PLAN.md +749 -0
  19. data/ext/apex_ext/apex_src/docs/CITATIONS_PLAN.md +744 -0
  20. data/ext/apex_ext/apex_src/docs/INDEX_IMPLEMENTATION_ANALYSIS.md +382 -0
  21. data/ext/apex_ext/apex_src/docs/plans/2025-02-27-man-page-output-implementation.md +351 -0
  22. data/ext/apex_ext/apex_src/docs/superpowers/plans/2026-07-12-toc-output-format.md +745 -0
  23. data/ext/apex_ext/apex_src/docs/superpowers/plans/2026-07-18-bear-image-attributes.md +829 -0
  24. data/ext/apex_ext/apex_src/docs/superpowers/plans/2026-07-19-apex-node-npm.md +1148 -0
  25. data/ext/apex_ext/apex_src/docs/superpowers/specs/2026-07-12-toc-output-format-design.md +161 -0
  26. data/ext/apex_ext/apex_src/docs/superpowers/specs/2026-07-18-bear-image-attributes-design.md +184 -0
  27. data/ext/apex_ext/apex_src/docs/superpowers/specs/2026-07-19-apex-node-npm-design.md +211 -0
  28. data/ext/apex_ext/apex_src/documentation/app-settings-table.md +67 -0
  29. data/ext/apex_ext/apex_src/documentation/app-transformed/Citations.md +340 -0
  30. data/ext/apex_ext/apex_src/documentation/app-transformed/Credits.md +11 -0
  31. data/ext/apex_ext/apex_src/documentation/app-transformed/Header-IDs.md +234 -0
  32. data/ext/apex_ext/apex_src/documentation/app-transformed/Inline-Attribute-Lists.md +516 -0
  33. data/ext/apex_ext/apex_src/documentation/app-transformed/Metadata-Transforms.md +461 -0
  34. data/ext/apex_ext/apex_src/documentation/app-transformed/Modes.md +193 -0
  35. data/ext/apex_ext/apex_src/documentation/app-transformed/Multi-File-Documents.md +201 -0
  36. data/ext/apex_ext/apex_src/documentation/app-transformed/Plugins.md +678 -0
  37. data/ext/apex_ext/apex_src/documentation/app-transformed/Syntax.md +1367 -0
  38. data/ext/apex_ext/apex_src/documentation/docsets/Apex Command Line Options.cheatsheet.txt +6 -0
  39. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/C-API.html +774 -300
  40. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Callouts.html +1194 -0
  41. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Citations.html +416 -216
  42. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Command-Line-Options.html +3544 -1094
  43. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Configuration.html +371 -97
  44. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Credits.html +153 -23
  45. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Examples.html +358 -124
  46. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Filters.html +1656 -0
  47. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Generating-Man-Pages.html +1226 -0
  48. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Getting-Started.html +201 -56
  49. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Header-IDs.html +279 -109
  50. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Home.html +200 -53
  51. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Indices.html +2327 -0
  52. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Inline-Attribute-Lists.html +690 -271
  53. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Installation.html +201 -55
  54. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Limitations-and-Roadmap.html +238 -68
  55. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Metadata-Transforms.html +421 -221
  56. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Modes.html +340 -78
  57. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Multi-File-Documents.html +251 -86
  58. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Multi-Format-Images.html +1362 -0
  59. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Pandoc-Integration.html +277 -90
  60. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Plugins.html +673 -346
  61. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Quarto-Mode.html +1405 -0
  62. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Rendering-Markdown-In-Terminal.html +1902 -0
  63. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Syntax.html +1939 -1698
  64. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Tables.html +1781 -0
  65. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Troubleshooting.html +315 -140
  66. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Usage.html +307 -113
  67. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Using-Apex-with-Jekyll.html +1132 -0
  68. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Writing-Tests.html +1754 -0
  69. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Xcode-Integration.html +872 -376
  70. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/docSet.dsidx +0 -0
  71. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/optimizedIndex.dsidx +0 -0
  72. data/ext/apex_ext/apex_src/documentation/html/apex-app-docs.html +8746 -0
  73. data/ext/apex_ext/apex_src/documentation/shared_styles.css +20 -15
  74. data/ext/apex_ext/apex_src/documentation/transform_for_app.md +55 -0
  75. data/ext/apex_ext/apex_src/escaping-repro.md +103 -0
  76. data/ext/apex_ext/apex_src/examples/quick-actions/Markdown to RTF.workflow/Contents/Info.plist +8 -0
  77. data/ext/apex_ext/apex_src/examples/quick-actions/Markdown to RTF.workflow/Contents/QuickLook/Preview.png +0 -0
  78. data/ext/apex_ext/apex_src/examples/quick-actions/Markdown to RTF.workflow/Contents/document.wflow +547 -0
  79. data/ext/apex_ext/apex_src/examples/quick-actions/Markdown-to-RTF.workflow.zip +0 -0
  80. data/ext/apex_ext/apex_src/examples/quick-actions/README.md +33 -0
  81. data/ext/apex_ext/apex_src/include/apex/apex.h +92 -6
  82. data/ext/apex_ext/apex_src/include/apex/ast_rtf.h +23 -0
  83. data/ext/apex_ext/apex_src/include/apex/ast_terminal.h +6 -0
  84. data/ext/apex_ext/apex_src/include/apex/module.modulemap +5 -0
  85. data/ext/apex_ext/apex_src/include/apex/plugins.h +105 -0
  86. data/ext/apex_ext/apex_src/include/apexc.h +1 -0
  87. data/ext/apex_ext/apex_src/man/apex.1 +82 -78
  88. data/ext/apex_ext/apex_src/man/apex.1.md +81 -4
  89. data/ext/apex_ext/apex_src/objc/Apex.swift +73 -0
  90. data/ext/apex_ext/apex_src/objc/ApexPlugins.swift +79 -0
  91. data/ext/apex_ext/apex_src/objc/NSString+Apex.h +83 -5
  92. data/ext/apex_ext/apex_src/objc/NSString+Apex.m +244 -1
  93. data/ext/apex_ext/apex_src/objc/NSString+ApexPlugins.h +76 -0
  94. data/ext/apex_ext/apex_src/objc/NSString+ApexPlugins.m +169 -0
  95. data/ext/apex_ext/apex_src/output.html +87 -0
  96. data/ext/apex_ext/apex_src/plans/quarto-mode.md +442 -0
  97. data/ext/apex_ext/apex_src/src/_README.md +85 -32
  98. data/ext/apex_ext/apex_src/src/apex.c +770 -200
  99. data/ext/apex_ext/apex_src/src/ast_rtf.c +848 -0
  100. data/ext/apex_ext/apex_src/src/ast_terminal.c +184 -7
  101. data/ext/apex_ext/apex_src/src/extensions/abbreviations.c +10 -3
  102. data/ext/apex_ext/apex_src/src/extensions/advanced_tables.c +7 -11
  103. data/ext/apex_ext/apex_src/src/extensions/bear_image_attrs.c +467 -0
  104. data/ext/apex_ext/apex_src/src/extensions/bear_image_attrs.h +27 -0
  105. data/ext/apex_ext/apex_src/src/extensions/callouts.c +400 -4
  106. data/ext/apex_ext/apex_src/src/extensions/callouts.h +15 -5
  107. data/ext/apex_ext/apex_src/src/extensions/citations.c +26 -5
  108. data/ext/apex_ext/apex_src/src/extensions/code_fence_attrs.c +632 -0
  109. data/ext/apex_ext/apex_src/src/extensions/code_fence_attrs.h +22 -0
  110. data/ext/apex_ext/apex_src/src/extensions/concordance.c +632 -0
  111. data/ext/apex_ext/apex_src/src/extensions/definition_list.c +129 -15
  112. data/ext/apex_ext/apex_src/src/extensions/grid_tables.c +1050 -121
  113. data/ext/apex_ext/apex_src/src/extensions/html_markdown.c +569 -16
  114. data/ext/apex_ext/apex_src/src/extensions/ial.c +502 -52
  115. data/ext/apex_ext/apex_src/src/extensions/ial.h +2 -1
  116. data/ext/apex_ext/apex_src/src/extensions/includes.c +532 -33
  117. data/ext/apex_ext/apex_src/src/extensions/includes.h +7 -1
  118. data/ext/apex_ext/apex_src/src/extensions/index.c +1427 -140
  119. data/ext/apex_ext/apex_src/src/extensions/index.h +28 -0
  120. data/ext/apex_ext/apex_src/src/extensions/metadata.c +200 -161
  121. data/ext/apex_ext/apex_src/src/extensions/quarto_diagrams.c +251 -0
  122. data/ext/apex_ext/apex_src/src/extensions/quarto_diagrams.h +22 -0
  123. data/ext/apex_ext/apex_src/src/extensions/quarto_lists.c +624 -0
  124. data/ext/apex_ext/apex_src/src/extensions/quarto_lists.h +35 -0
  125. data/ext/apex_ext/apex_src/src/extensions/quarto_polish.c +264 -0
  126. data/ext/apex_ext/apex_src/src/extensions/quarto_polish.h +23 -0
  127. data/ext/apex_ext/apex_src/src/extensions/quarto_shortcodes.c +307 -0
  128. data/ext/apex_ext/apex_src/src/extensions/quarto_shortcodes.h +21 -0
  129. data/ext/apex_ext/apex_src/src/extensions/raw_content.c +351 -0
  130. data/ext/apex_ext/apex_src/src/extensions/raw_content.h +20 -0
  131. data/ext/apex_ext/apex_src/src/extensions/relaxed_tables.c +117 -3
  132. data/ext/apex_ext/apex_src/src/extensions/special_markers.c +53 -0
  133. data/ext/apex_ext/apex_src/src/extensions/syntax_highlight.c +23 -1
  134. data/ext/apex_ext/apex_src/src/extensions/table_html_postprocess.c +83 -92
  135. data/ext/apex_ext/apex_src/src/extensions/toc.c +446 -25
  136. data/ext/apex_ext/apex_src/src/extensions/toc.h +26 -1
  137. data/ext/apex_ext/apex_src/src/extensions/wiki_links.c +28 -0
  138. data/ext/apex_ext/apex_src/src/html_renderer.c +387 -17
  139. data/ext/apex_ext/apex_src/src/plugin_catalog.c +517 -0
  140. data/ext/apex_ext/apex_src/src/plugins_remote.c +88 -14
  141. data/ext/apex_ext/apex_src/src/plugins_remote.h +34 -0
  142. data/ext/apex_ext/apex_src/src/pretty_html.c +6 -1
  143. data/ext/apex_ext/apex_src/tests/fixtures/comprehensive_test.md +21 -0
  144. data/ext/apex_ext/apex_src/tests/fixtures/images/bear_image_attributes.md +10 -0
  145. data/ext/apex_ext/apex_src/tests/fixtures/includes/sections.md +19 -0
  146. data/ext/apex_ext/apex_src/tests/fixtures/includes/sections.txt +11 -0
  147. data/ext/apex_ext/apex_src/tests/fixtures/minimal_pb.md +2 -0
  148. data/ext/apex_ext/apex_src/tests/fixtures/obsidian-callouts.md +46 -0
  149. data/ext/apex_ext/apex_src/tests/fixtures/pagebreak_html_repro.md +5 -0
  150. data/ext/apex_ext/apex_src/tests/fixtures/python-callouts.md +47 -0
  151. data/ext/apex_ext/apex_src/tests/fixtures/quarto/callouts.md +3 -0
  152. data/ext/apex_ext/apex_src/tests/fixtures/quarto/code-attrs.md +3 -0
  153. data/ext/apex_ext/apex_src/tests/fixtures/quarto/diagrams.md +8 -0
  154. data/ext/apex_ext/apex_src/tests/fixtures/quarto/lists.md +19 -0
  155. data/ext/apex_ext/apex_src/tests/fixtures/quarto/raw-content.md +5 -0
  156. data/ext/apex_ext/apex_src/tests/fixtures/quarto/shortcodes.md +7 -0
  157. data/ext/apex_ext/apex_src/tests/fixtures/quarto/smoke.md +81 -0
  158. data/ext/apex_ext/apex_src/tests/fixtures/quarto/spans.md +5 -0
  159. data/ext/apex_ext/apex_src/tests/fixtures/quarto-callouts.md +47 -0
  160. data/ext/apex_ext/apex_src/tests/fixtures/speed.md +192 -0
  161. data/ext/apex_ext/apex_src/tests/fixtures/tables/grid-tables.md +37 -0
  162. data/ext/apex_ext/apex_src/tests/paginate_cli_test.sh +16 -0
  163. data/ext/apex_ext/apex_src/tests/test_bear_image_attrs.c +301 -0
  164. data/ext/apex_ext/apex_src/tests/test_concordance.tsv +4 -0
  165. data/ext/apex_ext/apex_src/tests/test_escaping_repro.c +82 -0
  166. data/ext/apex_ext/apex_src/tests/test_extensions.c +821 -1
  167. data/ext/apex_ext/apex_src/tests/test_ial.c +7 -0
  168. data/ext/apex_ext/apex_src/tests/test_marked_integration.c +25 -0
  169. data/ext/apex_ext/apex_src/tests/test_metadata.c +129 -0
  170. data/ext/apex_ext/apex_src/tests/test_output.c +568 -2
  171. data/ext/apex_ext/apex_src/tests/test_runner.c +11 -0
  172. data/ext/apex_ext/apex_src/tests/test_tables.c +420 -0
  173. data/ext/apex_ext/apex_src/vendor/cmark-gfm/CMakeLists.txt +1 -1
  174. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/autolink.c +77 -1
  175. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/table.c +135 -5
  176. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/blocks.c +56 -1
  177. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/config.h +38 -0
  178. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/main.c +1 -1
  179. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/__pycache__/cmark.cpython-314.pyc +0 -0
  180. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/__pycache__/normalize.cpython-314.pyc +0 -0
  181. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/extensions.txt +69 -0
  182. data/ext/apex_ext/apex_src/xcode_build/CMakeScripts/ReRunCMake.make +74 -0
  183. data/ext/apex_ext/apex_src/xcode_build/CTestTestfile.cmake +22 -0
  184. data/ext/apex_ext/apex_src/xcode_build/Debug/Apex.framework/Versions/A/Apex +0 -0
  185. data/ext/apex_ext/apex_src/xcode_build/Debug/Apex.framework/Versions/A/Resources/Info.plist +44 -0
  186. data/ext/apex_ext/apex_src/xcode_build/Debug/Apex.framework/Versions/A/_CodeSignature/CodeResources +128 -0
  187. data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/project.pbxproj +5118 -0
  188. data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
  189. data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/project.xcworkspace/xcuserdata/ttscoff.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  190. data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/project.xcworkspace/xcuserdata/ttscoff.xcuserdatad/WorkspaceSettings.xcsettings +8 -0
  191. data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/xcuserdata/ttscoff.xcuserdatad/xcschemes/xcschememanagement.plist +99 -0
  192. data/ext/apex_ext/apex_src/xcode_build/cmake_install.cmake +452 -0
  193. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/CMakeScripts/ReRunCMake.make +52 -0
  194. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/cmake_install.cmake +55 -0
  195. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/cmark-gfm.xcodeproj/project.pbxproj +2455 -0
  196. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/cmark-gfm.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
  197. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/extensions/cmake_install.cmake +171 -0
  198. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/man/cmake_install.cmake +55 -0
  199. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/cmake_install.cmake +220 -0
  200. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/cmark-gfm_export.h +43 -0
  201. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/cmark-gfm_version.h +7 -0
  202. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/config.h +76 -0
  203. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/libcmark-gfm.pc +10 -0
  204. data/ext/apex_ext/extconf.rb +35 -0
  205. data/lib/apex/version.rb +2 -2
  206. metadata +117 -2
  207. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/tempOptimizedIndex.dsidx +0 -0
@@ -5,8 +5,97 @@
5
5
 
6
6
  <meta charset="UTF-8">
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
- <meta name="generator" content="Apex 0.1.49">
8
+ <meta name="generator" content="Apex 1.1.12">
9
9
  <title>Document</title>
10
+ <style>
11
+ /* GitHub-style syntax highlighting for Pygments and Skylighting */
12
+ /* Don't apply background to wrapper when code highlighting is enabled - let default styles handle it */
13
+ .code-highlighted .highlight, .code-highlighted .sourceCode { background: inherit; border-radius: 6px; padding: 16px; overflow-x: auto; }
14
+ .highlight pre, .sourceCode pre { margin: 0; padding: 0; background: transparent; }
15
+ .highlight code, .sourceCode code { font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace; font-size: 12px; line-height: 1.45; }
16
+ /* Pygments classes */
17
+ .highlight .k { color: #d73a49; font-weight: 600; } /* Keyword */
18
+ .highlight .kt { color: #d73a49; } /* Keyword.Type */
19
+ .highlight .kd { color: #d73a49; font-weight: 600; } /* Keyword.Declaration */
20
+ .highlight .kn { color: #d73a49; } /* Keyword.Namespace */
21
+ .highlight .kp { color: #d73a49; } /* Keyword.Pseudo */
22
+ .highlight .kr { color: #d73a49; font-weight: 600; } /* Keyword.Reserved */
23
+ .highlight .n { color: #6f42c1; } /* Name */
24
+ .highlight .na { color: #6f42c1; } /* Name.Attribute */
25
+ .highlight .nc { color: #6f42c1; font-weight: 600; } /* Name.Class */
26
+ .highlight .no { color: #005cc5; } /* Name.Constant */
27
+ .highlight .nd { color: #6f42c1; font-weight: 600; } /* Name.Decorator */
28
+ .highlight .ni { color: #800080; } /* Name.Entity */
29
+ .highlight .ne { color: #990000; font-weight: 600; } /* Name.Exception */
30
+ .highlight .nf { color: #6f42c1; font-weight: 600; } /* Name.Function */
31
+ .highlight .nl { color: #6f42c1; } /* Name.Label */
32
+ .highlight .nn { color: #555; } /* Name.Namespace */
33
+ .highlight .nt { color: #22863a; } /* Name.Tag */
34
+ .highlight .nv { color: #e36209; } /* Name.Variable */
35
+ .highlight .s { color: #032f62; } /* String */
36
+ .highlight .sb { color: #032f62; } /* String.Backtick */
37
+ .highlight .sc { color: #032f62; } /* String.Char */
38
+ .highlight .sd { color: #032f62; } /* String.Doc */
39
+ .highlight .s2 { color: #032f62; } /* String.Double */
40
+ .highlight .se { color: #032f62; } /* String.Escape */
41
+ .highlight .sh { color: #032f62; } /* String.Heredoc */
42
+ .highlight .si { color: #032f62; } /* String.Interpol */
43
+ .highlight .sx { color: #032f62; } /* String.Other */
44
+ .highlight .sr { color: #032f62; } /* String.Regex */
45
+ .highlight .s1 { color: #032f62; } /* String.Single */
46
+ .highlight .ss { color: #032f62; } /* String.Symbol */
47
+ .highlight .c { color: #6a737d; font-style: italic; } /* Comment */
48
+ .highlight .c1 { color: #6a737d; font-style: italic; } /* Comment.Single */
49
+ .highlight .cm { color: #6a737d; font-style: italic; } /* Comment.Multiline */
50
+ .highlight .cp { color: #6a737d; font-weight: 600; } /* Comment.Preproc */
51
+ .highlight .cs { color: #6a737d; font-weight: 600; font-style: italic; } /* Comment.Special */
52
+ .highlight .m { color: #005cc5; } /* Literal.Number */
53
+ .highlight .mb { color: #005cc5; } /* Literal.Number.Bin */
54
+ .highlight .mf { color: #005cc5; } /* Literal.Number.Float */
55
+ .highlight .mh { color: #005cc5; } /* Literal.Number.Hex */
56
+ .highlight .mi { color: #005cc5; } /* Literal.Number.Integer */
57
+ .highlight .il { color: #005cc5; } /* Literal.Number.Integer.Long */
58
+ .highlight .mo { color: #005cc5; } /* Literal.Number.Oct */
59
+ .highlight .o { color: #d73a49; } /* Operator */
60
+ .highlight .ow { color: #d73a49; } /* Operator.Word */
61
+ .highlight .p { color: #24292e; } /* Punctuation */
62
+ .highlight .w { color: #e1e4e8; } /* Text.Whitespace */
63
+ /* Skylighting classes */
64
+ .sourceCode .kw { color: #d73a49; font-weight: 600; } /* Keyword */
65
+ .sourceCode .dt { color: #6f42c1; } /* DataType */
66
+ .sourceCode .dv { color: #005cc5; } /* DecVal */
67
+ .sourceCode .bn { color: #005cc5; } /* BaseN */
68
+ .sourceCode .fl { color: #005cc5; } /* Float */
69
+ .sourceCode .ch { color: #032f62; } /* Char */
70
+ .sourceCode .st { color: #032f62; } /* String */
71
+ .sourceCode .co { color: #6a737d; font-style: italic; } /* Comment */
72
+ .sourceCode .ot { color: #22863a; } /* Other */
73
+ .sourceCode .al { color: #e36209; font-weight: 600; } /* Alert */
74
+ .sourceCode .fu { color: #6f42c1; font-weight: 600; } /* Function */
75
+ .sourceCode .re { color: #032f62; } /* RegionMarker */
76
+ .sourceCode .er { color: #d73a49; font-weight: 600; } /* Error */
77
+ .sourceCode .cf { color: #d73a49; font-weight: 600; } /* ControlFlow */
78
+ .sourceCode .op { color: #d73a49; } /* Operator */
79
+ .sourceCode .pp { color: #6a737d; } /* Preprocessor */
80
+ .sourceCode .at { color: #005cc5; } /* Attribute */
81
+ .sourceCode .do { color: #6a737d; font-style: italic; } /* Documentation */
82
+ .sourceCode .an { color: #6a737d; font-weight: 600; } /* Annotation */
83
+ .sourceCode .cv { color: #6a737d; font-weight: 600; font-style: italic; } /* CommentVar */
84
+ .sourceCode .in { color: #6a737d; } /* Information */
85
+ .sourceCode .wa { color: #e36209; font-weight: 600; } /* Warning */
86
+ .sourceCode .im { color: #d73a49; } /* Import */
87
+ .sourceCode .bu { color: #005cc5; } /* BuiltIn */
88
+ .sourceCode .ex { color: #6f42c1; } /* Extension */
89
+ .sourceCode .va { color: #e36209; } /* Variable */
90
+ .sourceCode .ss { color: #032f62; } /* SpecialString */
91
+ .sourceCode .sc { color: #032f62; } /* SpecialChar */
92
+ .sourceCode .vs { color: #032f62; } /* VerbatimString */
93
+ .sourceCode .il { color: #005cc5; } /* Special */
94
+ /* Line numbers (Skylighting) */
95
+ .sourceCode.numberSource .sourceCode { counter-reset: line; }
96
+ .sourceCode.numberSource .sourceCode > span { position: relative; left: -4em; counter-increment: line; }
97
+ .sourceCode.numberSource .sourceCode > span > a:first-child::before { content: counter(line); position: relative; left: -1em; text-align: right; vertical-align: baseline; border: none; display: inline-block; min-width: 1em; padding-right: 0.5em; color: #aaa; }
98
+ </style>
10
99
  <style>
11
100
  body {
12
101
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
@@ -35,10 +124,52 @@
35
124
  ins { background: #d4fcbc; text-decoration: none; }
36
125
  del { background: #fbb6c2; text-decoration: line-through; }
37
126
  mark { background: #fff3cd; }
127
+ .smallcaps { font-variant: small-caps; }
128
+ .underline { text-decoration: underline; }
129
+ span.mark { background: #fff3cd; }
130
+ .hidden { display: none; }
131
+ .quarto-xref { font-variant: normal; }
38
132
  .critic.comment { background: #e7e7e7; color: #666; font-style: italic; }
133
+ .mkhashtag { color: #666; }
134
+ .mkstyledtag {
135
+ display: inline-block;
136
+ background: #e0e0e0;
137
+ padding: 3px 9px;
138
+ border-radius: 20px;
139
+ font-size: 0.9em;
140
+ line-height: 1.4;
141
+ color: #333;
142
+ margin: 0 2px;
143
+ }
39
144
  </style>
145
+ <meta name="paginate" content="symbols"/>
146
+ <meta name="highlight-language-only" content="true"/>
147
+ <meta name="code-line-numbers" content="false"/>
148
+ <meta name="code-highlight" content="pygments"/>
149
+ <meta name="sup-sub" content="true"/>
150
+ <meta name="relaxed-tables" content="true"/>
151
+ <meta name="includes" content="true"/>
152
+ <meta name="autolink" content="true"/>
153
+ <meta name="pretty" content="false"/>
154
+ <meta name="standalone" content="false"/>
155
+ <meta name="mode" content="unified"/>
156
+ <meta name="markdown-in-html" content="true"/>
157
+ <meta name="image-captions" content="true"/>
158
+ <meta name="wikilink-extension" content="html"/>
159
+ <meta name="wikilink-space" content="hyphen"/>
160
+ <meta name="wikilinks" content="true"/>
161
+ <meta name="widont" content="true"/>
162
+ <meta name="plugins" content="true"/>
163
+ <meta name="id-format" content="gfm"/>
164
+
40
165
  <style>
41
- /* Base styles */
166
+ :root {
167
+ /* border-box width of the fixed sidebar; body offset includes a small gap */
168
+ --sidebar-width: 250px;
169
+ --sidebar-offset: 270px;
170
+ }
171
+
172
+ /* Base styles — override Apex standalone centering (max-width + margin: auto) */
42
173
  body {
43
174
  -webkit-font-smoothing: antialiased;
44
175
  -moz-osx-font-smoothing: grayscale;
@@ -48,6 +179,11 @@ body {
48
179
  line-height: 1.65;
49
180
  color: #1e293b;
50
181
  background-color: #fff;
182
+ max-width: none;
183
+ width: auto;
184
+ margin: 2rem 2rem 2rem var(--sidebar-offset);
185
+ padding: 0 1rem;
186
+ box-sizing: border-box;
51
187
  }
52
188
 
53
189
  /* Sidebar / Main TOC - wider on larger screens */
@@ -56,9 +192,10 @@ body {
56
192
  position: fixed;
57
193
  left: 0;
58
194
  top: 0;
59
- width: auto;
60
- min-width: 180px;
61
- max-width: 250px;
195
+ box-sizing: border-box;
196
+ width: var(--sidebar-width);
197
+ min-width: var(--sidebar-width);
198
+ max-width: var(--sidebar-width);
62
199
  height: 100vh;
63
200
  overflow-y: auto;
64
201
  background: #1e293b;
@@ -67,7 +204,6 @@ body {
67
204
  padding: 24px 20px 130px;
68
205
  font-size: 14px;
69
206
  z-index: 100;
70
- margin-right: 1rem;
71
207
  box-shadow: 4px 0 24px rgba(0, 0, 0, 0.08);
72
208
  transition: transform 0.3s ease;
73
209
  }
@@ -116,11 +252,6 @@ body {
116
252
  font-weight: 500;
117
253
  }
118
254
 
119
- /* Body margin for sidebar */
120
- body {
121
- margin-left: 270px;
122
- }
123
-
124
255
  /* Hamburger menu button */
125
256
  .hamburger-menu {
126
257
  display: none;
@@ -136,6 +267,7 @@ body {
136
267
  color: rgba(255, 255, 255, 0.9);
137
268
  font-size: 20px;
138
269
  line-height: 1;
270
+ box-sizing: border-box;
139
271
  width: 44px;
140
272
  height: 44px;
141
273
  align-items: center;
@@ -153,9 +285,7 @@ body {
153
285
 
154
286
  /* Move hamburger to the right of the sidebar when menu is open */
155
287
  .hamburger-menu.active {
156
- left: calc(
157
- 250px + 12px
158
- ); /* Position just to the right of sidebar (max-width 250px + 12px padding) */
288
+ left: calc(var(--sidebar-width) + 12px);
159
289
  }
160
290
 
161
291
  .hamburger-menu.active {
@@ -251,7 +381,7 @@ body {
251
381
  .floating-toc {
252
382
  position: fixed;
253
383
  top: 0;
254
- left: 270px;
384
+ left: var(--sidebar-offset);
255
385
  right: 0;
256
386
  z-index: 50;
257
387
  opacity: 0;
@@ -677,7 +807,7 @@ ol ul {
677
807
  }
678
808
 
679
809
  body {
680
- margin-left: 0;
810
+ margin: 2rem 1rem;
681
811
  }
682
812
 
683
813
  .floating-toc {
@@ -687,7 +817,7 @@ ol ul {
687
817
 
688
818
  </style></head>
689
819
 
690
- <body>
820
+ <body class="code-highlighted">
691
821
  <div class="floating-toc" id="floating-toc">
692
822
  <div class="floating-toc-container">
693
823
  <div class="floating-toc-header">
@@ -702,111 +832,159 @@ ol ul {
702
832
  <button class="hamburger-menu" id="hamburger-menu" aria-label="Toggle navigation"></button>
703
833
  <div class="mobile-menu-overlay" id="mobile-menu-overlay"></div>
704
834
 
705
- <nav class="main-toc"><ul><li><a href="Home.html">Home</a></li><li><a href="Getting-Started.html">Getting Started</a></li><li><a href="Installation.html">Installation</a></li><li><a href="Usage.html">Usage</a></li><li><a href="Syntax.html">Syntax</a></li><li><a href="Inline-Attribute-Lists.html">Inline Attribute Lists</a></li><li><a href="Modes.html">Modes</a></li><li><a href="Command-Line-Options.html">Command Line Options</a></li><li><a href="Multi-File-Documents.html">Multi-file Documents</a></li><li><a href="Citations.html">Citations</a></li><li><a href="Metadata-Transforms.html">Metadata Transforms</a></li><li><a href="Pandoc-Integration.html">Integrating with Pandoc</a></li><li><a href="Header-IDs.html">Header IDs</a></li><li><a href="C-API.html">C API</a></li><li><a href="Xcode-Integration.html">Xcode Integration</a></li><li><a href="Examples.html">Examples</a></li><li><a href="Plugins.html">Plugins</a></li><li><a href="Troubleshooting.html">Troubleshooting</a></li><li><a href="Credits.html">Credits</a></li></ul></nav>
835
+ <nav class="main-toc"><ul><li><a href="Home.html">Home</a></li><li><a href="Getting-Started.html">Getting Started</a></li><li><a href="Installation.html">Installation</a></li><li><a href="Usage.html">Usage</a></li><li><a href="Syntax.html">Syntax</a></li><li><a href="Callouts.html">Callouts</a></li><li><a href="Tables.html">Tables</a></li><li><a href="Inline-Attribute-Lists.html">Inline Attribute Lists</a></li><li><a href="Modes.html">Modes</a></li><li><a href="Quarto-Mode.html">Quarto Mode</a></li><li><a href="Command-Line-Options.html">Command Line Options</a></li><li><a href="Rendering-Markdown-In-Terminal.html">Rendering Markdown in the Terminal</a></li><li><a href="Generating-Man-Pages.html">Generating Man Pages</a></li><li><a href="Multi-File-Documents.html">Multi-file Documents</a></li><li><a href="Citations.html">Citations</a></li><li><a href="Indices.html">Indices</a></li><li><a href="Metadata-Transforms.html">Metadata Transforms</a></li><li><a href="Pandoc-Integration.html">Integrating with Pandoc</a></li><li><a href="Using-Apex-with-Jekyll.html">Using Apex with Jekyll</a></li><li><a href="Header-IDs.html">Header IDs</a></li><li><a href="C-API.html">C API</a></li><li><a href="Writing-Tests.html">Writing Tests</a></li><li><a href="Xcode-Integration.html">Xcode Integration</a></li><li><a href="Examples.html">Examples</a></li><li><a href="Plugins.html">Plugins</a></li><li><a href="Filters.html">Filters</a></li><li><a href="Troubleshooting.html">Troubleshooting</a></li><li><a href="Credits.html">Credits</a></li></ul></nav>
706
836
 
707
837
  <h1 id="c-api">
708
- C API
838
+ C&nbsp;API
709
839
  </h1>
710
- <nav class="page-toc" id="page-toc-top"><ul><li><a href="#c-api">C API</a><ul><li><a href="#overview">Overview</a></li><li><a href="#core-types">Core Types</a><ul><li><a href="#apexmodet">apex_mode_t</a></li><li><a href="#apexoptions">apex_options</a></li></ul></li><li><a href="#core-functions">Core Functions</a><ul><li><a href="#apexoptionsdefault">apex_options_default</a></li><li><a href="#apexoptionsformode">apex_options_for_mode</a></li><li><a href="#apexmarkdowntohtml">apex_markdown_to_html</a></li><li><a href="#apexfreestring">apex_free_string</a></li><li><a href="#apexwraphtmldocument">apex_wrap_html_document</a></li><li><a href="#apexprettyprinthtml">apex_pretty_print_html</a></li></ul></li><li><a href="#version-functions">Version Functions</a><ul><li><a href="#apexversionstring">apex_version_string</a></li><li><a href="#apexversionmajor-apexversionminor-apexversionpatch">apex_version_major / apex_version_minor / apex_version_patch</a></li></ul></li><li><a href="#list-options">List Options</a><ul><li><a href="#mixed-list-markers">Mixed List Markers</a></li><li><a href="#alpha-lists">Alpha Lists</a></li></ul></li><li><a href="#feature-flags">Feature Flags</a></li><li><a href="#metadata-options">Metadata Options</a></li><li><a href="#file-inclusion">File Inclusion</a></li><li><a href="#output-options">Output Options</a></li><li><a href="#line-break-options">Line Break Options</a></li><li><a href="#header-id-options">Header ID Options</a></li><li><a href="#table-options">Table Options</a></li><li><a href="#complete-example">Complete Example</a></li><li><a href="#compiling-and-linking">Compiling and Linking</a><ul><li><a href="#with-cmake">With CMake</a></li><li><a href="#manual-compilation">Manual Compilation</a></li><li><a href="#static-linking">Static Linking</a></li></ul></li><li><a href="#thread-safety">Thread Safety</a></li><li><a href="#memory-management">Memory Management</a></li><li><a href="#error-handling">Error Handling</a></li><li><a href="#performance-tips">Performance Tips</a></li><li><a href="#related">Related</a></li></ul></li></ul></nav>
840
+ <nav class="page-toc" id="page-toc-top"><ul><li><a href="#c-api">C&nbsp;API</a><ul><li><a href="#swift-package-note">Swift Package&nbsp;Note</a><ul><li><a href="#direct-c-api-from-swift-spm">Direct C API from Swift&nbsp;(SPM)</a></li></ul></li><li><a href="#overview">Overview</a></li><li><a href="#core-types">Core&nbsp;Types</a><ul><li><a href="#apexmodet">apex_mode_t</a></li><li><a href="#apexoptions">apex_options</a></li></ul></li><li><a href="#core-functions">Core&nbsp;Functions</a><ul><li><a href="#apexoptionsdefault">apex_options_default</a></li><li><a href="#apexoptionsformode">apex_options_for_mode</a></li><li><a href="#apexmarkdowntohtml">apex_markdown_to_html</a></li><li><a href="#structured-toc-entries">Structured TOC&nbsp;entries</a></li><li><a href="#apexfreestring">apex_free_string</a></li><li><a href="#apexwraphtmldocument">apex_wrap_html_document</a></li><li><a href="#apexprettyprinthtml">apex_pretty_print_html</a></li></ul></li><li><a href="#version-functions">Version&nbsp;Functions</a><ul><li><a href="#apexversionstring">apex_version_string</a></li><li><a href="#apexversionmajor-apexversionminor-apexversionpatch">apex_version_major / apex_version_minor /&nbsp;apex_version_patch</a></li></ul></li><li><a href="#list-options">List&nbsp;Options</a><ul><li><a href="#mixed-list-markers">Mixed List&nbsp;Markers</a></li><li><a href="#alpha-lists">Alpha&nbsp;Lists</a></li></ul></li><li><a href="#feature-flags">Feature&nbsp;Flags</a></li><li><a href="#metadata-options">Metadata&nbsp;Options</a></li><li><a href="#file-inclusion">File&nbsp;Inclusion</a></li><li><a href="#output-options">Output&nbsp;Options</a></li><li><a href="#line-break-options">Line Break&nbsp;Options</a></li><li><a href="#header-id-options">Header&nbsp;ID&nbsp;Options</a></li><li><a href="#toc-options">TOC&nbsp;Options</a></li><li><a href="#table-options">Table&nbsp;Options</a></li><li><a href="#complete-example">Complete&nbsp;Example</a></li><li><a href="#plugin-catalog-api">Plugin Catalog&nbsp;API</a><ul><li><a href="#types">Types</a></li><li><a href="#fetch-available-plugins">Fetch available&nbsp;plugins</a></li><li><a href="#list-installed-plugins">List installed&nbsp;plugins</a></li><li><a href="#install-and-uninstall">Install and&nbsp;uninstall</a></li><li><a href="#enable-plugins-during-conversion">Enable plugins during&nbsp;conversion</a></li></ul></li><li><a href="#compiling-and-linking">Compiling and&nbsp;Linking</a><ul><li><a href="#with-cmake">With&nbsp;CMake</a></li><li><a href="#manual-compilation">Manual Compilation</a></li><li><a href="#static-linking">Static&nbsp;Linking</a></li></ul></li><li><a href="#thread-safety">Thread&nbsp;Safety</a></li><li><a href="#memory-management">Memory&nbsp;Management</a></li><li><a href="#error-handling">Error&nbsp;Handling</a></li><li><a href="#performance-tips">Performance&nbsp;Tips</a></li><li><a href="#related">Related</a></li></ul></li><li><a href="#index-section">Index</a></li></ul></nav>
711
841
 
712
842
  <p>
713
843
  Apex provides a simple C API for programmatic Markdown to HTML conversion.
714
844
  </p>
715
845
 
716
- <h2 id="overview">
717
- Overview
846
+ <h2 id="swift-package-note">
847
+ Swift Package&nbsp;Note
718
848
  </h2>
719
849
 
720
850
  <p>
721
- The Apex C API is thread-safe and designed for integration into C and C++ applications. All functions are declared in <code>apex/apex.h</code>.
851
+ If you use Apex via Swift Package Manager in an Xcode Swift target, add the
852
+ <code>ApexC</code> product to your target dependencies, then use:
722
853
  </p>
723
854
 
724
- <h2 id="core-types">
725
- Core Types
726
- </h2>
855
+ <div class="highlight">
856
+ <pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">ApexC</span>
857
+ </pre>
858
+ </div>
727
859
 
728
- <h3 id="apexmodet">
729
- apex_mode_t
730
- </h3>
860
+ <p>
861
+ for direct C API calls like <code>apex_options_default()</code> and <code>apex_markdown_to_html(...)</code>.
862
+ </p>
731
863
 
732
- <p>
733
- Processor compatibility modes:
734
- </p>
864
+ <p>
865
+ <code>import Apex</code> exposes the high-level Swift wrapper API (<code>Apex</code>, <code>ApexOptions</code>, <code>ApexMode</code>), which is recommended for most Swift use cases.
866
+ </p>
735
867
 
736
- <pre><code class="highlight language-c"><span class="k">typedef</span> <span class="k">enum</span> <span class="p">{</span>
737
- <span class="n">APEX_MODE_COMMONMARK</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="cm">/* Pure CommonMark spec */</span>
738
- <span class="n">APEX_MODE_GFM</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="cm">/* GitHub Flavored Markdown */</span>
739
- <span class="n">APEX_MODE_MULTIMARKDOWN</span> <span class="o">=</span> <span class="mi">2</span><span class="p">,</span> <span class="cm">/* MultiMarkdown compatibility */</span>
740
- <span class="n">APEX_MODE_KRAMDOWN</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="cm">/* Kramdown compatibility */</span>
741
- <span class="n">APEX_MODE_UNIFIED</span> <span class="o">=</span> <span class="mi">4</span> <span class="cm">/* All features enabled */</span>
742
- <span class="p">}</span> <span class="n">apex_mode_t</span><span class="p">;</span>
743
- </code></pre>
744
-
745
- <h3 id="apexoptions">
746
- apex_options
868
+ <h3 id="direct-c-api-from-swift-spm">
869
+ Direct C API from Swift&nbsp;(SPM)
747
870
  </h3>
748
871
 
749
- <p>
750
- Configuration structure for processing:
751
- </p>
872
+ <div class="highlight">
873
+ <pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">ApexC</span>
752
874
 
753
- <pre><code class="highlight language-c"><span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span>
754
- <span class="n">apex_mode_t</span> <span class="n">mode</span><span class="p">;</span>
755
-
756
- <span class="cm">/* Feature flags */</span>
757
- <span class="n">bool</span> <span class="n">enable_tables</span><span class="p">;</span>
758
- <span class="n">bool</span> <span class="n">enable_footnotes</span><span class="p">;</span>
759
- <span class="n">bool</span> <span class="n">enable_definition_lists</span><span class="p">;</span>
760
- <span class="n">bool</span> <span class="n">enable_smart_typography</span><span class="p">;</span>
761
- <span class="n">bool</span> <span class="n">enable_math</span><span class="p">;</span>
762
- <span class="n">bool</span> <span class="n">enable_critic_markup</span><span class="p">;</span>
763
- <span class="n">bool</span> <span class="n">enable_wiki_links</span><span class="p">;</span>
764
- <span class="n">bool</span> <span class="n">enable_task_lists</span><span class="p">;</span>
765
- <span class="n">bool</span> <span class="n">enable_attributes</span><span class="p">;</span>
766
- <span class="n">bool</span> <span class="n">enable_callouts</span><span class="p">;</span>
767
- <span class="n">bool</span> <span class="n">enable_marked_extensions</span><span class="p">;</span>
768
-
769
- <span class="cm">/* Critic markup mode */</span>
770
- <span class="kt">int</span> <span class="n">critic_mode</span><span class="p">;</span> <span class="cm">/* 0=accept, 1=reject, 2=markup (default) */</span>
771
-
772
- <span class="cm">/* Metadata handling */</span>
773
- <span class="n">bool</span> <span class="n">strip_metadata</span><span class="p">;</span>
774
- <span class="n">bool</span> <span class="n">enable_metadata_variables</span><span class="p">;</span>
775
-
776
- <span class="cm">/* File inclusion */</span>
777
- <span class="n">bool</span> <span class="n">enable_file_includes</span><span class="p">;</span>
778
- <span class="kt">int</span> <span class="n">max_include_depth</span><span class="p">;</span>
779
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">base_directory</span><span class="p">;</span>
780
-
781
- <span class="cm">/* Output options */</span>
782
- <span class="n">bool</span> <span class="n">unsafe</span><span class="p">;</span> <span class="cm">/* Allow raw HTML */</span>
783
- <span class="n">bool</span> <span class="n">validate_utf8</span><span class="p">;</span>
784
- <span class="n">bool</span> <span class="n">github_pre_lang</span><span class="p">;</span>
785
- <span class="n">bool</span> <span class="n">standalone</span><span class="p">;</span> <span class="cm">/* Generate complete HTML document */</span>
786
- <span class="n">bool</span> <span class="n">pretty</span><span class="p">;</span> <span class="cm">/* Pretty-print HTML */</span>
787
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">stylesheet_path</span><span class="p">;</span>
788
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">document_title</span><span class="p">;</span>
789
-
790
- <span class="cm">/* Line break handling */</span>
791
- <span class="n">bool</span> <span class="n">hardbreaks</span><span class="p">;</span> <span class="cm">/* Treat newlines as hard breaks */</span>
792
- <span class="n">bool</span> <span class="n">nobreaks</span><span class="p">;</span> <span class="cm">/* Render soft breaks as spaces */</span>
793
-
794
- <span class="cm">/* Header ID generation */</span>
795
- <span class="n">bool</span> <span class="n">generate_header_ids</span><span class="p">;</span>
796
- <span class="n">bool</span> <span class="n">header_anchors</span><span class="p">;</span> <span class="cm">/* Generate &lt;a&gt; tags instead of id attributes */</span>
797
- <span class="kt">int</span> <span class="n">id_format</span><span class="p">;</span> <span class="cm">/* 0=GFM, 1=MMD, 2=Kramdown */</span>
798
-
799
- <span class="cm">/* Table options */</span>
800
- <span class="n">bool</span> <span class="n">relaxed_tables</span><span class="p">;</span>
801
-
802
- <span class="cm">/* List options */</span>
803
- <span class="n">bool</span> <span class="n">allow_mixed_list_markers</span><span class="p">;</span> <span class="cm">/* Allow mixed list markers at same level (inherit type from first item) */</span>
804
- <span class="n">bool</span> <span class="n">allow_alpha_lists</span><span class="p">;</span> <span class="cm">/* Support alpha list markers (a., b., c. and A., B., C.) */</span>
805
- <span class="p">}</span> <span class="n">apex_options</span><span class="p">;</span>
806
- </code></pre>
875
+ <span class="kd">let</span><span class="w"> </span><span class="nv">markdown</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s">&quot;# Hello from C API</span><span class="se">\n</span><span class="s">&quot;</span>
876
+
877
+ <span class="kd">var</span><span class="w"> </span><span class="nv">opts</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">apex_options_default</span><span class="p">()</span>
878
+ <span class="n">opts</span><span class="p">.</span><span class="n">mode</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">APEX_MODE_UNIFIED</span>
879
+
880
+ <span class="kd">let</span><span class="w"> </span><span class="nv">html</span><span class="p">:</span><span class="w"> </span><span class="nb">String</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">withCString</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">cstr</span><span class="w"> </span><span class="k">in</span>
881
+ <span class="w"> </span><span class="k">guard</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nv">out</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">cstr</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">cstr</span><span class="p">),</span><span class="w"> </span><span class="p">&amp;</span><span class="n">opts</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
882
+ <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="s">&quot;&quot;</span>
883
+ <span class="w"> </span><span class="p">}</span>
884
+ <span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">apex_free_string</span><span class="p">(</span><span class="n">out</span><span class="p">)</span><span class="w"> </span><span class="p">}</span>
885
+ <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">String</span><span class="p">(</span><span class="n">cString</span><span class="p">:</span><span class="w"> </span><span class="n">out</span><span class="p">)</span>
886
+ <span class="p">}</span>
887
+ </pre>
888
+ </div>
889
+
890
+ <h2 id="overview">
891
+ Overview
892
+ </h2>
893
+
894
+ <p>
895
+ The Apex C API is thread-safe and designed for integration into C and C++ applications. All functions are declared in <code>apex/apex.h</code>.
896
+ </p>
897
+
898
+ <h2 id="core-types">
899
+ Core&nbsp;Types
900
+ </h2>
901
+
902
+ <h3 id="apexmodet">
903
+ apex_mode_t
904
+ </h3>
905
+
906
+ <p>
907
+ Processor compatibility modes:
908
+ </p>
909
+
910
+ <div class="highlight">
911
+ <pre><span></span><span class="k">typedef</span><span class="w"> </span><span class="k">enum</span><span class="w"> </span><span class="p">{</span>
912
+ <span class="w"> </span><span class="n">APEX_MODE_COMMONMARK</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="cm">/* Pure CommonMark spec */</span>
913
+ <span class="w"> </span><span class="n">APEX_MODE_GFM</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="cm">/* GitHub Flavored Markdown */</span>
914
+ <span class="w"> </span><span class="n">APEX_MODE_MULTIMARKDOWN</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="cm">/* MultiMarkdown compatibility */</span>
915
+ <span class="w"> </span><span class="n">APEX_MODE_KRAMDOWN</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="cm">/* Kramdown compatibility */</span>
916
+ <span class="w"> </span><span class="n">APEX_MODE_UNIFIED</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="cm">/* All features enabled */</span>
917
+ <span class="p">}</span><span class="w"> </span><span class="n">apex_mode_t</span><span class="p">;</span>
918
+ </pre>
919
+ </div>
920
+
921
+ <h3 id="apexoptions">
922
+ apex_options
923
+ </h3>
924
+
925
+ <p>
926
+ Configuration structure for processing:
927
+ </p>
928
+
929
+ <div class="highlight">
930
+ <pre><span></span><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="p">{</span>
931
+ <span class="w"> </span><span class="n">apex_mode_t</span><span class="w"> </span><span class="n">mode</span><span class="p">;</span>
932
+
933
+ <span class="w"> </span><span class="cm">/* Feature flags */</span>
934
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">enable_tables</span><span class="p">;</span>
935
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">enable_footnotes</span><span class="p">;</span>
936
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">enable_definition_lists</span><span class="p">;</span>
937
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">enable_smart_typography</span><span class="p">;</span>
938
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">enable_math</span><span class="p">;</span>
939
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">enable_critic_markup</span><span class="p">;</span>
940
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">enable_wiki_links</span><span class="p">;</span>
941
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">enable_task_lists</span><span class="p">;</span>
942
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">enable_attributes</span><span class="p">;</span>
943
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">enable_callouts</span><span class="p">;</span>
944
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">enable_marked_extensions</span><span class="p">;</span>
945
+
946
+ <span class="w"> </span><span class="cm">/* Critic markup mode */</span>
947
+ <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">critic_mode</span><span class="p">;</span><span class="w"> </span><span class="cm">/* 0=accept, 1=reject, 2=markup (default) */</span>
948
+
949
+ <span class="w"> </span><span class="cm">/* Metadata handling */</span>
950
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">strip_metadata</span><span class="p">;</span>
951
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">enable_metadata_variables</span><span class="p">;</span>
952
+
953
+ <span class="w"> </span><span class="cm">/* File inclusion */</span>
954
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">enable_file_includes</span><span class="p">;</span>
955
+ <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">max_include_depth</span><span class="p">;</span>
956
+ <span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">base_directory</span><span class="p">;</span>
957
+
958
+ <span class="w"> </span><span class="cm">/* Output options */</span>
959
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">unsafe</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Allow raw HTML */</span>
960
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">validate_utf8</span><span class="p">;</span>
961
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">github_pre_lang</span><span class="p">;</span>
962
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">standalone</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Generate complete HTML document */</span>
963
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">pretty</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Pretty-print HTML */</span>
964
+ <span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">stylesheet_path</span><span class="p">;</span>
965
+ <span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">document_title</span><span class="p">;</span>
966
+
967
+ <span class="w"> </span><span class="cm">/* Line break handling */</span>
968
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">hardbreaks</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Treat newlines as hard breaks */</span>
969
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">nobreaks</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Render soft breaks as spaces */</span>
970
+
971
+ <span class="w"> </span><span class="cm">/* Header ID generation */</span>
972
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">generate_header_ids</span><span class="p">;</span>
973
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">header_anchors</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Generate &lt;a&gt; tags instead of id attributes */</span>
974
+ <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">id_format</span><span class="p">;</span><span class="w"> </span><span class="cm">/* 0=GFM, 1=MMD, 2=Kramdown */</span>
975
+
976
+ <span class="w"> </span><span class="cm">/* Table options */</span>
977
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">relaxed_tables</span><span class="p">;</span>
978
+
979
+ <span class="w"> </span><span class="cm">/* List options */</span>
980
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">allow_mixed_list_markers</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Allow mixed list markers at same level (inherit type from first item) */</span>
981
+ <span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">allow_alpha_lists</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Support alpha list markers (a., b., c. and A., B., C.) */</span>
982
+ <span class="p">}</span><span class="w"> </span><span class="n">apex_options</span><span class="p">;</span>
983
+ </pre>
984
+ </div>
807
985
 
808
986
  <h2 id="core-functions">
809
- Core Functions
987
+ Core&nbsp;Functions
810
988
  </h2>
811
989
 
812
990
  <h3 id="apexoptionsdefault">
@@ -817,21 +995,25 @@ ol ul {
817
995
  Get default options with all features enabled (unified mode).
818
996
  </p>
819
997
 
820
- <pre><code class="highlight language-c"><span class="n">apex_options</span> <span class="nf">apex_options_default</span><span class="p">(</span><span class="kt">void</span><span class="p">);</span>
821
- </code></pre>
998
+ <div class="highlight">
999
+ <pre><span></span><span class="n">apex_options</span><span class="w"> </span><span class="nf">apex_options_default</span><span class="p">(</span><span class="kt">void</span><span class="p">);</span>
1000
+ </pre>
1001
+ </div>
822
1002
 
823
1003
  <p>
824
- <strong> Returns:</strong> Default options structure
1004
+ <strong>Returns:</strong> Default options structure
825
1005
  </p>
826
1006
 
827
1007
  <p>
828
- <strong> Example:</strong>
1008
+ <strong>Example:</strong>
829
1009
  </p>
830
1010
 
831
- <pre><code class="highlight language-c"><span class="n">apex_options</span> <span class="n">opts</span> <span class="o">=</span> <span class="n">apex_options_default</span><span class="p">();</span>
832
- <span class="n">opts</span><span class="p">.</span><span class="n">enable_math</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
833
- <span class="n">opts</span><span class="p">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
834
- </code></pre>
1011
+ <div class="highlight">
1012
+ <pre><span></span><span class="n">apex_options</span><span class="w"> </span><span class="n">opts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_options_default</span><span class="p">();</span>
1013
+ <span class="n">opts</span><span class="p">.</span><span class="n">enable_math</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span>
1014
+ <span class="n">opts</span><span class="p">.</span><span class="n">pretty</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span>
1015
+ </pre>
1016
+ </div>
835
1017
 
836
1018
  <h3 id="apexoptionsformode">
837
1019
  apex_options_for_mode
@@ -841,11 +1023,13 @@ ol ul {
841
1023
  Get options configured for a specific processor mode.
842
1024
  </p>
843
1025
 
844
- <pre><code class="highlight language-c"><span class="n">apex_options</span> <span class="nf">apex_options_for_mode</span><span class="p">(</span><span class="n">apex_mode_t</span> <span class="n">mode</span><span class="p">);</span>
845
- </code></pre>
1026
+ <div class="highlight">
1027
+ <pre><span></span><span class="n">apex_options</span><span class="w"> </span><span class="nf">apex_options_for_mode</span><span class="p">(</span><span class="n">apex_mode_t</span><span class="w"> </span><span class="n">mode</span><span class="p">);</span>
1028
+ </pre>
1029
+ </div>
846
1030
 
847
1031
  <p>
848
- <strong> Parameters:</strong>
1032
+ <strong>Parameters:</strong>
849
1033
  </p>
850
1034
 
851
1035
  <ul>
@@ -857,16 +1041,18 @@ ol ul {
857
1041
  </ul>
858
1042
 
859
1043
  <p>
860
- <strong> Returns:</strong> Options configured for the specified mode
1044
+ <strong>Returns:</strong> Options configured for the specified mode
861
1045
  </p>
862
1046
 
863
1047
  <p>
864
- <strong> Example:</strong>
1048
+ <strong>Example:</strong>
865
1049
  </p>
866
1050
 
867
- <pre><code class="highlight language-c"><span class="n">apex_options</span> <span class="n">gfm_opts</span> <span class="o">=</span> <span class="n">apex_options_for_mode</span><span class="p">(</span><span class="n">APEX_MODE_GFM</span><span class="p">);</span>
868
- <span class="n">apex_options</span> <span class="n">mmd_opts</span> <span class="o">=</span> <span class="n">apex_options_for_mode</span><span class="p">(</span><span class="n">APEX_MODE_MULTIMARKDOWN</span><span class="p">);</span>
869
- </code></pre>
1051
+ <div class="highlight">
1052
+ <pre><span></span><span class="n">apex_options</span><span class="w"> </span><span class="n">gfm_opts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_options_for_mode</span><span class="p">(</span><span class="n">APEX_MODE_GFM</span><span class="p">);</span>
1053
+ <span class="n">apex_options</span><span class="w"> </span><span class="n">mmd_opts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_options_for_mode</span><span class="p">(</span><span class="n">APEX_MODE_MULTIMARKDOWN</span><span class="p">);</span>
1054
+ </pre>
1055
+ </div>
870
1056
 
871
1057
  <h3 id="apexmarkdowntohtml">
872
1058
  apex_markdown_to_html
@@ -876,12 +1062,14 @@ ol ul {
876
1062
  Main conversion function - converts Markdown to HTML.
877
1063
  </p>
878
1064
 
879
- <pre><code class="highlight language-c"><span class="kt">char</span> <span class="o">*</span><span class="nf">apex_markdown_to_html</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">markdown</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">len</span><span class="p">,</span>
880
- <span class="k">const</span> <span class="n">apex_options</span> <span class="o">*</span><span class="n">options</span><span class="p">);</span>
881
- </code></pre>
1065
+ <div class="highlight">
1066
+ <pre><span></span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="nf">apex_markdown_to_html</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">len</span><span class="p">,</span>
1067
+ <span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">apex_options</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="p">);</span>
1068
+ </pre>
1069
+ </div>
882
1070
 
883
1071
  <p>
884
- <strong> Parameters:</strong>
1072
+ <strong>Parameters:</strong>
885
1073
  </p>
886
1074
 
887
1075
  <ul>
@@ -901,22 +1089,109 @@ ol ul {
901
1089
  </ul>
902
1090
 
903
1091
  <p>
904
- <strong> Returns:</strong> Newly allocated HTML string (must be freed with <code>apex_free_string</code>), or NULL on error
1092
+ <strong>Returns:</strong> Newly allocated HTML string (must be freed with <code>apex_free_string</code>), or NULL on error
1093
+ </p>
1094
+
1095
+ <p>
1096
+ <strong>Example:</strong>
1097
+ </p>
1098
+
1099
+ <div class="highlight">
1100
+ <pre><span></span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">markdown</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;# Hello</span><span class="se">\n\n</span><span class="s">This is **bold**.&quot;</span><span class="p">;</span>
1101
+ <span class="n">apex_options</span><span class="w"> </span><span class="n">opts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_options_default</span><span class="p">();</span>
1102
+ <span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">markdown</span><span class="p">),</span><span class="w"> </span><span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1103
+
1104
+ <span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">html</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
1105
+ <span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;%s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">html</span><span class="p">);</span>
1106
+ <span class="w"> </span><span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
1107
+ <span class="p">}</span>
1108
+ </pre>
1109
+ </div>
1110
+
1111
+ <h3 id="structured-toc-entries">
1112
+ Structured TOC&nbsp;entries
1113
+ </h3>
1114
+
1115
+ <p>
1116
+ Extract headings as a flat array for outline UIs (collapsible table views, sidebars, etc.). Uses the same pipeline as <code>-t toc</code>: <code>id_format</code>, <code>toc_min</code> / <code>toc_max</code>, manual <code>{#id}</code> / IAL IDs, and <code>.no_toc</code> exclusions.
1117
+ </p>
1118
+
1119
+ <div class="highlight">
1120
+ <pre><span></span><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">apex_toc_entry</span><span class="w"> </span><span class="p">{</span>
1121
+ <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">level</span><span class="p">;</span><span class="w"> </span><span class="cm">/* 1–6 */</span>
1122
+ <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">text</span><span class="p">;</span><span class="w"> </span><span class="cm">/* display title */</span>
1123
+ <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">id</span><span class="p">;</span><span class="w"> </span><span class="cm">/* fragment id */</span>
1124
+ <span class="p">}</span><span class="w"> </span><span class="n">apex_toc_entry</span><span class="p">;</span>
1125
+
1126
+ <span class="n">apex_toc_entry</span><span class="w"> </span><span class="o">*</span><span class="nf">apex_markdown_to_toc_entries</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">len</span><span class="p">,</span>
1127
+ <span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">apex_options</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="p">,</span>
1128
+ <span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="o">*</span><span class="n">out_count</span><span class="p">);</span>
1129
+
1130
+ <span class="n">apex_toc_entry</span><span class="w"> </span><span class="o">*</span><span class="nf">apex_generate_toc_entries</span><span class="p">(</span><span class="n">cmark_node</span><span class="w"> </span><span class="o">*</span><span class="n">document</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">id_format</span><span class="p">,</span>
1131
+ <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">min_level</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">max_level</span><span class="p">,</span>
1132
+ <span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="o">*</span><span class="n">out_count</span><span class="p">);</span>
1133
+
1134
+ <span class="kt">void</span><span class="w"> </span><span class="nf">apex_toc_entries_free</span><span class="p">(</span><span class="n">apex_toc_entry</span><span class="w"> </span><span class="o">*</span><span class="n">entries</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">count</span><span class="p">);</span>
1135
+ </pre>
1136
+ </div>
1137
+
1138
+ <p>
1139
+ <strong>Parameters (<code>apex_markdown_to_toc_entries</code>):</strong>
1140
+ </p>
1141
+
1142
+ <ul>
1143
+
1144
+ <li>
1145
+ <code>markdown</code> / <code>len</code> - Input Markdown
1146
+ </li>
1147
+
1148
+ <li>
1149
+ <code>options</code> - Processing options (NULL for defaults). Honors <code>toc_min</code>, <code>toc_max</code>, and <code>id_format</code>
1150
+ </li>
1151
+
1152
+ <li>
1153
+ <code>out_count</code> - Required; receives the number of entries (0 if none)
1154
+ </li>
1155
+
1156
+ </ul>
1157
+
1158
+ <p>
1159
+ <strong>Returns:</strong> Heap array of <code>*out_count</code> entries, or NULL when there are no matching headings / on error. Free with <code>apex_toc_entries_free</code>.
1160
+ </p>
1161
+
1162
+ <p>
1163
+ <strong>Defaults:</strong> <code>toc_min = 1</code>, <code>toc_max = 3</code> (<code>#</code> through <code>###</code>), same as <code>-t toc</code>.
905
1164
  </p>
906
1165
 
907
1166
  <p>
908
- <strong> Example:</strong>
1167
+ <strong>Example:</strong>
909
1168
  </p>
910
1169
 
911
- <pre><code class="highlight language-c"><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">markdown</span> <span class="o">=</span> <span class="s">"# Hello</span><span class="se">\n\n</span><span class="s">This is **bold**."</span><span class="p">;</span>
912
- <span class="n">apex_options</span> <span class="n">opts</span> <span class="o">=</span> <span class="n">apex_options_default</span><span class="p">();</span>
913
- <span class="kt">char</span> <span class="o">*</span><span class="n">html</span> <span class="o">=</span> <span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">markdown</span><span class="p">),</span> <span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1170
+ <div class="highlight">
1171
+ <pre><span></span><span class="n">apex_options</span><span class="w"> </span><span class="n">opts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_options_default</span><span class="p">();</span>
1172
+ <span class="n">opts</span><span class="p">.</span><span class="n">toc_min</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
1173
+ <span class="n">opts</span><span class="p">.</span><span class="n">toc_max</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span>
1174
+ <span class="n">opts</span><span class="p">.</span><span class="n">id_format</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="cm">/* GFM */</span>
914
1175
 
915
- <span class="k">if</span> <span class="p">(</span><span class="n">html</span><span class="p">)</span> <span class="p">{</span>
916
- <span class="n">printf</span><span class="p">(</span><span class="s">"%s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">html</span><span class="p">);</span>
917
- <span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
1176
+ <span class="kt">size_t</span><span class="w"> </span><span class="n">count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
1177
+ <span class="n">apex_toc_entry</span><span class="w"> </span><span class="o">*</span><span class="n">entries</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_markdown_to_toc_entries</span><span class="p">(</span>
1178
+ <span class="w"> </span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">markdown</span><span class="p">),</span><span class="w"> </span><span class="o">&amp;</span><span class="n">opts</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">count</span><span class="p">);</span>
1179
+
1180
+ <span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">size_t</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">count</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
1181
+ <span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;%d %s #%s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">entries</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">level</span><span class="p">,</span><span class="w"> </span><span class="n">entries</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">text</span><span class="p">,</span><span class="w"> </span><span class="n">entries</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">id</span><span class="p">);</span>
918
1182
  <span class="p">}</span>
919
- </code></pre>
1183
+
1184
+ <span class="n">apex_toc_entries_free</span><span class="p">(</span><span class="n">entries</span><span class="p">,</span><span class="w"> </span><span class="n">count</span><span class="p">);</span>
1185
+ </pre>
1186
+ </div>
1187
+
1188
+ <p>
1189
+ Nesting for collapsible sections is derived from <code>level</code>: treat the shallowest included level as a root row; when the next entry’s level is deeper, it is a child; when shallower or equal, close open sections.
1190
+ </p>
1191
+
1192
+ <p>
1193
+ You can also emit a Markdown TOC string via <code>opts.output_format = APEX_OUTPUT_TOC</code> and <code>apex_markdown_to_html(...)</code> (CLI: <code>-t toc</code>).
1194
+ </p>
920
1195
 
921
1196
  <h3 id="apexfreestring">
922
1197
  apex_free_string
@@ -926,11 +1201,13 @@ ol ul {
926
1201
  Free a string allocated by Apex.
927
1202
  </p>
928
1203
 
929
- <pre><code class="highlight language-c"><span class="kt">void</span> <span class="nf">apex_free_string</span><span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="n">str</span><span class="p">);</span>
930
- </code></pre>
1204
+ <div class="highlight">
1205
+ <pre><span></span><span class="kt">void</span><span class="w"> </span><span class="nf">apex_free_string</span><span class="p">(</span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">str</span><span class="p">);</span>
1206
+ </pre>
1207
+ </div>
931
1208
 
932
1209
  <p>
933
- <strong> Parameters:</strong>
1210
+ <strong>Parameters:</strong>
934
1211
  </p>
935
1212
 
936
1213
  <ul>
@@ -942,13 +1219,15 @@ ol ul {
942
1219
  </ul>
943
1220
 
944
1221
  <p>
945
- <strong> Example:</strong>
1222
+ <strong>Example:</strong>
946
1223
  </p>
947
1224
 
948
- <pre><code class="highlight language-c"><span class="kt">char</span> <span class="o">*</span><span class="n">html</span> <span class="o">=</span> <span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span> <span class="n">len</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span>
949
- <span class="n">Use</span> <span class="n">html</span><span class="p">...</span>
1225
+ <div class="highlight">
1226
+ <pre><span></span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">len</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span>
1227
+ <span class="c1">// Use html...</span>
950
1228
  <span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
951
- </code></pre>
1229
+ </pre>
1230
+ </div>
952
1231
 
953
1232
  <h3 id="apexwraphtmldocument">
954
1233
  apex_wrap_html_document
@@ -958,12 +1237,14 @@ ol ul {
958
1237
  Wrap HTML content in a complete HTML5 document structure.
959
1238
  </p>
960
1239
 
961
- <pre><code class="highlight language-c"><span class="kt">char</span> <span class="o">*</span><span class="nf">apex_wrap_html_document</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">content</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">title</span><span class="p">,</span>
962
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">stylesheet_path</span><span class="p">);</span>
963
- </code></pre>
1240
+ <div class="highlight">
1241
+ <pre><span></span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="nf">apex_wrap_html_document</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">content</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">title</span><span class="p">,</span>
1242
+ <span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">stylesheet_path</span><span class="p">);</span>
1243
+ </pre>
1244
+ </div>
964
1245
 
965
1246
  <p>
966
- <strong> Parameters:</strong>
1247
+ <strong>Parameters:</strong>
967
1248
  </p>
968
1249
 
969
1250
  <ul>
@@ -983,19 +1264,21 @@ ol ul {
983
1264
  </ul>
984
1265
 
985
1266
  <p>
986
- <strong> Returns:</strong> Newly allocated HTML document string (must be freed with <code>apex_free_string</code>)
1267
+ <strong>Returns:</strong> Newly allocated HTML document string (must be freed with <code>apex_free_string</code>)
987
1268
  </p>
988
1269
 
989
1270
  <p>
990
- <strong> Example:</strong>
1271
+ <strong>Example:</strong>
991
1272
  </p>
992
1273
 
993
- <pre><code class="highlight language-c"><span class="kt">char</span> <span class="o">*</span><span class="n">fragment</span> <span class="o">=</span> <span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span> <span class="n">len</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
994
- <span class="kt">char</span> <span class="o">*</span><span class="n">document</span> <span class="o">=</span> <span class="n">apex_wrap_html_document</span><span class="p">(</span><span class="n">fragment</span><span class="p">,</span> <span class="s">"My Document"</span><span class="p">,</span> <span class="s">"style.css"</span><span class="p">);</span>
1274
+ <div class="highlight">
1275
+ <pre><span></span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">fragment</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">len</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1276
+ <span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">document</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_wrap_html_document</span><span class="p">(</span><span class="n">fragment</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;My Document&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;style.css&quot;</span><span class="p">);</span>
995
1277
  <span class="n">apex_free_string</span><span class="p">(</span><span class="n">fragment</span><span class="p">);</span>
996
- <span class="n">Use</span> <span class="n">document</span><span class="p">...</span>
1278
+ <span class="c1">// Use document...</span>
997
1279
  <span class="n">apex_free_string</span><span class="p">(</span><span class="n">document</span><span class="p">);</span>
998
- </code></pre>
1280
+ </pre>
1281
+ </div>
999
1282
 
1000
1283
  <h3 id="apexprettyprinthtml">
1001
1284
  apex_pretty_print_html
@@ -1005,11 +1288,13 @@ ol ul {
1005
1288
  Pretty-print HTML with proper indentation.
1006
1289
  </p>
1007
1290
 
1008
- <pre><code class="highlight language-c"><span class="kt">char</span> <span class="o">*</span><span class="nf">apex_pretty_print_html</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">html</span><span class="p">);</span>
1009
- </code></pre>
1291
+ <div class="highlight">
1292
+ <pre><span></span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="nf">apex_pretty_print_html</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="p">);</span>
1293
+ </pre>
1294
+ </div>
1010
1295
 
1011
1296
  <p>
1012
- <strong> Parameters:</strong>
1297
+ <strong>Parameters:</strong>
1013
1298
  </p>
1014
1299
 
1015
1300
  <ul>
@@ -1021,22 +1306,24 @@ ol ul {
1021
1306
  </ul>
1022
1307
 
1023
1308
  <p>
1024
- <strong> Returns:</strong> Newly allocated formatted HTML string (must be freed with <code>apex_free_string</code>)
1309
+ <strong>Returns:</strong> Newly allocated formatted HTML string (must be freed with <code>apex_free_string</code>)
1025
1310
  </p>
1026
1311
 
1027
1312
  <p>
1028
- <strong> Example:</strong>
1313
+ <strong>Example:</strong>
1029
1314
  </p>
1030
1315
 
1031
- <pre><code class="highlight language-c"><span class="kt">char</span> <span class="o">*</span><span class="n">html</span> <span class="o">=</span> <span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span> <span class="n">len</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1032
- <span class="kt">char</span> <span class="o">*</span><span class="n">pretty</span> <span class="o">=</span> <span class="n">apex_pretty_print_html</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
1316
+ <div class="highlight">
1317
+ <pre><span></span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">len</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1318
+ <span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">pretty</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_pretty_print_html</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
1033
1319
  <span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
1034
- <span class="n">Use</span> <span class="n">pretty</span><span class="p">...</span>
1320
+ <span class="c1">// Use pretty...</span>
1035
1321
  <span class="n">apex_free_string</span><span class="p">(</span><span class="n">pretty</span><span class="p">);</span>
1036
- </code></pre>
1322
+ </pre>
1323
+ </div>
1037
1324
 
1038
1325
  <h2 id="version-functions">
1039
- Version Functions
1326
+ Version&nbsp;Functions
1040
1327
  </h2>
1041
1328
 
1042
1329
  <h3 id="apexversionstring">
@@ -1047,96 +1334,108 @@ ol ul {
1047
1334
  Get version string.
1048
1335
  </p>
1049
1336
 
1050
- <pre><code class="highlight language-c"><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="nf">apex_version_string</span><span class="p">(</span><span class="kt">void</span><span class="p">);</span>
1051
- </code></pre>
1337
+ <div class="highlight">
1338
+ <pre><span></span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="nf">apex_version_string</span><span class="p">(</span><span class="kt">void</span><span class="p">);</span>
1339
+ </pre>
1340
+ </div>
1052
1341
 
1053
1342
  <p>
1054
- <strong> Returns:</strong> Version string (e.g., “0.1.0”)
1343
+ <strong>Returns:</strong> Version string (e.g., “0.1.0”)
1055
1344
  </p>
1056
1345
 
1057
1346
  <h3 id="apexversionmajor-apexversionminor-apexversionpatch">
1058
- apex_version_major / apex_version_minor / apex_version_patch
1347
+ apex_version_major / apex_version_minor /&nbsp;apex_version_patch
1059
1348
  </h3>
1060
1349
 
1061
1350
  <p>
1062
1351
  Get individual version components.
1063
1352
  </p>
1064
1353
 
1065
- <pre><code class="highlight language-c"><span class="kt">int</span> <span class="nf">apex_version_major</span><span class="p">(</span><span class="kt">void</span><span class="p">);</span>
1066
- <span class="kt">int</span> <span class="nf">apex_version_minor</span><span class="p">(</span><span class="kt">void</span><span class="p">);</span>
1067
- <span class="kt">int</span> <span class="nf">apex_version_patch</span><span class="p">(</span><span class="kt">void</span><span class="p">);</span>
1068
- </code></pre>
1354
+ <div class="highlight">
1355
+ <pre><span></span><span class="kt">int</span><span class="w"> </span><span class="nf">apex_version_major</span><span class="p">(</span><span class="kt">void</span><span class="p">);</span>
1356
+ <span class="kt">int</span><span class="w"> </span><span class="nf">apex_version_minor</span><span class="p">(</span><span class="kt">void</span><span class="p">);</span>
1357
+ <span class="kt">int</span><span class="w"> </span><span class="nf">apex_version_patch</span><span class="p">(</span><span class="kt">void</span><span class="p">);</span>
1358
+ </pre>
1359
+ </div>
1069
1360
 
1070
1361
  <p>
1071
- <strong> Returns:</strong> Version component as integer
1362
+ <strong>Returns:</strong> Version component as integer
1072
1363
  </p>
1073
1364
 
1074
1365
  <h2 id="list-options">
1075
- List Options
1366
+ List&nbsp;Options
1076
1367
  </h2>
1077
1368
 
1078
1369
  <h3 id="mixed-list-markers">
1079
- Mixed List Markers
1370
+ Mixed List&nbsp;Markers
1080
1371
  </h3>
1081
1372
 
1082
1373
  <p>
1083
1374
  When <code>allow_mixed_list_markers</code> is enabled, lists with different marker types at the same indentation level will inherit the type from the first item. This is enabled by default in <strong>MultiMarkdown</strong> and <strong>Unified</strong> modes.
1084
1375
  </p>
1085
1376
 
1086
- <pre><code class="highlight language-c"><span class="n">apex_options</span> <span class="n">opts</span> <span class="o">=</span> <span class="n">apex_options_for_mode</span><span class="p">(</span><span class="n">APEX_MODE_UNIFIED</span><span class="p">);</span>
1087
- <span class="n">opts</span><span class="p">.</span><span class="n">allow_mixed_list_markers</span> <span class="n">is</span> <span class="nb">true</span> <span class="n">by</span> <span class="k">default</span>
1377
+ <div class="highlight">
1378
+ <pre><span></span><span class="n">apex_options</span><span class="w"> </span><span class="n">opts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_options_for_mode</span><span class="p">(</span><span class="n">APEX_MODE_UNIFIED</span><span class="p">);</span>
1379
+ <span class="c1">// opts.allow_mixed_list_markers is true by default</span>
1088
1380
 
1089
- <span class="n">To</span> <span class="n">enable</span> <span class="n">in</span> <span class="n">other</span> <span class="n">modes</span><span class="o">:</span>
1090
- <span class="n">opts</span><span class="p">.</span><span class="n">allow_mixed_list_markers</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
1381
+ <span class="c1">// To enable in other modes:</span>
1382
+ <span class="n">opts</span><span class="p">.</span><span class="n">allow_mixed_list_markers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span>
1091
1383
 
1092
- <span class="n">To</span> <span class="n">disable</span> <span class="n">in</span> <span class="n">unified</span><span class="o">/</span><span class="n">multimarkdown</span> <span class="n">modes</span><span class="o">:</span>
1093
- <span class="n">opts</span><span class="p">.</span><span class="n">allow_mixed_list_markers</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span>
1094
- </code></pre>
1384
+ <span class="c1">// To disable in unified/multimarkdown modes:</span>
1385
+ <span class="n">opts</span><span class="p">.</span><span class="n">allow_mixed_list_markers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">false</span><span class="p">;</span>
1386
+ </pre>
1387
+ </div>
1095
1388
 
1096
1389
  <p>
1097
- <strong> Example markdown:</strong>
1390
+ <strong>Example markdown:</strong>
1098
1391
  </p>
1099
1392
 
1100
- <pre><code class="highlight language-markdown"><span class="p">1.</span> First numbered item
1101
- <span class="p">*</span> Second item (becomes numbered)
1102
- <span class="p">*</span> Third item (becomes numbered)
1103
- </code></pre>
1393
+ <div class="highlight">
1394
+ <pre><span></span><span class="k">1.</span> First numbered item
1395
+ <span class="k">*</span><span class="w"> </span>Second item (becomes numbered)
1396
+ <span class="k">*</span><span class="w"> </span>Third item (becomes numbered)
1397
+ </pre>
1398
+ </div>
1104
1399
 
1105
1400
  <h3 id="alpha-lists">
1106
- Alpha Lists
1401
+ Alpha&nbsp;Lists
1107
1402
  </h3>
1108
1403
 
1109
1404
  <p>
1110
1405
  When <code>allow_alpha_lists</code> is enabled, alphabetic markers (<code>a.</code>, <code>b.</code>, <code>c.</code> for lower-alpha and <code>A.</code>, <code>B.</code>, <code>C.</code> for upper-alpha) are converted to HTML lists with appropriate <code>list-style-type</code> CSS. This is enabled by default in <strong>Unified</strong> mode only.
1111
1406
  </p>
1112
1407
 
1113
- <pre><code class="highlight language-c"><span class="n">apex_options</span> <span class="n">opts</span> <span class="o">=</span> <span class="n">apex_options_for_mode</span><span class="p">(</span><span class="n">APEX_MODE_UNIFIED</span><span class="p">);</span>
1114
- <span class="n">opts</span><span class="p">.</span><span class="n">allow_alpha_lists</span> <span class="n">is</span> <span class="nb">true</span> <span class="n">by</span> <span class="k">default</span>
1408
+ <div class="highlight">
1409
+ <pre><span></span><span class="n">apex_options</span><span class="w"> </span><span class="n">opts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_options_for_mode</span><span class="p">(</span><span class="n">APEX_MODE_UNIFIED</span><span class="p">);</span>
1410
+ <span class="c1">// opts.allow_alpha_lists is true by default</span>
1115
1411
 
1116
- <span class="n">To</span> <span class="n">enable</span> <span class="n">in</span> <span class="n">other</span> <span class="n">modes</span><span class="o">:</span>
1117
- <span class="n">opts</span><span class="p">.</span><span class="n">allow_alpha_lists</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
1412
+ <span class="c1">// To enable in other modes:</span>
1413
+ <span class="n">opts</span><span class="p">.</span><span class="n">allow_alpha_lists</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span>
1118
1414
 
1119
- <span class="n">To</span> <span class="n">disable</span> <span class="n">in</span> <span class="n">unified</span> <span class="n">mode</span><span class="o">:</span>
1120
- <span class="n">opts</span><span class="p">.</span><span class="n">allow_alpha_lists</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span>
1121
- </code></pre>
1415
+ <span class="c1">// To disable in unified mode:</span>
1416
+ <span class="n">opts</span><span class="p">.</span><span class="n">allow_alpha_lists</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">false</span><span class="p">;</span>
1417
+ </pre>
1418
+ </div>
1122
1419
 
1123
1420
  <p>
1124
- <strong> Example markdown:</strong>
1421
+ <strong>Example markdown:</strong>
1125
1422
  </p>
1126
1423
 
1127
- <pre><code class="highlight language-markdown">[apex-alpha-list:lower]
1128
- <span class="p">
1129
- 1.</span> First item
1130
- <span class="p">2.</span> Second item
1131
- <span class="p">3.</span> Third item
1132
- </code></pre>
1424
+ <div class="highlight">
1425
+ <pre><span></span>&lt;!-- apex-alpha-list-lower --&gt;
1426
+
1427
+ <span class="k">1.</span> First item
1428
+ <span class="k">2.</span> Second item
1429
+ <span class="k">3.</span> Third item
1430
+ </pre>
1431
+ </div>
1133
1432
 
1134
1433
  <p>
1135
1434
  This produces HTML with <code>style=&quot;list-style-type: lower-alpha&quot;</code> on the <code>&lt;ol&gt;</code> tag.
1136
1435
  </p>
1137
1436
 
1138
1437
  <h2 id="feature-flags">
1139
- Feature Flags
1438
+ Feature&nbsp;Flags
1140
1439
  </h2>
1141
1440
 
1142
1441
  <p>
@@ -1196,7 +1495,7 @@ ol ul {
1196
1495
  </p>
1197
1496
 
1198
1497
  <h2 id="metadata-options">
1199
- Metadata Options
1498
+ Metadata&nbsp;Options
1200
1499
  </h2>
1201
1500
 
1202
1501
  <ul>
@@ -1212,13 +1511,13 @@ ol ul {
1212
1511
  </ul>
1213
1512
 
1214
1513
  <h2 id="file-inclusion">
1215
- File Inclusion
1514
+ File&nbsp;Inclusion
1216
1515
  </h2>
1217
1516
 
1218
1517
  <ul>
1219
1518
 
1220
1519
  <li>
1221
- <code>enable_file_includes</code> - Enable file inclusion syntax (``, <code>{{file.md}}</code>, `/file.md`)
1520
+ <code>enable_file_includes</code> - Enable file inclusion syntax (<code>&lt;&lt;[file.md]</code>, <code>{{file.md}}</code>, <code>/file.md</code>)
1222
1521
  </li>
1223
1522
 
1224
1523
  <li>
@@ -1232,7 +1531,7 @@ ol ul {
1232
1531
  </ul>
1233
1532
 
1234
1533
  <h2 id="output-options">
1235
- Output Options
1534
+ Output&nbsp;Options
1236
1535
  </h2>
1237
1536
 
1238
1537
  <ul>
@@ -1268,7 +1567,7 @@ ol ul {
1268
1567
  </ul>
1269
1568
 
1270
1569
  <h2 id="line-break-options">
1271
- Line Break Options
1570
+ Line Break&nbsp;Options
1272
1571
  </h2>
1273
1572
 
1274
1573
  <ul>
@@ -1284,7 +1583,7 @@ ol ul {
1284
1583
  </ul>
1285
1584
 
1286
1585
  <h2 id="header-id-options">
1287
- Header ID Options
1586
+ Header&nbsp;ID&nbsp;Options
1288
1587
  </h2>
1289
1588
 
1290
1589
  <ul>
@@ -1303,8 +1602,28 @@ ol ul {
1303
1602
 
1304
1603
  </ul>
1305
1604
 
1605
+ <h2 id="toc-options">
1606
+ TOC&nbsp;Options
1607
+ </h2>
1608
+
1609
+ <ul>
1610
+
1611
+ <li>
1612
+ <code>toc_min</code> / <code>toc_max</code> - Inclusive heading depth for <code>-t toc</code> / <code>apex_markdown_to_toc_entries</code> and for bare HTML TOC markers (default: <code>1</code> / <code>3</code>)
1613
+ </li>
1614
+
1615
+ <li>
1616
+ <code>output_format</code> - Set to <code>APEX_OUTPUT_TOC</code> to return a Markdown TOC list from <code>apex_markdown_to_html</code>
1617
+ </li>
1618
+
1619
+ <li>
1620
+ <code>toc_entries_out</code> / <code>toc_entries_count_out</code> - Optional capture pointers used internally by <code>apex_markdown_to_toc_entries</code>; leave NULL for normal conversion
1621
+ </li>
1622
+
1623
+ </ul>
1624
+
1306
1625
  <h2 id="table-options">
1307
- Table Options
1626
+ Table&nbsp;Options
1308
1627
  </h2>
1309
1628
 
1310
1629
  <ul>
@@ -1313,95 +1632,215 @@ ol ul {
1313
1632
  <code>relaxed_tables</code> - Support tables without separator rows (Kramdown-style, default: true in Unified/Kramdown modes)
1314
1633
  </li>
1315
1634
 
1635
+ <li>
1636
+ <code>per_cell_alignment</code> - Enable per-cell alignment markers using colons at start/end of cells (default: true in Unified mode, false in other modes)
1637
+ </li>
1638
+
1316
1639
  </ul>
1317
1640
 
1318
1641
  <h2 id="complete-example">
1319
- Complete Example
1642
+ Complete&nbsp;Example
1643
+ </h2>
1644
+
1645
+ <div class="highlight">
1646
+ <pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;apex/apex.h&gt;</span>
1647
+ <span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdio.h&gt;</span>
1648
+ <span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;string.h&gt;</span>
1649
+
1650
+ <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
1651
+ <span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">markdown</span><span class="w"> </span><span class="o">=</span>
1652
+ <span class="w"> </span><span class="s">&quot;---</span><span class="se">\n</span><span class="s">&quot;</span>
1653
+ <span class="w"> </span><span class="s">&quot;title: Test Document</span><span class="se">\n</span><span class="s">&quot;</span>
1654
+ <span class="w"> </span><span class="s">&quot;author: John Doe</span><span class="se">\n</span><span class="s">&quot;</span>
1655
+ <span class="w"> </span><span class="s">&quot;---</span><span class="se">\n</span><span class="s">&quot;</span>
1656
+ <span class="w"> </span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
1657
+ <span class="w"> </span><span class="s">&quot;# [%title]</span><span class="se">\n</span><span class="s">&quot;</span>
1658
+ <span class="w"> </span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
1659
+ <span class="w"> </span><span class="s">&quot;By [%author]</span><span class="se">\n</span><span class="s">&quot;</span>
1660
+ <span class="w"> </span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
1661
+ <span class="w"> </span><span class="s">&quot;This has **bold** and a [[WikiLink]].</span><span class="se">\n</span><span class="s">&quot;</span>
1662
+ <span class="w"> </span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
1663
+ <span class="w"> </span><span class="s">&quot;Math: $E = mc^2$</span><span class="se">\n</span><span class="s">&quot;</span>
1664
+ <span class="w"> </span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
1665
+ <span class="w"> </span><span class="s">&quot;1. Mixed markers</span><span class="se">\n</span><span class="s">&quot;</span>
1666
+ <span class="w"> </span><span class="s">&quot;* Second item</span><span class="se">\n</span><span class="s">&quot;</span>
1667
+ <span class="w"> </span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span>
1668
+ <span class="w"> </span><span class="s">&quot;a. Alpha list</span><span class="se">\n</span><span class="s">&quot;</span>
1669
+ <span class="w"> </span><span class="s">&quot;b. Second alpha</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">;</span>
1670
+
1671
+ <span class="w"> </span><span class="c1">// Use unified mode with all features</span>
1672
+ <span class="w"> </span><span class="n">apex_options</span><span class="w"> </span><span class="n">opts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_options_for_mode</span><span class="p">(</span><span class="n">APEX_MODE_UNIFIED</span><span class="p">);</span>
1673
+ <span class="w"> </span><span class="c1">// Mixed markers and alpha lists are enabled by default in unified mode</span>
1674
+ <span class="w"> </span><span class="n">opts</span><span class="p">.</span><span class="n">pretty</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span>
1675
+ <span class="w"> </span><span class="n">opts</span><span class="p">.</span><span class="n">standalone</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span>
1676
+ <span class="w"> </span><span class="n">opts</span><span class="p">.</span><span class="n">document_title</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;Test Document&quot;</span><span class="p">;</span>
1677
+
1678
+ <span class="w"> </span><span class="c1">// Convert to HTML</span>
1679
+ <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">markdown</span><span class="p">),</span><span class="w"> </span><span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1680
+
1681
+ <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">html</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
1682
+ <span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;%s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">html</span><span class="p">);</span>
1683
+ <span class="w"> </span><span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
1684
+ <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
1685
+ <span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
1686
+ <span class="w"> </span><span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Conversion failed</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
1687
+ <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
1688
+ <span class="w"> </span><span class="p">}</span>
1689
+ <span class="p">}</span>
1690
+ </pre>
1691
+ </div>
1692
+
1693
+ <h2 id="plugin-catalog-api">
1694
+ Plugin Catalog&nbsp;API
1320
1695
  </h2>
1321
1696
 
1322
- <pre><code class="highlight language-c"><span class="cp">#include</span> <span class="cpf">&lt;apex/apex.h&gt;</span><span class="cp">
1323
- #include</span> <span class="cpf">&lt;stdio.h&gt;</span><span class="cp">
1324
- #include</span> <span class="cpf">&lt;string.h&gt;</span><span class="cp">
1325
- </span>
1326
- <span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
1327
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">markdown</span> <span class="o">=</span>
1328
- <span class="s">"---</span><span class="se">\n</span><span class="s">"</span>
1329
- <span class="s">"title: Test Document</span><span class="se">\n</span><span class="s">"</span>
1330
- <span class="s">"author: John Doe</span><span class="se">\n</span><span class="s">"</span>
1331
- <span class="s">"---</span><span class="se">\n</span><span class="s">"</span>
1332
- <span class="s">"</span><span class="se">\n</span><span class="s">"</span>
1333
- <span class="s">"# [%title]</span><span class="se">\n</span><span class="s">"</span>
1334
- <span class="s">"</span><span class="se">\n</span><span class="s">"</span>
1335
- <span class="s">"By [%author]</span><span class="se">\n</span><span class="s">"</span>
1336
- <span class="s">"</span><span class="se">\n</span><span class="s">"</span>
1337
- <span class="s">"This has **bold** and a [[WikiLink]].</span><span class="se">\n</span><span class="s">"</span>
1338
- <span class="s">"</span><span class="se">\n</span><span class="s">"</span>
1339
- <span class="s">"Math: $E = mc^2$</span><span class="se">\n</span><span class="s">"</span>
1340
- <span class="s">"</span><span class="se">\n</span><span class="s">"</span>
1341
- <span class="s">"1. Mixed markers</span><span class="se">\n</span><span class="s">"</span>
1342
- <span class="s">"* Second item</span><span class="se">\n</span><span class="s">"</span>
1343
- <span class="s">"</span><span class="se">\n</span><span class="s">"</span>
1344
- <span class="s">"a. Alpha list</span><span class="se">\n</span><span class="s">"</span>
1345
- <span class="s">"b. Second alpha</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
1346
-
1347
- <span class="c1">// Use unified mode with all features</span>
1348
- <span class="n">apex_options</span> <span class="n">opts</span> <span class="o">=</span> <span class="n">apex_options_for_mode</span><span class="p">(</span><span class="n">APEX_MODE_UNIFIED</span><span class="p">);</span>
1349
- <span class="c1">// Mixed markers and alpha lists are enabled by default in unified mode</span>
1350
- <span class="n">opts</span><span class="p">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
1351
- <span class="n">opts</span><span class="p">.</span><span class="n">standalone</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
1352
- <span class="n">opts</span><span class="p">.</span><span class="n">document_title</span> <span class="o">=</span> <span class="s">"Test Document"</span><span class="p">;</span>
1353
-
1354
- <span class="c1">// Convert to HTML</span>
1355
- <span class="kt">char</span> <span class="o">*</span><span class="n">html</span> <span class="o">=</span> <span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">markdown</span><span class="p">),</span> <span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1356
-
1357
- <span class="k">if</span> <span class="p">(</span><span class="n">html</span><span class="p">)</span> <span class="p">{</span>
1358
- <span class="n">printf</span><span class="p">(</span><span class="s">"%s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">html</span><span class="p">);</span>
1359
- <span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
1360
- <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
1361
- <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
1362
- <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Conversion failed</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
1363
- <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
1364
- <span class="p">}</span>
1697
+ <p>
1698
+ Plugin listing and installation for app UIs is declared in <code>apex/plugins.h</code> (also included by <code>apexc.h</code>).
1699
+ </p>
1700
+
1701
+ <h3 id="types">
1702
+ Types
1703
+ </h3>
1704
+
1705
+ <div class="highlight">
1706
+ <pre><span></span><span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">apex_plugin_info</span><span class="w"> </span><span class="p">{</span>
1707
+ <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">id</span><span class="p">;</span>
1708
+ <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">title</span><span class="p">;</span>
1709
+ <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">description</span><span class="p">;</span>
1710
+ <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">author</span><span class="p">;</span>
1711
+ <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">homepage</span><span class="p">;</span>
1712
+ <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">repo</span><span class="p">;</span>
1713
+ <span class="p">}</span><span class="w"> </span><span class="n">apex_plugin_info</span><span class="p">;</span>
1714
+
1715
+ <span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">apex_plugin_catalog</span><span class="w"> </span><span class="p">{</span>
1716
+ <span class="w"> </span><span class="n">apex_plugin_info</span><span class="w"> </span><span class="o">*</span><span class="n">items</span><span class="p">;</span>
1717
+ <span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">count</span><span class="p">;</span>
1718
+ <span class="p">}</span><span class="w"> </span><span class="n">apex_plugin_catalog</span><span class="p">;</span>
1719
+ </pre>
1720
+ </div>
1721
+
1722
+ <h3 id="fetch-available-plugins">
1723
+ Fetch available&nbsp;plugins
1724
+ </h3>
1725
+
1726
+ <div class="highlight">
1727
+ <pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;apex/plugins.h&gt;</span>
1728
+
1729
+ <span class="n">apex_plugin_catalog</span><span class="w"> </span><span class="o">*</span><span class="n">catalog</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_plugin_catalog_fetch_default</span><span class="p">();</span>
1730
+ <span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">catalog</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
1731
+ <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">size_t</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">catalog</span><span class="o">-&gt;</span><span class="n">count</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
1732
+ <span class="w"> </span><span class="n">apex_plugin_info</span><span class="w"> </span><span class="o">*</span><span class="n">p</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">catalog</span><span class="o">-&gt;</span><span class="n">items</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
1733
+ <span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;%s - %s (%s)</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">p</span><span class="o">-&gt;</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">p</span><span class="o">-&gt;</span><span class="n">title</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">p</span><span class="o">-&gt;</span><span class="n">title</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">p</span><span class="o">-&gt;</span><span class="n">repo</span><span class="p">);</span>
1734
+ <span class="w"> </span><span class="p">}</span>
1735
+ <span class="w"> </span><span class="n">apex_plugin_catalog_free</span><span class="p">(</span><span class="n">catalog</span><span class="p">);</span>
1736
+ <span class="p">}</span>
1737
+ </pre>
1738
+ </div>
1739
+
1740
+ <p>
1741
+ The default catalog URL is <code>APEX_PLUGIN_DIRECTORY_URL</code> (ApexMarkdown/apex-plugins on GitHub).
1742
+ </p>
1743
+
1744
+ <h3 id="list-installed-plugins">
1745
+ List installed&nbsp;plugins
1746
+ </h3>
1747
+
1748
+ <p>
1749
+ Uses the same discovery order as runtime plugin loading (project <code>.apex/plugins</code>, then user-global <code>~/.config/apex/plugins</code>):
1750
+ </p>
1751
+
1752
+ <div class="highlight">
1753
+ <pre><span></span><span class="n">apex_plugin_discovery_options</span><span class="w"> </span><span class="n">opts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
1754
+ <span class="w"> </span><span class="p">.</span><span class="n">base_directory</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;/path/to/document&quot;</span><span class="p">,</span>
1755
+ <span class="w"> </span><span class="p">.</span><span class="n">include_project</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">,</span>
1756
+ <span class="w"> </span><span class="p">.</span><span class="n">include_user_global</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">,</span>
1757
+ <span class="p">};</span>
1758
+ <span class="n">apex_plugin_catalog</span><span class="w"> </span><span class="o">*</span><span class="n">installed</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_plugins_list_installed</span><span class="p">(</span><span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1759
+ </pre>
1760
+ </div>
1761
+
1762
+ <h3 id="install-and-uninstall">
1763
+ Install and&nbsp;uninstall
1764
+ </h3>
1765
+
1766
+ <p>
1767
+ Installs into the user-global plugins directory. Requires <code>git</code> and <code>curl</code> on PATH (same as the CLI).
1768
+ </p>
1769
+
1770
+ <div class="highlight">
1771
+ <pre><span></span><span class="n">apex_plugin_install_options</span><span class="w"> </span><span class="n">install_opts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
1772
+ <span class="w"> </span><span class="p">.</span><span class="n">allow_untrusted_repo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">false</span><span class="p">,</span>
1773
+ <span class="w"> </span><span class="p">.</span><span class="n">run_post_install</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">,</span>
1774
+ <span class="p">};</span>
1775
+ <span class="kt">char</span><span class="w"> </span><span class="n">err</span><span class="p">[</span><span class="mi">512</span><span class="p">];</span>
1776
+ <span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">apex_plugin_install</span><span class="p">(</span><span class="s">&quot;kbd&quot;</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">install_opts</span><span class="p">,</span><span class="w"> </span><span class="n">err</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">err</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
1777
+ <span class="w"> </span><span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Install failed: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">err</span><span class="p">);</span>
1778
+ <span class="p">}</span>
1779
+
1780
+ <span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">apex_plugin_uninstall</span><span class="p">(</span><span class="s">&quot;kbd&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">err</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">err</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
1781
+ <span class="w"> </span><span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Uninstall failed: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">err</span><span class="p">);</span>
1365
1782
  <span class="p">}</span>
1366
- </code></pre>
1783
+ </pre>
1784
+ </div>
1785
+
1786
+ <p>
1787
+ Set <code>allow_untrusted_repo</code> to <code>true</code> when installing from a Git URL or <code>user/repo</code> shorthand instead of a directory id.
1788
+ </p>
1789
+
1790
+ <h3 id="enable-plugins-during-conversion">
1791
+ Enable plugins during&nbsp;conversion
1792
+ </h3>
1793
+
1794
+ <div class="highlight">
1795
+ <pre><span></span><span class="n">apex_options</span><span class="w"> </span><span class="n">opts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_options_for_mode</span><span class="p">(</span><span class="n">APEX_MODE_UNIFIED</span><span class="p">);</span>
1796
+ <span class="n">opts</span><span class="p">.</span><span class="n">enable_plugins</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span>
1797
+ <span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">len</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1798
+ </pre>
1799
+ </div>
1367
1800
 
1368
1801
  <h2 id="compiling-and-linking">
1369
- Compiling and Linking
1802
+ Compiling and&nbsp;Linking
1370
1803
  </h2>
1371
1804
 
1372
1805
  <h3 id="with-cmake">
1373
- With CMake
1806
+ With&nbsp;CMake
1374
1807
  </h3>
1375
1808
 
1376
- <pre><code class="highlight language-cmake"><span class="c1"># In your CMakeLists.txt</span>
1377
- <span class="nb">find_package</span><span class="p">(</span>apex REQUIRED<span class="p">)</span>
1378
- <span class="nb">target_link_libraries</span><span class="p">(</span>your_app apex<span class="p">)</span>
1379
- </code></pre>
1809
+ <div class="highlight">
1810
+ <pre><span></span><span class="c"># In your CMakeLists.txt</span>
1811
+ <span class="nb">find_package</span><span class="p">(</span><span class="s">apex</span><span class="w"> </span><span class="s">REQUIRED</span><span class="p">)</span>
1812
+ <span class="nb">target_link_libraries</span><span class="p">(</span><span class="s">your_app</span><span class="w"> </span><span class="s">apex</span><span class="p">)</span>
1813
+ </pre>
1814
+ </div>
1380
1815
 
1381
1816
  <h3 id="manual-compilation">
1382
1817
  Manual Compilation
1383
1818
  </h3>
1384
1819
 
1385
- <pre><code class="highlight language-bash"><span class="c"># Compile</span>
1386
- gcc <span class="nt">-c</span> <span class="nt">-I</span>/usr/local/include your_app.c
1820
+ <div class="highlight">
1821
+ <pre><span></span><span class="c1"># Compile</span>
1822
+ gcc<span class="w"> </span>-c<span class="w"> </span>-I/usr/local/include<span class="w"> </span>your_app.c
1387
1823
 
1388
- <span class="c"># Link</span>
1389
- gcc your_app.o <span class="nt">-L</span>/usr/local/lib <span class="nt">-lapex</span> <span class="nt">-o</span> your_app
1824
+ <span class="c1"># Link</span>
1825
+ gcc<span class="w"> </span>your_app.o<span class="w"> </span>-L/usr/local/lib<span class="w"> </span>-lapex<span class="w"> </span>-o<span class="w"> </span>your_app
1390
1826
 
1391
- <span class="c"># Run (may need library path)</span>
1392
- <span class="nv">DYLD_LIBRARY_PATH</span><span class="o">=</span>/usr/local/lib ./your_app <span class="c"># macOS</span>
1393
- <span class="nv">LD_LIBRARY_PATH</span><span class="o">=</span>/usr/local/lib ./your_app <span class="c"># Linux</span>
1394
- </code></pre>
1827
+ <span class="c1"># Run (may need library path)</span>
1828
+ <span class="nv">DYLD_LIBRARY_PATH</span><span class="o">=</span>/usr/local/lib<span class="w"> </span>./your_app<span class="w"> </span><span class="c1"># macOS</span>
1829
+ <span class="nv">LD_LIBRARY_PATH</span><span class="o">=</span>/usr/local/lib<span class="w"> </span>./your_app<span class="w"> </span><span class="c1"># Linux</span>
1830
+ </pre>
1831
+ </div>
1395
1832
 
1396
1833
  <h3 id="static-linking">
1397
- Static Linking
1834
+ Static&nbsp;Linking
1398
1835
  </h3>
1399
1836
 
1400
- <pre><code class="highlight language-bash">gcc your_app.c <span class="nt">-I</span>/usr/local/include <span class="nt">-L</span>/usr/local/lib <span class="nt">-lapex</span> <span class="nt">-static</span> <span class="nt">-o</span> your_app
1401
- </code></pre>
1837
+ <div class="highlight">
1838
+ <pre><span></span>gcc<span class="w"> </span>your_app.c<span class="w"> </span>-I/usr/local/include<span class="w"> </span>-L/usr/local/lib<span class="w"> </span>-lapex<span class="w"> </span>-static<span class="w"> </span>-o<span class="w"> </span>your_app
1839
+ </pre>
1840
+ </div>
1402
1841
 
1403
1842
  <h2 id="thread-safety">
1404
- Thread Safety
1843
+ Thread&nbsp;Safety
1405
1844
  </h2>
1406
1845
 
1407
1846
  <p>
@@ -1425,21 +1864,23 @@ gcc your_app.o <span class="nt">-L</span>/usr/local/lib <span class="nt">-lapex<
1425
1864
  </ol>
1426
1865
 
1427
1866
  <p>
1428
- <strong> Example:</strong>
1867
+ <strong>Example:</strong>
1429
1868
  </p>
1430
1869
 
1431
- <pre><code class="highlight language-c"> <span class="n">Thread</span><span class="o">-</span><span class="n">safe</span><span class="o">:</span> <span class="n">each</span> <span class="kr">thread</span> <span class="n">has</span> <span class="n">its</span> <span class="n">own</span> <span class="n">options</span>
1432
- <span class="kt">void</span> <span class="o">*</span><span class="nf">thread_func</span><span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="n">arg</span><span class="p">)</span> <span class="p">{</span>
1433
- <span class="n">apex_options</span> <span class="n">opts</span> <span class="o">=</span> <span class="n">apex_options_default</span><span class="p">();</span>
1434
- <span class="kt">char</span> <span class="o">*</span><span class="n">html</span> <span class="o">=</span> <span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span> <span class="n">len</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1435
- <span class="c1">// Use html...</span>
1436
- <span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
1437
- <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span>
1870
+ <div class="highlight">
1871
+ <pre><span></span><span class="c1">// Thread-safe: each thread has its own options</span>
1872
+ <span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="nf">thread_func</span><span class="p">(</span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">arg</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
1873
+ <span class="w"> </span><span class="n">apex_options</span><span class="w"> </span><span class="n">opts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_options_default</span><span class="p">();</span>
1874
+ <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">len</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1875
+ <span class="w"> </span><span class="c1">// Use html...</span>
1876
+ <span class="w"> </span><span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
1877
+ <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span>
1438
1878
  <span class="p">}</span>
1439
- </code></pre>
1879
+ </pre>
1880
+ </div>
1440
1881
 
1441
1882
  <h2 id="memory-management">
1442
- Memory Management
1883
+ Memory&nbsp;Management
1443
1884
  </h2>
1444
1885
 
1445
1886
  <ul>
@@ -1463,7 +1904,7 @@ gcc your_app.o <span class="nt">-L</span>/usr/local/lib <span class="nt">-lapex<
1463
1904
  </ul>
1464
1905
 
1465
1906
  <h2 id="error-handling">
1466
- Error Handling
1907
+ Error&nbsp;Handling
1467
1908
  </h2>
1468
1909
 
1469
1910
  <ul>
@@ -1499,54 +1940,58 @@ gcc your_app.o <span class="nt">-L</span>/usr/local/lib <span class="nt">-lapex<
1499
1940
  </ul>
1500
1941
 
1501
1942
  <p>
1502
- <strong> Example:</strong>
1943
+ <strong>Example:</strong>
1503
1944
  </p>
1504
1945
 
1505
- <pre><code class="highlight language-c"><span class="kt">char</span> <span class="o">*</span><span class="n">html</span> <span class="o">=</span> <span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span> <span class="n">len</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1506
- <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">html</span><span class="p">)</span> <span class="p">{</span>
1507
- <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Conversion failed</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
1508
- <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
1946
+ <div class="highlight">
1947
+ <pre><span></span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">len</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1948
+ <span class="k">if</span><span class="w"> </span><span class="o">&lt;!--</span><span class="n">IDX</span><span class="o">:</span><span class="n">idxref</span><span class="mi">-0</span><span class="o">--&gt;</span><span class="w"> </span><span class="p">{</span>
1949
+ <span class="w"> </span><span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Conversion failed</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
1950
+ <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
1509
1951
  <span class="p">}</span>
1510
- <span class="n">Use</span> <span class="n">html</span><span class="p">...</span>
1952
+ <span class="c1">// Use html...</span>
1511
1953
  <span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
1512
- </code></pre>
1954
+ </pre>
1955
+ </div>
1513
1956
 
1514
1957
  <h2 id="performance-tips">
1515
- Performance Tips
1958
+ Performance&nbsp;Tips
1516
1959
  </h2>
1517
1960
 
1518
1961
  <ol>
1519
1962
 
1520
1963
  <li>
1521
- <strong> Reuse options</strong>: Create <code>apex_options</code> once and reuse for multiple conversions
1964
+ <strong>Reuse options</strong>: Create <code>apex_options</code> once and reuse for multiple conversions
1522
1965
  </li>
1523
1966
 
1524
1967
  <li>
1525
- <strong> Provide accurate length</strong>: Avoid unnecessary <code>strlen()</code> calls
1968
+ <strong>Provide accurate length</strong>: Avoid unnecessary <code>strlen()</code> calls
1526
1969
  </li>
1527
1970
 
1528
1971
  <li>
1529
- <strong> Disable unused features</strong>: Turn off extensions you don’t need
1972
+ <strong>Disable unused features</strong>: Turn off extensions you don’t need
1530
1973
  </li>
1531
1974
 
1532
1975
  <li>
1533
- <strong> Batch processing</strong>: Process multiple documents in parallel (thread-safe)
1976
+ <strong>Batch processing</strong>: Process multiple documents in parallel (thread-safe)
1534
1977
  </li>
1535
1978
 
1536
1979
  </ol>
1537
1980
 
1538
1981
  <p>
1539
- <strong> Example:</strong>
1982
+ <strong>Example:</strong>
1540
1983
  </p>
1541
1984
 
1542
- <pre><code class="highlight language-c"> <span class="nl">Good:</span> <span class="n">reuse</span> <span class="n">options</span>
1543
- <span class="n">apex_options</span> <span class="n">opts</span> <span class="o">=</span> <span class="n">apex_options_default</span><span class="p">();</span>
1544
- <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">count</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
1545
- <span class="kt">char</span> <span class="o">*</span><span class="n">html</span> <span class="o">=</span> <span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">docs</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">lens</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1546
- <span class="c1">// Process...</span>
1547
- <span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
1985
+ <div class="highlight">
1986
+ <pre><span></span><span class="c1">// Good: reuse options</span>
1987
+ <span class="n">apex_options</span><span class="w"> </span><span class="n">opts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_options_default</span><span class="p">();</span>
1988
+ <span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">count</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
1989
+ <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">docs</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="n">lens</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1990
+ <span class="w"> </span><span class="c1">// Process...</span>
1991
+ <span class="w"> </span><span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
1548
1992
  <span class="p">}</span>
1549
- </code></pre>
1993
+ </pre>
1994
+ </div>
1550
1995
 
1551
1996
  <h2 id="related">
1552
1997
  Related
@@ -1555,19 +2000,48 @@ gcc your_app.o <span class="nt">-L</span>/usr/local/lib <span class="nt">-lapex<
1555
2000
  <ul>
1556
2001
 
1557
2002
  <li>
1558
- <a href="Xcode-Integration.html"> Xcode Integration</a> - Using Apex in Xcode projects
2003
+ <a href="Xcode-Integration.html">Xcode Integration</a> - Using Apex in Xcode projects
1559
2004
  </li>
1560
2005
 
1561
2006
  <li>
1562
- <a href="Modes.html"> Modes</a> - Understanding processor modes
2007
+ <a href="Modes.html">Modes</a> - Understanding processor modes
1563
2008
  </li>
1564
2009
 
1565
2010
  <li>
1566
- <a href="Header-IDs.html"> Header IDs</a> - Header ID generation options
2011
+ <a href="Header-IDs.html">Header IDs</a> - Header ID generation options
1567
2012
  </li>
1568
2013
 
1569
2014
  </ul>
1570
2015
 
2016
+ <h1 id="index-section">
2017
+ Index
2018
+ </h1>
2019
+
2020
+ <div class="index">
2021
+
2022
+ <dl>
2023
+
2024
+ <dt>
2025
+ H
2026
+ </dt>
2027
+
2028
+ <dd>
2029
+
2030
+ <ul>
2031
+
2032
+ <li>
2033
+
2034
+ html <a class="index-return" href="#idxref-0"><sup>[go]</sup></a>
2035
+ </li>
2036
+
2037
+ </ul>
2038
+
2039
+ </dd>
2040
+
2041
+ </dl>
2042
+
2043
+ </div>
2044
+
1571
2045
  <script>
1572
2046
  // Hamburger menu functionality
1573
2047
  (function() {