apex-ruby 1.0.17 → 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,23 +832,23 @@ 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="xcode-integration">
708
838
  Xcode Integration
709
839
  </h1>
710
- <nav class="page-toc" id="page-toc-top"><ul><li><a href="#xcode-integration">Xcode Integration</a><ul><li><a href="#production-readiness">Production Readiness</a></li><li><a href="#swift-package-manager-spm-recommended">Swift Package Manager (SPM) - Recommended</a><ul><li><a href="#adding-apex-via-spm">Adding Apex via SPM</a></li><li><a href="#using-apex-in-your-code">Using Apex in Your Code</a></li><li><a href="#platform-support">Platform Support</a></li><li><a href="#spm-benefits">SPM Benefits</a></li></ul></li><li><a href="#framework-build-alternative">Framework Build (Alternative)</a></li><li><a href="#adding-to-xcode-project">Adding to Xcode Project</a><ul><li><a href="#method-1-swift-package-manager-recommended">Method 1: Swift Package Manager (Recommended)</a></li><li><a href="#method-2-framework-reference">Method 2: Framework Reference</a></li><li><a href="#method-3-cmake-integration">Method 3: CMake Integration</a></li></ul></li><li><a href="#objective-c-wrapper">Objective-C Wrapper</a><ul><li><a href="#basic-usage">Basic Usage</a></li><li><a href="#api">API</a></li><li><a href="#convenience-methods">Convenience Methods</a><ul><li><a href="#standalone-html-documents">Standalone HTML Documents</a></li><li><a href="#pretty-printed-html">Pretty-Printed HTML</a></li><li><a href="#dictionary-based-options">Dictionary-Based Options</a></li><li><a href="#swift-friendly-convenience-method">Swift-Friendly Convenience Method</a></li><li><a href="#instance-methods">Instance Methods</a></li></ul></li></ul></li><li><a href="#mode-constants">Mode Constants</a></li><li><a href="#direct-c-api-usage">Direct C API Usage</a></li><li><a href="#integration-example">Integration Example</a><ul><li><a href="#adding-to-marked">Adding to Marked</a></li></ul></li><li><a href="#build-settings">Build Settings</a><ul><li><a href="#header-search-paths">Header Search Paths</a></li><li><a href="#framework-search-paths">Framework Search Paths</a></li><li><a href="#other-linker-flags">Other Linker Flags</a></li><li><a href="#swift-api-support">Swift API Support</a></li></ul></li><li><a href="#swift-integration">Swift Integration</a><ul><li><a href="#idiomatic-swift-api-recommended">Idiomatic Swift API (Recommended)</a></li><li><a href="#apexmode-enum">ApexMode Enum</a></li><li><a href="#apexoptions-struct">ApexOptions Struct</a></li><li><a href="#objective-c-bridge-alternative">Objective-C Bridge (Alternative)</a></li></ul></li><li><a href="#troubleshooting">Troubleshooting</a><ul><li><a href="#swift-package-manager-issues">Swift Package Manager Issues</a></li><li><a href="#framework-not-found">Framework Not Found</a></li><li><a href="#linker-errors">Linker Errors</a></li><li><a href="#runtime-errors">Runtime Errors</a></li></ul></li><li><a href="#performance">Performance</a></li><li><a href="#module-map">Module Map</a></li><li><a href="#comparison-of-integration-methods">Comparison of Integration Methods</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="#xcode-integration">Xcode Integration</a><ul><li><a href="#production-readiness">Production&nbsp;Readiness</a></li><li><a href="#swift-package-manager-spm-recommended">Swift Package Manager (SPM) -&nbsp;Recommended</a><ul><li><a href="#adding-apex-via-spm">Adding Apex&nbsp;via&nbsp;SPM</a></li><li><a href="#using-apex-in-your-code">Using Apex in&nbsp;Your&nbsp;Code</a></li><li><a href="#platform-support">Platform&nbsp;Support</a></li><li><a href="#spm-benefits">SPM&nbsp;Benefits</a></li></ul></li><li><a href="#framework-build-alternative">Framework Build&nbsp;(Alternative)</a></li><li><a href="#adding-to-xcode-project">Adding to Xcode&nbsp;Project</a><ul><li><a href="#method-1-swift-package-manager-recommended">Method 1: Swift Package Manager&nbsp;(Recommended)</a></li><li><a href="#method-2-framework-reference">Method 2: Framework&nbsp;Reference</a></li><li><a href="#method-3-cmake-integration">Method 3: CMake&nbsp;Integration</a></li></ul></li><li><a href="#objective-c-wrapper">Objective-C&nbsp;Wrapper</a><ul><li><a href="#basic-usage">Basic&nbsp;Usage</a></li><li><a href="#api">API</a></li><li><a href="#table-of-contents-outline-data">Table of Contents (outline&nbsp;data)</a></li><li><a href="#convenience-methods">Convenience&nbsp;Methods</a><ul><li><a href="#standalone-html-documents">Standalone HTML&nbsp;Documents</a></li><li><a href="#pretty-printed-html">Pretty-Printed&nbsp;HTML</a></li><li><a href="#dictionary-based-options">Dictionary-Based&nbsp;Options</a></li><li><a href="#swift-friendly-convenience-method">Swift-Friendly Convenience&nbsp;Method</a></li><li><a href="#instance-methods">Instance&nbsp;Methods</a></li></ul></li></ul></li><li><a href="#mode-constants">Mode&nbsp;Constants</a></li><li><a href="#direct-c-api-usage">Direct C&nbsp;API&nbsp;Usage</a></li><li><a href="#integration-example">Integration&nbsp;Example</a><ul><li><a href="#adding-to-marked">Adding&nbsp;to&nbsp;Marked</a></li></ul></li><li><a href="#build-settings">Build&nbsp;Settings</a><ul><li><a href="#header-search-paths">Header Search&nbsp;Paths</a></li><li><a href="#framework-search-paths">Framework Search&nbsp;Paths</a></li><li><a href="#other-linker-flags">Other Linker&nbsp;Flags</a></li><li><a href="#swift-api-support">Swift API&nbsp;Support</a></li></ul></li><li><a href="#swift-integration">Swift Integration</a><ul><li><a href="#idiomatic-swift-api-recommended">Idiomatic Swift API&nbsp;(Recommended)</a></li><li><a href="#apexmode-enum">ApexMode&nbsp;Enum</a></li><li><a href="#apexoptions-struct">ApexOptions&nbsp;Struct</a></li><li><a href="#apexoptions-vs-apexoptions">ApexOptions vs&nbsp;apex_options</a></li><li><a href="#objective-c-bridge-alternative">Objective-C Bridge&nbsp;(Alternative)</a></li></ul></li><li><a href="#plugin-catalog-and-installation">Plugin Catalog and&nbsp;Installation</a><ul><li><a href="#swift-api-recommended">Swift API&nbsp;(recommended)</a></li><li><a href="#objective-c-api">Objective-C&nbsp;API</a></li><li><a href="#c-api">C&nbsp;API</a></li></ul></li><li><a href="#troubleshooting">Troubleshooting</a><ul><li><a href="#swift-package-manager-issues">Swift Package Manager&nbsp;Issues</a></li><li><a href="#framework-not-found">Framework&nbsp;Not&nbsp;Found</a></li><li><a href="#linker-errors">Linker&nbsp;Errors</a></li><li><a href="#runtime-errors">Runtime&nbsp;Errors</a></li></ul></li><li><a href="#performance">Performance</a></li><li><a href="#module-map">Module&nbsp;Map</a></li><li><a href="#comparison-of-integration-methods">Comparison of Integration&nbsp;Methods</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
  This guide covers integrating Apex into Xcode projects for macOS and iOS applications.
714
844
  </p>
715
845
 
716
846
  <h2 id="production-readiness">
717
- Production Readiness
847
+ Production&nbsp;Readiness
718
848
  </h2>
719
849
 
720
850
  <p>
721
- <strong> Important:</strong> Apex is currently in a pre-1.0 development stage. The API and implementation are still evolving, and breaking changes may occur between versions. Apex should only be used for testing and development purposes at this time.
851
+ <strong>Important:</strong> Apex is currently in a pre-1.0 development stage. The API and implementation are still evolving, and breaking changes may occur between versions. Apex should only be used for testing and development purposes at this time.
722
852
  </p>
723
853
 
724
854
  <p>
@@ -728,15 +858,15 @@ ol ul {
728
858
  <ul>
729
859
 
730
860
  <li>
731
- <strong> Major versions</strong> (1.0, 2.0, etc.) may include breaking API changes
861
+ <strong>Major versions</strong> (1.0, 2.0, etc.) may include breaking API changes
732
862
  </li>
733
863
 
734
864
  <li>
735
- <strong> Minor versions</strong> (1.1, 1.2, etc.) will add new features while maintaining backward compatibility
865
+ <strong>Minor versions</strong> (1.1, 1.2, etc.) will add new features while maintaining backward compatibility
736
866
  </li>
737
867
 
738
868
  <li>
739
- <strong> Patch versions</strong> (1.0.1, 1.0.2, etc.) will only include bug fixes and will maintain full backward compatibility
869
+ <strong>Patch versions</strong> (1.0.1, 1.0.2, etc.) will only include bug fixes and will maintain full backward compatibility
740
870
  </li>
741
871
 
742
872
  </ul>
@@ -746,7 +876,7 @@ ol ul {
746
876
  </p>
747
877
 
748
878
  <h2 id="swift-package-manager-spm-recommended">
749
- Swift Package Manager (SPM) - Recommended
879
+ Swift Package Manager (SPM) -&nbsp;Recommended
750
880
  </h2>
751
881
 
752
882
  <p>
@@ -754,7 +884,7 @@ ol ul {
754
884
  </p>
755
885
 
756
886
  <h3 id="adding-apex-via-spm">
757
- Adding Apex via SPM
887
+ Adding Apex&nbsp;via&nbsp;SPM
758
888
  </h3>
759
889
 
760
890
  <ol>
@@ -798,47 +928,49 @@ ol ul {
798
928
  </ol>
799
929
 
800
930
  <h3 id="using-apex-in-your-code">
801
- Using Apex in Your Code
931
+ Using Apex in&nbsp;Your&nbsp;Code
802
932
  </h3>
803
933
 
804
934
  <p>
805
935
  Once added via SPM, simply import and use:
806
936
  </p>
807
937
 
808
- <pre><code class="highlight language-swift"><span class="kd">import</span> <span class="kt">Apex</span>
938
+ <div class="highlight">
939
+ <pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Apex</span>
809
940
 
810
- <span class="kt">Basic</span> <span class="n">usage</span>
811
- <span class="k">let</span> <span class="nv">markdown</span> <span class="o">=</span> <span class="s">"# Hello World"</span>
812
- <span class="k">let</span> <span class="nv">html</span> <span class="o">=</span> <span class="n">markdown</span><span class="o">.</span><span class="nf">apexHTML</span><span class="p">()</span>
941
+ <span class="c1">// Basic usage</span>
942
+ <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 World&quot;</span>
943
+ <span class="kd">let</span><span class="w"> </span><span class="nv">html</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">apexHTML</span><span class="p">()</span>
813
944
 
814
- <span class="kt">With</span> <span class="n">mode</span>
815
- <span class="k">let</span> <span class="nv">html2</span> <span class="o">=</span> <span class="n">markdown</span><span class="o">.</span><span class="nf">apexHTML</span><span class="p">(</span><span class="nv">mode</span><span class="p">:</span> <span class="o">.</span><span class="n">gfm</span><span class="p">)</span>
945
+ <span class="c1">// With mode</span>
946
+ <span class="kd">let</span><span class="w"> </span><span class="nv">html2</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">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">gfm</span><span class="p">)</span>
816
947
 
817
- <span class="kt">With</span> <span class="n">options</span>
818
- <span class="k">var</span> <span class="nv">options</span> <span class="o">=</span> <span class="kt">ApexOptions</span><span class="p">()</span>
819
- <span class="n">options</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="kc">true</span>
820
- <span class="n">options</span><span class="o">.</span><span class="n">generateHeaderIDs</span> <span class="o">=</span> <span class="kc">true</span>
821
- <span class="k">let</span> <span class="nv">html3</span> <span class="o">=</span> <span class="n">markdown</span><span class="o">.</span><span class="nf">apexHTML</span><span class="p">(</span><span class="nv">mode</span><span class="p">:</span> <span class="o">.</span><span class="n">unified</span><span class="p">,</span> <span class="nv">options</span><span class="p">:</span> <span class="n">options</span><span class="p">)</span>
822
- </code></pre>
948
+ <span class="c1">// With options</span>
949
+ <span class="kd">var</span><span class="w"> </span><span class="nv">options</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">ApexOptions</span><span class="p">()</span>
950
+ <span class="n">options</span><span class="p">.</span><span class="n">pretty</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
951
+ <span class="n">options</span><span class="p">.</span><span class="n">generateHeaderIDs</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
952
+ <span class="kd">let</span><span class="w"> </span><span class="nv">html3</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">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">,</span><span class="w"> </span><span class="n">options</span><span class="p">:</span><span class="w"> </span><span class="n">options</span><span class="p">)</span>
953
+ </pre>
954
+ </div>
823
955
 
824
956
  <h3 id="platform-support">
825
- Platform Support
957
+ Platform&nbsp;Support
826
958
  </h3>
827
959
 
828
960
  <ul>
829
961
 
830
962
  <li>
831
- <strong> macOS</strong>: 10.13+ (High Sierra)
963
+ <strong>macOS</strong>: 10.13+ (High Sierra)
832
964
  </li>
833
965
 
834
966
  <li>
835
- <strong> iOS</strong>: 11.0+
967
+ <strong>iOS</strong>: 11.0+
836
968
  </li>
837
969
 
838
970
  </ul>
839
971
 
840
972
  <h3 id="spm-benefits">
841
- SPM Benefits
973
+ SPM&nbsp;Benefits
842
974
  </h3>
843
975
 
844
976
  <ul>
@@ -866,29 +998,31 @@ ol ul {
866
998
  </ul>
867
999
 
868
1000
  <h2 id="framework-build-alternative">
869
- Framework Build (Alternative)
1001
+ Framework Build&nbsp;(Alternative)
870
1002
  </h2>
871
1003
 
872
1004
  <p>
873
1005
  Apex can also be built as a framework for manual integration:
874
1006
  </p>
875
1007
 
876
- <pre><code class="highlight language-bash"><span class="nb">cd </span>apex
877
- <span class="nb">mkdir </span>build <span class="o">&amp;&amp;</span> <span class="nb">cd </span>build
878
- cmake <span class="nt">-DBUILD_FRAMEWORK</span><span class="o">=</span>ON ..
1008
+ <div class="highlight">
1009
+ <pre><span></span><span class="nb">cd</span><span class="w"> </span>apex
1010
+ mkdir<span class="w"> </span>build<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="nb">cd</span><span class="w"> </span>build
1011
+ cmake<span class="w"> </span>-DBUILD_FRAMEWORK<span class="o">=</span>ON<span class="w"> </span>..
879
1012
  make
880
- </code></pre>
1013
+ </pre>
1014
+ </div>
881
1015
 
882
1016
  <p>
883
1017
  The framework will be at <code>build/Apex.framework</code>.
884
1018
  </p>
885
1019
 
886
1020
  <h2 id="adding-to-xcode-project">
887
- Adding to Xcode Project
1021
+ Adding to Xcode&nbsp;Project
888
1022
  </h2>
889
1023
 
890
1024
  <h3 id="method-1-swift-package-manager-recommended">
891
- Method 1: Swift Package Manager (Recommended)
1025
+ Method 1: Swift Package Manager&nbsp;(Recommended)
892
1026
  </h3>
893
1027
 
894
1028
  <p>
@@ -896,7 +1030,7 @@ make
896
1030
  </p>
897
1031
 
898
1032
  <h3 id="method-2-framework-reference">
899
- Method 2: Framework Reference
1033
+ Method 2: Framework&nbsp;Reference
900
1034
  </h3>
901
1035
 
902
1036
  <ol>
@@ -916,19 +1050,21 @@ make
916
1050
  </ol>
917
1051
 
918
1052
  <h3 id="method-3-cmake-integration">
919
- Method 3: CMake Integration
1053
+ Method 3: CMake&nbsp;Integration
920
1054
  </h3>
921
1055
 
922
1056
  <p>
923
1057
  If your project uses CMake:
924
1058
  </p>
925
1059
 
926
- <pre><code class="highlight language-cmake"><span class="nb">add_subdirectory</span><span class="p">(</span>apex<span class="p">)</span>
927
- <span class="nb">target_link_libraries</span><span class="p">(</span>your_app Apex<span class="p">)</span>
928
- </code></pre>
1060
+ <div class="highlight">
1061
+ <pre><span></span><span class="nb">add_subdirectory</span><span class="p">(</span><span class="s">apex</span><span class="p">)</span>
1062
+ <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>
1063
+ </pre>
1064
+ </div>
929
1065
 
930
1066
  <h2 id="objective-c-wrapper">
931
- Objective-C Wrapper
1067
+ Objective-C&nbsp;Wrapper
932
1068
  </h2>
933
1069
 
934
1070
  <p>
@@ -936,7 +1072,7 @@ make
936
1072
  </p>
937
1073
 
938
1074
  <p>
939
- <strong> Files:</strong>
1075
+ <strong>Files:</strong>
940
1076
  </p>
941
1077
 
942
1078
  <ul>
@@ -952,76 +1088,89 @@ make
952
1088
  </ul>
953
1089
 
954
1090
  <h3 id="basic-usage">
955
- Basic Usage
1091
+ Basic&nbsp;Usage
956
1092
  </h3>
957
1093
 
958
- <pre><code class="highlight language-objective-c"><span class="cp">#import "NSString+Apex.h"
959
- </span>
960
- <span class="n">Convert</span> <span class="n">with</span> <span class="k">default</span> <span class="n">unified</span> <span class="n">mode</span>
961
- <span class="n">NSString</span> <span class="o">*</span><span class="n">html</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdownText</span><span class="p">];</span>
962
-
963
- <span class="n">Convert</span> <span class="n">with</span> <span class="n">specific</span> <span class="n">mode</span> <span class="n">using</span> <span class="n">constants</span> <span class="p">(</span><span class="n">recommended</span><span class="p">)</span>
964
- <span class="n">NSString</span> <span class="o">*</span><span class="n">gfmHtml</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdownText</span> <span class="nf">mode</span><span class="p">:</span><span class="n">ApexModeGFM</span><span class="p">];</span>
965
- <span class="n">NSString</span> <span class="o">*</span><span class="n">mmdHtml</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdownText</span> <span class="nf">mode</span><span class="p">:</span><span class="n">ApexModeMultiMarkdown</span><span class="p">];</span>
966
- <span class="n">NSString</span> <span class="o">*</span><span class="n">kramdownHtml</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdownText</span> <span class="nf">mode</span><span class="p">:</span><span class="n">ApexModeKramdown</span><span class="p">];</span>
967
- <span class="n">NSString</span> <span class="o">*</span><span class="n">commonmarkHtml</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdownText</span> <span class="nf">mode</span><span class="p">:</span><span class="n">ApexModeCommonmark</span><span class="p">];</span>
968
- <span class="n">NSString</span> <span class="o">*</span><span class="n">unifiedHtml</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdownText</span> <span class="nf">mode</span><span class="p">:</span><span class="n">ApexModeUnified</span><span class="p">];</span>
969
-
970
- <span class="n">String</span> <span class="n">literals</span> <span class="n">also</span> <span class="n">work</span> <span class="p">(</span><span class="k">for</span> <span class="n">backward</span> <span class="n">compatibility</span><span class="p">)</span>
971
- <span class="n">NSString</span> <span class="o">*</span><span class="n">gfmHtml2</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdownText</span> <span class="nf">mode</span><span class="p">:</span><span class="s">@"gfm"</span><span class="p">];</span>
972
- <span class="n">NSString</span> <span class="o">*</span><span class="n">mmdHtml2</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdownText</span> <span class="nf">mode</span><span class="p">:</span><span class="s">@"multimarkdown"</span><span class="p">];</span>
973
- </code></pre>
1094
+ <div class="highlight">
1095
+ <pre><span></span><span class="cp">#import &quot;NSString+Apex.h&quot;</span>
1096
+
1097
+ <span class="c1">// Convert with default unified mode</span>
1098
+ <span class="bp">NSString</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="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="p">];</span>
1099
+
1100
+ <span class="c1">// Convert with specific mode using constants (recommended)</span>
1101
+ <span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">gfmHtml</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="n">ApexModeGFM</span><span class="p">];</span>
1102
+ <span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">mmdHtml</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="n">ApexModeMultiMarkdown</span><span class="p">];</span>
1103
+ <span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">kramdownHtml</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="n">ApexModeKramdown</span><span class="p">];</span>
1104
+ <span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">commonmarkHtml</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="n">ApexModeCommonmark</span><span class="p">];</span>
1105
+ <span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">unifiedHtml</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="n">ApexModeUnified</span><span class="p">];</span>
1106
+
1107
+ <span class="c1">// String literals also work (for backward compatibility)</span>
1108
+ <span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">gfmHtml2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="s">@&quot;gfm&quot;</span><span class="p">];</span>
1109
+ <span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">mmdHtml2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="s">@&quot;multimarkdown&quot;</span><span class="p">];</span>
1110
+ </pre>
1111
+ </div>
974
1112
 
975
1113
  <h3 id="api">
976
1114
  API
977
1115
  </h3>
978
1116
 
979
- <pre><code class="highlight language-objective-c"> <span class="n">Mode</span> <span class="n">constants</span>
980
- <span class="k">extern</span> <span class="n">NSString</span> <span class="o">*</span> <span class="k">const</span> <span class="n">ApexModeCommonmark</span><span class="p">;</span>
981
- <span class="k">extern</span> <span class="n">NSString</span> <span class="o">*</span> <span class="k">const</span> <span class="n">ApexModeGFM</span><span class="p">;</span>
982
- <span class="k">extern</span> <span class="n">NSString</span> <span class="o">*</span> <span class="k">const</span> <span class="n">ApexModeMultiMarkdown</span><span class="p">;</span>
983
- <span class="k">extern</span> <span class="n">NSString</span> <span class="o">*</span> <span class="k">const</span> <span class="n">ApexModeKramdown</span><span class="p">;</span>
984
- <span class="k">extern</span> <span class="n">NSString</span> <span class="o">*</span> <span class="k">const</span> <span class="n">ApexModeUnified</span><span class="p">;</span>
985
-
986
- <span class="k">@interface</span> <span class="nc">NSString</span> <span class="p">(</span><span class="nl">Apex</span><span class="p">)</span>
987
-
988
- <span class="n">Basic</span> <span class="n">conversion</span> <span class="n">methods</span>
989
- <span class="k">+</span> <span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">markdown</span><span class="p">;</span>
990
- <span class="k">+</span> <span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">markdown</span> <span class="nf">mode</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">mode</span><span class="p">;</span>
991
-
992
- <span class="n">Standalone</span> <span class="n">HTML</span> <span class="n">document</span> <span class="n">generation</span>
993
- <span class="k">+</span> <span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">markdown</span>
994
- <span class="nf">mode</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
995
- <span class="nf">standalone</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">standalone</span>
996
- <span class="nf">stylesheet</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span> <span class="n">_Nullable</span><span class="p">)</span><span class="nv">stylesheetPath</span>
997
- <span class="nf">title</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span> <span class="n">_Nullable</span><span class="p">)</span><span class="nv">title</span><span class="p">;</span>
998
-
999
- <span class="n">Pretty</span><span class="k">-</span><span class="n">printed</span> <span class="n">HTML</span> <span class="n">output</span>
1000
- <span class="k">+</span> <span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">markdown</span>
1001
- <span class="nf">mode</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
1002
- <span class="nf">pretty</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">pretty</span><span class="p">;</span>
1003
-
1004
- <span class="n">Dictionary</span><span class="k">-</span><span class="n">based</span> <span class="n">options</span> <span class="n">configuration</span>
1005
- <span class="k">+</span> <span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">markdown</span>
1006
- <span class="nf">mode</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
1007
- <span class="nf">options</span><span class="p">:(</span><span class="n">NSDictionary</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">&gt;</span> <span class="o">*</span> <span class="n">_Nullable</span><span class="p">)</span><span class="nv">options</span><span class="p">;</span>
1008
-
1009
- <span class="n">Swift</span><span class="k">-</span><span class="n">friendly</span> <span class="n">convenience</span> <span class="n">method</span> <span class="n">with</span> <span class="n">common</span> <span class="n">options</span>
1010
- <span class="k">+</span> <span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">markdown</span>
1011
- <span class="nf">mode</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
1012
- <span class="nf">generateHeaderIDs</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">generateHeaderIDs</span>
1013
- <span class="nf">hardBreaks</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">hardBreaks</span>
1014
- <span class="nf">pretty</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">pretty</span><span class="p">;</span>
1015
-
1016
- <span class="n">Instance</span> <span class="n">methods</span> <span class="k">for</span> <span class="n">convenient</span> <span class="n">usage</span>
1017
- <span class="k">-</span> <span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="n">apexHTML</span><span class="p">;</span>
1018
- <span class="k">-</span> <span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nf">apexHTMLWithMode</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">mode</span><span class="p">;</span>
1117
+ <div class="highlight">
1118
+ <pre><span></span><span class="c1">// Mode constants</span>
1119
+ <span class="k">extern</span><span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">ApexModeCommonmark</span><span class="p">;</span>
1120
+ <span class="k">extern</span><span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">ApexModeGFM</span><span class="p">;</span>
1121
+ <span class="k">extern</span><span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">ApexModeMultiMarkdown</span><span class="p">;</span>
1122
+ <span class="k">extern</span><span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">ApexModeKramdown</span><span class="p">;</span>
1123
+ <span class="k">extern</span><span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">ApexModeUnified</span><span class="p">;</span>
1124
+
1125
+ <span class="k">@interface</span> <span class="bp">NSString</span> <span class="nl">(Apex)</span>
1126
+
1127
+ <span class="c1">// Basic conversion methods</span>
1128
+ <span class="p">+</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span><span class="p">;</span>
1129
+ <span class="p">+</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span><span class="w"> </span><span class="nf">mode:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span><span class="p">;</span>
1130
+
1131
+ <span class="c1">// Standalone HTML document generation</span>
1132
+ <span class="p">+</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span>
1133
+ <span class="w"> </span><span class="nl">mode</span><span class="p">:(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
1134
+ <span class="w"> </span><span class="nl">standalone</span><span class="p">:(</span><span class="kt">BOOL</span><span class="p">)</span><span class="nv">standalone</span>
1135
+ <span class="w"> </span><span class="nl">stylesheet</span><span class="p">:(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">_Nullable</span><span class="p">)</span><span class="nv">stylesheetPath</span>
1136
+ <span class="w"> </span><span class="nl">title</span><span class="p">:(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">_Nullable</span><span class="p">)</span><span class="nv">title</span><span class="p">;</span>
1137
+
1138
+ <span class="c1">// Pretty-printed HTML output</span>
1139
+ <span class="p">+</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span>
1140
+ <span class="w"> </span><span class="nl">mode</span><span class="p">:(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
1141
+ <span class="w"> </span><span class="nl">pretty</span><span class="p">:(</span><span class="kt">BOOL</span><span class="p">)</span><span class="nv">pretty</span><span class="p">;</span>
1142
+
1143
+ <span class="c1">// Dictionary-based options configuration</span>
1144
+ <span class="p">+</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span>
1145
+ <span class="w"> </span><span class="nl">mode</span><span class="p">:(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
1146
+ <span class="w"> </span><span class="nl">options</span><span class="p">:(</span><span class="bp">NSDictionary</span><span class="o">&lt;</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">id</span><span class="o">&gt;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">_Nullable</span><span class="p">)</span><span class="nv">options</span><span class="p">;</span>
1147
+
1148
+ <span class="c1">// Swift-friendly convenience method with common options</span>
1149
+ <span class="p">+</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span>
1150
+ <span class="w"> </span><span class="nl">mode</span><span class="p">:(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
1151
+ <span class="w"> </span><span class="nl">generateHeaderIDs</span><span class="p">:(</span><span class="kt">BOOL</span><span class="p">)</span><span class="nv">generateHeaderIDs</span>
1152
+ <span class="w"> </span><span class="nl">hardBreaks</span><span class="p">:(</span><span class="kt">BOOL</span><span class="p">)</span><span class="nv">hardBreaks</span>
1153
+ <span class="w"> </span><span class="nl">pretty</span><span class="p">:(</span><span class="kt">BOOL</span><span class="p">)</span><span class="nv">pretty</span><span class="p">;</span>
1154
+
1155
+ <span class="c1">// Instance methods for convenient usage</span>
1156
+ <span class="p">-</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">apexHTML</span><span class="p">;</span>
1157
+ <span class="p">-</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">apexHTMLWithMode:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span><span class="p">;</span>
1158
+
1159
+ <span class="c1">// Structured table of contents (flat outline entries)</span>
1160
+ <span class="p">+</span> <span class="p">(</span><span class="bp">NSArray</span><span class="o">&lt;</span><span class="bp">NSDictionary</span><span class="o">&lt;</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">id</span><span class="o">&gt;</span><span class="w"> </span><span class="o">*&gt;</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">tableOfContentsWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span><span class="p">;</span>
1161
+ <span class="p">+</span> <span class="p">(</span><span class="bp">NSArray</span><span class="o">&lt;</span><span class="bp">NSDictionary</span><span class="o">&lt;</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">id</span><span class="o">&gt;</span><span class="w"> </span><span class="o">*&gt;</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">tableOfContentsWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span>
1162
+ <span class="w"> </span><span class="nl">mode</span><span class="p">:(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
1163
+ <span class="w"> </span><span class="nl">options</span><span class="p">:(</span><span class="bp">NSDictionary</span><span class="o">&lt;</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">id</span><span class="o">&gt;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">_Nullable</span><span class="p">)</span><span class="nv">options</span><span class="p">;</span>
1164
+ <span class="p">-</span> <span class="p">(</span><span class="bp">NSArray</span><span class="o">&lt;</span><span class="bp">NSDictionary</span><span class="o">&lt;</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">id</span><span class="o">&gt;</span><span class="w"> </span><span class="o">*&gt;</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">apexTableOfContents</span><span class="p">;</span>
1165
+ <span class="p">-</span> <span class="p">(</span><span class="bp">NSArray</span><span class="o">&lt;</span><span class="bp">NSDictionary</span><span class="o">&lt;</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">id</span><span class="o">&gt;</span><span class="w"> </span><span class="o">*&gt;</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">apexTableOfContentsWithMode:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
1166
+ <span class="w"> </span><span class="nl">options</span><span class="p">:(</span><span class="bp">NSDictionary</span><span class="o">&lt;</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">id</span><span class="o">&gt;</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">_Nullable</span><span class="p">)</span><span class="nv">options</span><span class="p">;</span>
1019
1167
 
1020
1168
  <span class="k">@end</span>
1021
- </code></pre>
1169
+ </pre>
1170
+ </div>
1022
1171
 
1023
1172
  <p>
1024
- <strong> Parameters:</strong>
1173
+ <strong>Parameters:</strong>
1025
1174
  </p>
1026
1175
 
1027
1176
  <ul>
@@ -1061,15 +1210,142 @@ make
1061
1210
  </ul>
1062
1211
 
1063
1212
  <p>
1064
- <strong> Returns:</strong> HTML string (autoreleased)
1213
+ <strong>Returns:</strong> HTML string (autoreleased)
1214
+ </p>
1215
+
1216
+ <p>
1217
+ <strong>Note:</strong> Using the <code>ApexMode*</code> constants is recommended to avoid typos and provides autocomplete support in Xcode. String literals are still supported for backward compatibility.
1218
+ </p>
1219
+
1220
+ <h3 id="table-of-contents-outline-data">
1221
+ Table of Contents (outline&nbsp;data)
1222
+ </h3>
1223
+
1224
+ <p>
1225
+ For collapsible section UIs, use the structured TOC helpers instead of parsing HTML. Each entry is a dictionary:
1226
+ </p>
1227
+
1228
+ <table>
1229
+
1230
+ <thead>
1231
+
1232
+ <tr>
1233
+
1234
+ <th>
1235
+ Key
1236
+ </th>
1237
+
1238
+ <th>
1239
+ Type
1240
+ </th>
1241
+
1242
+ <th>
1243
+ Meaning
1244
+ </th>
1245
+
1246
+ </tr>
1247
+
1248
+ </thead>
1249
+
1250
+ <tbody>
1251
+
1252
+ <tr>
1253
+
1254
+ <td>
1255
+ <code>level</code>
1256
+ </td>
1257
+
1258
+ <td>
1259
+ <code>NSNumber</code>
1260
+ </td>
1261
+
1262
+ <td>
1263
+ Heading level 1–6
1264
+ </td>
1265
+
1266
+ </tr>
1267
+ <tr>
1268
+
1269
+ <td>
1270
+ <code>text</code>
1271
+ </td>
1272
+
1273
+ <td>
1274
+ <code>NSString</code>
1275
+ </td>
1276
+
1277
+ <td>
1278
+ Display title
1279
+ </td>
1280
+
1281
+ </tr>
1282
+ <tr>
1283
+
1284
+ <td>
1285
+ <code>id</code>
1286
+ </td>
1287
+
1288
+ <td>
1289
+ <code>NSString</code>
1290
+ </td>
1291
+
1292
+ <td>
1293
+ Fragment id (same rules as <code>--id-format</code> / manual IDs)
1294
+ </td>
1295
+
1296
+ </tr>
1297
+ </tbody>
1298
+
1299
+ </table>
1300
+
1301
+ <p>
1302
+ Optional <code>options</code> keys for TOC extraction:
1065
1303
  </p>
1066
1304
 
1305
+ <ul>
1306
+
1307
+ <li>
1308
+ <code>idFormat</code> — <code>@&quot;gfm&quot;</code>, <code>@&quot;mmd&quot;</code>, or <code>@&quot;kramdown&quot;</code>
1309
+ </li>
1310
+
1311
+ <li>
1312
+ <code>tocMinMax</code> — <code>@&quot;2,4&quot;</code> or <code>@[@2, @4]</code> (default depth is 1–3)
1313
+ </li>
1314
+
1315
+ </ul>
1316
+
1317
+ <div class="highlight">
1318
+ <pre><span></span><span class="bp">NSArray</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="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">tableOfContentsWithApex</span><span class="o">:</span><span class="n">markdown</span>
1319
+ <span class="w"> </span><span class="nl">mode</span><span class="p">:</span><span class="n">ApexModeUnified</span>
1320
+ <span class="w"> </span><span class="nl">options</span><span class="p">:</span><span class="l">@{</span><span class="w"> </span><span class="s">@&quot;tocMinMax&quot;</span><span class="o">:</span><span class="w"> </span><span class="s">@&quot;1,4&quot;</span><span class="w"> </span><span class="l">}</span><span class="p">];</span>
1321
+
1322
+ <span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="bp">NSDictionary</span><span class="w"> </span><span class="o">*</span><span class="n">entry</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">entries</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
1323
+ <span class="w"> </span><span class="n">NSLog</span><span class="p">(</span><span class="s">@&quot;h%@ %@ (#%@)&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">entry</span><span class="p">[</span><span class="s">@&quot;level&quot;</span><span class="p">],</span><span class="w"> </span><span class="n">entry</span><span class="p">[</span><span class="s">@&quot;text&quot;</span><span class="p">],</span><span class="w"> </span><span class="n">entry</span><span class="p">[</span><span class="s">@&quot;id&quot;</span><span class="p">]);</span>
1324
+ <span class="p">}</span>
1325
+ </pre>
1326
+ </div>
1327
+
1328
+ <div class="highlight">
1329
+ <pre><span></span><span class="kd">let</span><span class="w"> </span><span class="nv">entries</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">apexTableOfContents</span><span class="p">()</span>
1330
+ <span class="c1">// or:</span>
1331
+ <span class="kd">let</span><span class="w"> </span><span class="nv">entries</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="bp">NSString</span><span class="p">.</span><span class="n">tableOfContents</span><span class="p">(</span>
1332
+ <span class="w"> </span><span class="n">withApex</span><span class="p">:</span><span class="w"> </span><span class="n">markdown</span><span class="p">,</span>
1333
+ <span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="n">ApexModeUnified</span><span class="p">,</span>
1334
+ <span class="w"> </span><span class="n">options</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s">&quot;tocMinMax&quot;</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;1,4&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;idFormat&quot;</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;gfm&quot;</span><span class="p">]</span>
1335
+ <span class="p">)</span>
1336
+
1337
+ <span class="c1">// Build nested outline rows from flat levels:</span>
1338
+ <span class="c1">// - deeper level =&gt; child of previous open section</span>
1339
+ <span class="c1">// - shallower/equal level =&gt; close sections until the parent fits</span>
1340
+ </pre>
1341
+ </div>
1342
+
1067
1343
  <p>
1068
- <strong> Note:</strong> Using the <code>ApexMode*</code> constants is recommended to avoid typos and provides autocomplete support in Xcode. String literals are still supported for backward compatibility.
1344
+ Headings marked <code>{:.no_toc}</code> are omitted. See <a href="C-API#structured-toc-entries">C API</a> for the underlying <code>apex_markdown_to_toc_entries</code> function and <a href="Command-Line-Options.html">Command Line Options</a> for <code>-t toc</code>.
1069
1345
  </p>
1070
1346
 
1071
1347
  <h3 id="convenience-methods">
1072
- Convenience Methods
1348
+ Convenience&nbsp;Methods
1073
1349
  </h3>
1074
1350
 
1075
1351
  <p>
@@ -1077,70 +1353,76 @@ make
1077
1353
  </p>
1078
1354
 
1079
1355
  <h4 id="standalone-html-documents">
1080
- Standalone HTML Documents
1356
+ Standalone HTML&nbsp;Documents
1081
1357
  </h4>
1082
1358
 
1083
1359
  <p>
1084
1360
  Generate complete HTML5 documents with stylesheet and title:
1085
1361
  </p>
1086
1362
 
1087
- <pre><code class="highlight language-objective-c"> <span class="n">Generate</span> <span class="n">standalone</span> <span class="n">HTML</span> <span class="n">document</span>
1088
- <span class="n">NSString</span> <span class="o">*</span><span class="n">html</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdown</span>
1089
- <span class="nl">mode:</span><span class="n">ApexModeUnified</span>
1090
- <span class="nl">standalone:</span><span class="nb">YES</span>
1091
- <span class="nl">stylesheet:</span><span class="s">@"style.css"</span>
1092
- <span class="nl">title:</span><span class="s">@"My Document"</span><span class="p">];</span>
1093
-
1094
- <span class="n">Without</span> <span class="n">stylesheet</span> <span class="n">or</span> <span class="n">title</span>
1095
- <span class="n">NSString</span> <span class="o">*</span><span class="n">html2</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdown</span>
1096
- <span class="nl">mode:</span><span class="n">ApexModeGFM</span>
1097
- <span class="nl">standalone:</span><span class="nb">YES</span>
1098
- <span class="nl">stylesheet:</span><span class="nb">nil</span>
1099
- <span class="nl">title:</span><span class="nb">nil</span><span class="p">];</span>
1100
- </code></pre>
1363
+ <div class="highlight">
1364
+ <pre><span></span><span class="c1">// Generate standalone HTML document</span>
1365
+ <span class="bp">NSString</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="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdown</span>
1366
+ <span class="w"> </span><span class="nl">mode</span><span class="p">:</span><span class="n">ApexModeUnified</span>
1367
+ <span class="w"> </span><span class="nl">standalone</span><span class="p">:</span><span class="nb">YES</span>
1368
+ <span class="w"> </span><span class="nl">stylesheet</span><span class="p">:</span><span class="s">@&quot;style.css&quot;</span>
1369
+ <span class="w"> </span><span class="nl">title</span><span class="p">:</span><span class="s">@&quot;My Document&quot;</span><span class="p">];</span>
1370
+
1371
+ <span class="c1">// Without stylesheet or title</span>
1372
+ <span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">html2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdown</span>
1373
+ <span class="w"> </span><span class="nl">mode</span><span class="p">:</span><span class="n">ApexModeGFM</span>
1374
+ <span class="w"> </span><span class="nl">standalone</span><span class="p">:</span><span class="nb">YES</span>
1375
+ <span class="w"> </span><span class="nl">stylesheet</span><span class="p">:</span><span class="nb">nil</span>
1376
+ <span class="w"> </span><span class="nl">title</span><span class="p">:</span><span class="nb">nil</span><span class="p">];</span>
1377
+ </pre>
1378
+ </div>
1101
1379
 
1102
- <h4 id="pretty-printed-html">
1103
- Pretty-Printed HTML
1380
+ <h4 Key id="pretty-printed-html">
1381
+ Pretty-Printed&nbsp;HTML
1104
1382
  </h4>
1105
1383
 
1106
1384
  <p>
1107
1385
  Generate formatted HTML with indentation:
1108
1386
  </p>
1109
1387
 
1110
- <pre><code class="highlight language-objective-c"> <span class="n">Pretty</span><span class="k">-</span><span class="n">print</span> <span class="n">HTML</span> <span class="n">output</span>
1111
- <span class="n">NSString</span> <span class="o">*</span><span class="n">html</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdown</span>
1112
- <span class="nl">mode:</span><span class="n">ApexModeUnified</span>
1113
- <span class="nl">pretty:</span><span class="nb">YES</span><span class="p">];</span>
1114
- </code></pre>
1388
+ <div class="highlight">
1389
+ <pre><span></span><span class="c1">// Pretty-print HTML output</span>
1390
+ <span class="bp">NSString</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="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdown</span>
1391
+ <span class="w"> </span><span class="nl">mode</span><span class="p">:</span><span class="n">ApexModeUnified</span>
1392
+ <span class="w"> </span><span class="nl">pretty</span><span class="p">:</span><span class="nb">YES</span><span class="p">];</span>
1393
+ </pre>
1394
+ </div>
1115
1395
 
1116
- <h4 id="dictionary-based-options">
1117
- Dictionary-Based Options
1396
+ <h4 Type id="dictionary-based-options">
1397
+ Dictionary-Based&nbsp;Options
1118
1398
  </h4>
1119
1399
 
1120
1400
  <p>
1121
1401
  Configure multiple options at once using a dictionary:
1122
1402
  </p>
1123
1403
 
1124
- <pre><code class="highlight language-objective-c"> <span class="n">Configure</span> <span class="n">multiple</span> <span class="n">options</span>
1125
- <span class="n">NSDictionary</span> <span class="o">*</span><span class="n">options</span> <span class="o">=</span> <span class="p">@{</span>
1126
- <span class="s">@"pretty"</span><span class="o">:</span> <span class="nb">@YES</span><span class="p">,</span>
1127
- <span class="s">@"standalone"</span><span class="o">:</span> <span class="nb">@YES</span><span class="p">,</span>
1128
- <span class="s">@"stylesheet"</span><span class="o">:</span> <span class="s">@"style.css"</span><span class="p">,</span>
1129
- <span class="s">@"title"</span><span class="o">:</span> <span class="s">@"My Document"</span><span class="p">,</span>
1130
- <span class="s">@"hardBreaks"</span><span class="o">:</span> <span class="nb">@YES</span><span class="p">,</span>
1131
- <span class="s">@"generateHeaderIDs"</span><span class="o">:</span> <span class="nb">@YES</span><span class="p">,</span>
1132
- <span class="s">@"headerAnchors"</span><span class="o">:</span> <span class="nb">@NO</span><span class="p">,</span>
1133
- <span class="s">@"obfuscateEmails"</span><span class="o">:</span> <span class="nb">@YES</span><span class="p">,</span>
1134
- <span class="s">@"embedImages"</span><span class="o">:</span> <span class="nb">@NO</span>
1135
- <span class="p">};</span>
1136
-
1137
- <span class="n">NSString</span> <span class="o">*</span><span class="n">html</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdown</span>
1138
- <span class="nl">mode:</span><span class="n">ApexModeUnified</span>
1139
- <span class="nl">options:</span><span class="n">options</span><span class="p">];</span>
1140
- </code></pre>
1404
+ <div class="highlight">
1405
+ <pre><span></span><span class="c1">// Configure multiple options</span>
1406
+ <span class="bp">NSDictionary</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="l">@{</span>
1407
+ <span class="w"> </span><span class="s">@&quot;pretty&quot;</span><span class="o">:</span><span class="w"> </span><span class="m">@YES</span><span class="p">,</span>
1408
+ <span class="w"> </span><span class="s">@&quot;standalone&quot;</span><span class="o">:</span><span class="w"> </span><span class="m">@YES</span><span class="p">,</span>
1409
+ <span class="w"> </span><span class="s">@&quot;stylesheet&quot;</span><span class="o">:</span><span class="w"> </span><span class="s">@&quot;style.css&quot;</span><span class="p">,</span>
1410
+ <span class="w"> </span><span class="s">@&quot;title&quot;</span><span class="o">:</span><span class="w"> </span><span class="s">@&quot;My Document&quot;</span><span class="p">,</span>
1411
+ <span class="w"> </span><span class="s">@&quot;hardBreaks&quot;</span><span class="o">:</span><span class="w"> </span><span class="m">@YES</span><span class="p">,</span>
1412
+ <span class="w"> </span><span class="s">@&quot;generateHeaderIDs&quot;</span><span class="o">:</span><span class="w"> </span><span class="m">@YES</span><span class="p">,</span>
1413
+ <span class="w"> </span><span class="s">@&quot;headerAnchors&quot;</span><span class="o">:</span><span class="w"> </span><span class="m">@NO</span><span class="p">,</span>
1414
+ <span class="w"> </span><span class="s">@&quot;obfuscateEmails&quot;</span><span class="o">:</span><span class="w"> </span><span class="m">@YES</span><span class="p">,</span>
1415
+ <span class="w"> </span><span class="s">@&quot;embedImages&quot;</span><span class="o">:</span><span class="w"> </span><span class="m">@NO</span>
1416
+ <span class="l">}</span><span class="p">;</span>
1417
+
1418
+ <span class="bp">NSString</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="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdown</span>
1419
+ <span class="w"> </span><span class="nl">mode</span><span class="p">:</span><span class="n">ApexModeUnified</span>
1420
+ <span class="w"> </span><span class="nl">options</span><span class="p">:</span><span class="n">options</span><span class="p">];</span>
1421
+ </pre>
1422
+ </div>
1141
1423
 
1142
1424
  <p>
1143
- <strong> Supported dictionary keys:</strong>
1425
+ <strong>Supported dictionary keys:</strong>
1144
1426
  </p>
1145
1427
 
1146
1428
  <ul>
@@ -1185,124 +1467,138 @@ make
1185
1467
  <code>@&quot;embedImages&quot;</code> - NSNumber (BOOL): Embed local images as base64 data URLs
1186
1468
  </li>
1187
1469
 
1470
+ <li>
1471
+ <code>@&quot;enablePlugins&quot;</code> - NSNumber (BOOL): Enable external plugin processing during conversion
1472
+ </li>
1473
+
1188
1474
  </ul>
1189
1475
 
1190
- <h4 id="swift-friendly-convenience-method">
1191
- Swift-Friendly Convenience Method
1476
+ <h4 Meaning id="swift-friendly-convenience-method">
1477
+ Swift-Friendly Convenience&nbsp;Method
1192
1478
  </h4>
1193
1479
 
1194
1480
  <p>
1195
1481
  Combine common options in a single method call (ideal for Swift):
1196
1482
  </p>
1197
1483
 
1198
- <pre><code class="highlight language-objective-c"> <span class="n">Combine</span> <span class="n">common</span> <span class="n">options</span>
1199
- <span class="n">NSString</span> <span class="o">*</span><span class="n">html</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdown</span>
1200
- <span class="nl">mode:</span><span class="n">ApexModeUnified</span>
1201
- <span class="nl">generateHeaderIDs:</span><span class="nb">YES</span>
1202
- <span class="nl">hardBreaks:</span><span class="nb">YES</span>
1203
- <span class="nl">pretty:</span><span class="nb">YES</span><span class="p">];</span>
1204
- </code></pre>
1484
+ <div class="highlight">
1485
+ <pre><span></span><span class="c1">// Combine common options</span>
1486
+ <span class="bp">NSString</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="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdown</span>
1487
+ <span class="w"> </span><span class="nl">mode</span><span class="p">:</span><span class="n">ApexModeUnified</span>
1488
+ <span class="w"> </span><span class="nl">generateHeaderIDs</span><span class="p">:</span><span class="nb">YES</span>
1489
+ <span class="w"> </span><span class="nl">hardBreaks</span><span class="p">:</span><span class="nb">YES</span>
1490
+ <span class="w"> </span><span class="nl">pretty</span><span class="p">:</span><span class="nb">YES</span><span class="p">];</span>
1491
+ </pre>
1492
+ </div>
1205
1493
 
1206
1494
  <h4 id="instance-methods">
1207
- Instance Methods
1495
+ Instance&nbsp;Methods
1208
1496
  </h4>
1209
1497
 
1210
1498
  <p>
1211
1499
  Use instance methods for more natural, fluent syntax:
1212
1500
  </p>
1213
1501
 
1214
- <pre><code class="highlight language-objective-c"> <span class="n">Instance</span> <span class="n">method</span> <span class="n">with</span> <span class="k">default</span> <span class="n">unified</span> <span class="n">mode</span>
1215
- <span class="n">NSString</span> <span class="o">*</span><span class="n">markdown</span> <span class="o">=</span> <span class="s">@"# Hello World"</span><span class="p">;</span>
1216
- <span class="n">NSString</span> <span class="o">*</span><span class="n">html</span> <span class="o">=</span> <span class="p">[</span><span class="n">markdown</span> <span class="nf">apexHTML</span><span class="p">];</span>
1502
+ <div class="highlight">
1503
+ <pre><span></span><span class="c1">// Instance method with default unified mode</span>
1504
+ <span class="bp">NSString</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 World&quot;</span><span class="p">;</span>
1505
+ <span class="bp">NSString</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="p">[</span><span class="n">markdown</span><span class="w"> </span><span class="n">apexHTML</span><span class="p">];</span>
1217
1506
 
1218
- <span class="n">Instance</span> <span class="n">method</span> <span class="n">with</span> <span class="n">specific</span> <span class="n">mode</span>
1219
- <span class="n">NSString</span> <span class="o">*</span><span class="n">html2</span> <span class="o">=</span> <span class="p">[</span><span class="n">markdown</span> <span class="nf">apexHTMLWithMode</span><span class="p">:</span><span class="n">ApexModeGFM</span><span class="p">];</span>
1220
- </code></pre>
1507
+ <span class="c1">// Instance method with specific mode</span>
1508
+ <span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">html2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">markdown</span><span class="w"> </span><span class="n">apexHTMLWithMode</span><span class="o">:</span><span class="n">ApexModeGFM</span><span class="p">];</span>
1509
+ </pre>
1510
+ </div>
1221
1511
 
1222
- <h2 id="mode-constants">
1223
- Mode Constants
1512
+ <h2 `level` id="mode-constants">
1513
+ Mode&nbsp;Constants
1224
1514
  </h2>
1225
1515
 
1226
1516
  <p>
1227
1517
  Apex provides NSString constants for processor modes to avoid ambiguity and typos:
1228
1518
  </p>
1229
1519
 
1230
- <pre><code class="highlight language-objective-c"> <span class="n">Available</span> <span class="n">constants</span>
1231
- <span class="n">ApexModeCommonmark</span> <span class="c1">// @"commonmark"</span>
1232
- <span class="n">ApexModeGFM</span> <span class="c1">// @"gfm"</span>
1233
- <span class="n">ApexModeMultiMarkdown</span> <span class="c1">// @"multimarkdown"</span>
1234
- <span class="n">ApexModeKramdown</span> <span class="c1">// @"kramdown"</span>
1235
- <span class="n">ApexModeUnified</span> <span class="c1">// @"unified"</span>
1236
- </code></pre>
1520
+ <div class="highlight">
1521
+ <pre><span></span><span class="c1">// Available constants</span>
1522
+ <span class="n">ApexModeCommonmark</span><span class="w"> </span><span class="c1">// @&quot;commonmark&quot;</span>
1523
+ <span class="n">ApexModeGFM</span><span class="w"> </span><span class="c1">// @&quot;gfm&quot;</span>
1524
+ <span class="n">ApexModeMultiMarkdown</span><span class="w"> </span><span class="c1">// @&quot;multimarkdown&quot;</span>
1525
+ <span class="n">ApexModeKramdown</span><span class="w"> </span><span class="c1">// @&quot;kramdown&quot;</span>
1526
+ <span class="n">ApexModeUnified</span><span class="w"> </span><span class="c1">// @&quot;unified&quot;</span>
1527
+ </pre>
1528
+ </div>
1237
1529
 
1238
1530
  <p>
1239
- <strong> Benefits:</strong>
1531
+ <strong>Benefits:</strong>
1240
1532
  </p>
1241
1533
 
1242
1534
  <ul>
1243
1535
 
1244
1536
  <li>
1245
- <strong> Type safety</strong>: Xcode autocomplete suggests available modes
1537
+ <strong>Type safety</strong>: Xcode autocomplete suggests available modes
1246
1538
  </li>
1247
1539
 
1248
1540
  <li>
1249
- <strong> No typos</strong>: Compile-time checking prevents invalid mode strings
1541
+ <strong>No typos</strong>: Compile-time checking prevents invalid mode strings
1250
1542
  </li>
1251
1543
 
1252
1544
  <li>
1253
- <strong> Self-documenting</strong>: Constants make code more readable
1545
+ <strong>Self-documenting</strong>: Constants make code more readable
1254
1546
  </li>
1255
1547
 
1256
1548
  <li>
1257
- <strong> Refactoring</strong>: Easy to find all usages if mode names change
1549
+ <strong>Refactoring</strong>: Easy to find all usages if mode names change
1258
1550
  </li>
1259
1551
 
1260
1552
  </ul>
1261
1553
 
1262
1554
  <p>
1263
- <strong> Example:</strong>
1555
+ <strong>Example:</strong>
1264
1556
  </p>
1265
1557
 
1266
- <pre><code class="highlight language-objective-c"> <span class="nl">Good:</span> <span class="n">Using</span> <span class="n">constants</span>
1267
- <span class="n">NSString</span> <span class="o">*</span><span class="n">html</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdown</span> <span class="nf">mode</span><span class="p">:</span><span class="n">ApexModeMultiMarkdown</span><span class="p">];</span>
1558
+ <div class="highlight">
1559
+ <pre><span></span><span class="c1">// Good: Using constants</span>
1560
+ <span class="bp">NSString</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="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdown</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="n">ApexModeMultiMarkdown</span><span class="p">];</span>
1268
1561
 
1269
- <span class="n">Also</span> <span class="n">works</span><span class="o">:</span> <span class="n">String</span> <span class="n">literals</span> <span class="p">(</span><span class="k">for</span> <span class="n">backward</span> <span class="n">compatibility</span><span class="p">)</span>
1270
- <span class="n">NSString</span> <span class="o">*</span><span class="n">html2</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">markdown</span> <span class="nf">mode</span><span class="p">:</span><span class="s">@"multimarkdown"</span><span class="p">];</span>
1271
- </code></pre>
1562
+ <span class="c1">// Also works: String literals (for backward compatibility)</span>
1563
+ <span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">html2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdown</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="s">@&quot;multimarkdown&quot;</span><span class="p">];</span>
1564
+ </pre>
1565
+ </div>
1272
1566
 
1273
- <h2 id="direct-c-api-usage">
1274
- Direct C API Usage
1567
+ <h2 `NSNumber` id="direct-c-api-usage">
1568
+ Direct C&nbsp;API&nbsp;Usage
1275
1569
  </h2>
1276
1570
 
1277
1571
  <p>
1278
1572
  For more control, use the C API directly:
1279
1573
  </p>
1280
1574
 
1281
- <pre><code class="highlight language-objective-c"><span class="cp">#include</span> <span class="cpf">&lt;Apex/apex.h&gt;</span><span class="cp">
1282
- </span>
1283
- <span class="k">-</span> <span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nf">convertMarkdown</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">markdown</span> <span class="p">{</span>
1284
- <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>
1285
- <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>
1575
+ <div class="highlight">
1576
+ <pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;Apex/apex.h&gt;</span>
1286
1577
 
1287
- <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">md</span> <span class="o">=</span> <span class="p">[</span><span class="n">markdown</span> <span class="nf">UTF8String</span><span class="p">];</span>
1288
- <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">md</span><span class="p">,</span> <span class="n">strlen</span><span class="p">(</span><span class="n">md</span><span class="p">),</span> <span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1578
+ <span class="p">-</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">convertMarkdown:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span><span class="w"> </span><span class="p">{</span>
1579
+ <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>
1580
+ <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>
1289
1581
 
1290
- <span class="k">if</span> <span class="p">(</span><span class="n">html</span><span class="p">)</span> <span class="p">{</span>
1291
- <span class="n">NSString</span> <span class="o">*</span><span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">stringWithUTF8String</span><span class="p">:</span><span class="n">html</span><span class="p">];</span>
1292
- <span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
1293
- <span class="k">return</span> <span class="n">result</span><span class="p">;</span>
1294
- <span class="p">}</span>
1582
+ <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">md</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">markdown</span><span class="w"> </span><span class="n">UTF8String</span><span class="p">];</span>
1583
+ <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">md</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">md</span><span class="p">),</span><span class="w"> </span><span class="o">&amp;</span><span class="n">opts</span><span class="p">);</span>
1295
1584
 
1296
- <span class="k">return</span> <span class="nb">nil</span><span class="p">;</span>
1585
+ <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>
1586
+ <span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">stringWithUTF8String</span><span class="o">:</span><span class="n">html</span><span class="p">];</span>
1587
+ <span class="w"> </span><span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
1588
+ <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">result</span><span class="p">;</span>
1589
+ <span class="w"> </span><span class="p">}</span>
1590
+
1591
+ <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">nil</span><span class="p">;</span>
1297
1592
  <span class="p">}</span>
1298
- </code></pre>
1593
+ </pre>
1594
+ </div>
1299
1595
 
1300
- <h2 id="integration-example">
1301
- Integration Example
1596
+ <h2 Heading level 1–6 id="integration-example">
1597
+ Integration&nbsp;Example
1302
1598
  </h2>
1303
1599
 
1304
1600
  <h3 id="adding-to-marked">
1305
- Adding to Marked
1601
+ Adding&nbsp;to&nbsp;Marked
1306
1602
  </h3>
1307
1603
 
1308
1604
  <p>
@@ -1310,47 +1606,53 @@ make
1310
1606
  </p>
1311
1607
 
1312
1608
  <p>
1313
- <strong> 1. Add to processor selection:</strong>
1609
+ <strong>1. Add to processor selection:</strong>
1314
1610
  </p>
1315
1611
 
1316
- <pre><code class="highlight language-objective-c"> <span class="n">In</span> <span class="n">MKConductorTransformer</span><span class="p">.</span><span class="n">m</span> <span class="n">or</span> <span class="n">similar</span>
1317
- <span class="err">}</span> <span class="k">else</span> <span class="nf">if</span> <span class="p">([</span><span class="n">processor</span> <span class="nf">isEqualToString</span><span class="p">:</span><span class="s">@"Apex"</span><span class="p">])</span> <span class="p">{</span>
1318
- <span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithApex</span><span class="p">:</span><span class="n">text</span><span class="p">];</span>
1319
- <span class="p">}</span> <span class="k">else</span> <span class="nf">if</span> <span class="p">([</span><span class="n">processor</span> <span class="nf">isEqualToString</span><span class="p">:</span><span class="s">@"MultiMarkdown"</span><span class="p">])</span> <span class="p">{</span>
1320
- <span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSString</span> <span class="nf">convertWithMultiMarkdown</span><span class="p">:</span><span class="n">text</span><span class="p">];</span>
1612
+ <div class="highlight">
1613
+ <pre><span></span><span class="c1">// In MKConductorTransformer.m or similar</span>
1614
+ <span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">([</span><span class="n">processor</span><span class="w"> </span><span class="n">isEqualToString</span><span class="o">:</span><span class="s">@&quot;Apex&quot;</span><span class="p">])</span><span class="w"> </span><span class="p">{</span>
1615
+ <span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">text</span><span class="p">];</span>
1616
+ <span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">([</span><span class="n">processor</span><span class="w"> </span><span class="n">isEqualToString</span><span class="o">:</span><span class="s">@&quot;MultiMarkdown&quot;</span><span class="p">])</span><span class="w"> </span><span class="p">{</span>
1617
+ <span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithMultiMarkdown</span><span class="o">:</span><span class="n">text</span><span class="p">];</span>
1321
1618
  <span class="p">}</span>
1322
- </code></pre>
1619
+ </pre>
1620
+ </div>
1323
1621
 
1324
1622
  <p>
1325
- <strong> 2. Add to preferences:</strong>
1623
+ <strong>2. Add to preferences:</strong>
1326
1624
  </p>
1327
1625
 
1328
- <pre><code class="highlight language-objective-c"> <span class="n">In</span> <span class="n">processor</span> <span class="n">dropdown</span>
1329
- <span class="n">NSArray</span> <span class="o">*</span><span class="n">processors</span> <span class="o">=</span> <span class="p">@[</span>
1330
- <span class="s">@"MultiMarkdown"</span><span class="p">,</span>
1331
- <span class="s">@"Discount (GFM)"</span><span class="p">,</span>
1332
- <span class="s">@"CommonMark"</span><span class="p">,</span>
1333
- <span class="s">@"Kramdown"</span><span class="p">,</span>
1334
- <span class="s">@"Apex"</span> <span class="c1">// Add this</span>
1335
- <span class="p">];</span>
1336
- </code></pre>
1626
+ <div class="highlight">
1627
+ <pre><span></span><span class="c1">// In processor dropdown</span>
1628
+ <span class="bp">NSArray</span><span class="w"> </span><span class="o">*</span><span class="n">processors</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="l">@[</span>
1629
+ <span class="w"> </span><span class="s">@&quot;MultiMarkdown&quot;</span><span class="p">,</span>
1630
+ <span class="w"> </span><span class="s">@&quot;Discount (GFM)&quot;</span><span class="p">,</span>
1631
+ <span class="w"> </span><span class="s">@&quot;CommonMark&quot;</span><span class="p">,</span>
1632
+ <span class="w"> </span><span class="s">@&quot;Kramdown&quot;</span><span class="p">,</span>
1633
+ <span class="w"> </span><span class="s">@&quot;Apex&quot;</span><span class="w"> </span><span class="c1">// Add this</span>
1634
+ <span class="l">]</span><span class="p">;</span>
1635
+ </pre>
1636
+ </div>
1337
1637
 
1338
1638
  <p>
1339
- <strong> 3. Handle custom processor rules:</strong>
1639
+ <strong>3. Handle custom processor rules:</strong>
1340
1640
  </p>
1341
1641
 
1342
- <pre><code class="highlight language-objective-c"> <span class="n">In</span> <span class="n">custom</span> <span class="n">processor</span> <span class="n">handling</span>
1343
- <span class="err">}</span> <span class="k">else</span> <span class="nf">if</span> <span class="p">([</span><span class="n">outputString</span><span class="p">.</span><span class="n">uppercaseString</span> <span class="nf">isEqualToString</span><span class="p">:</span><span class="s">@"APEX"</span><span class="p">])</span> <span class="p">{</span>
1344
- <span class="p">[</span><span class="n">defaults</span> <span class="nf">setValue</span><span class="p">:</span><span class="s">@"Apex"</span> <span class="nf">forKey</span><span class="p">:</span><span class="s">@"defaultProcessor"</span><span class="p">];</span>
1642
+ <div class="highlight">
1643
+ <pre><span></span><span class="c1">// In custom processor handling</span>
1644
+ <span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">([</span><span class="n">outputString</span><span class="p">.</span><span class="n">uppercaseString</span><span class="w"> </span><span class="n">isEqualToString</span><span class="o">:</span><span class="s">@&quot;APEX&quot;</span><span class="p">])</span><span class="w"> </span><span class="p">{</span>
1645
+ <span class="w"> </span><span class="p">[</span><span class="n">defaults</span><span class="w"> </span><span class="n">setValue</span><span class="o">:</span><span class="s">@&quot;Apex&quot;</span><span class="w"> </span><span class="n">forKey</span><span class="o">:</span><span class="s">@&quot;defaultProcessor&quot;</span><span class="p">];</span>
1345
1646
  <span class="p">}</span>
1346
- </code></pre>
1647
+ </pre>
1648
+ </div>
1347
1649
 
1348
1650
  <h2 id="build-settings">
1349
- Build Settings
1651
+ Build&nbsp;Settings
1350
1652
  </h2>
1351
1653
 
1352
1654
  <h3 id="header-search-paths">
1353
- Header Search Paths
1655
+ Header Search&nbsp;Paths
1354
1656
  </h3>
1355
1657
 
1356
1658
  <p>
@@ -1361,7 +1663,7 @@ make
1361
1663
  </code></pre>
1362
1664
 
1363
1665
  <h3 id="framework-search-paths">
1364
- Framework Search Paths
1666
+ Framework Search&nbsp;Paths
1365
1667
  </h3>
1366
1668
 
1367
1669
  <p>
@@ -1372,7 +1674,7 @@ make
1372
1674
  </code></pre>
1373
1675
 
1374
1676
  <h3 id="other-linker-flags">
1375
- Other Linker Flags
1677
+ Other Linker&nbsp;Flags
1376
1678
  </h3>
1377
1679
 
1378
1680
  <p>
@@ -1382,8 +1684,8 @@ make
1382
1684
  <pre><code class="highlight ">-L$(SRCROOT)/apex/build -lapex
1383
1685
  </code></pre>
1384
1686
 
1385
- <h3 id="swift-api-support">
1386
- Swift API Support
1687
+ <h3 `text` id="swift-api-support">
1688
+ Swift API&nbsp;Support
1387
1689
  </h3>
1388
1690
 
1389
1691
  <p>
@@ -1393,15 +1695,15 @@ make
1393
1695
  <ol>
1394
1696
 
1395
1697
  <li>
1396
- <strong> If using the framework:</strong> The Swift file is automatically included when you link <code>Apex.framework</code>
1698
+ <strong>If using the framework:</strong> The Swift file is automatically included when you link <code>Apex.framework</code>
1397
1699
  </li>
1398
1700
 
1399
1701
  <li>
1400
- <strong> If using source files directly:</strong> Add <code>apex/objc/Apex.swift</code> to your Xcode project
1702
+ <strong>If using source files directly:</strong> Add <code>apex/objc/Apex.swift</code> to your Xcode project
1401
1703
  </li>
1402
1704
 
1403
1705
  <li>
1404
- <strong> Swift/Objective-C Bridging:</strong> Xcode will automatically create a bridging header if needed
1706
+ <strong>Swift/Objective-C Bridging:</strong> Xcode will automatically create a bridging header if needed
1405
1707
  </li>
1406
1708
 
1407
1709
  </ol>
@@ -1430,7 +1732,7 @@ make
1430
1732
 
1431
1733
  </ul>
1432
1734
 
1433
- <h2 id="swift-integration">
1735
+ <h2 `NSString` id="swift-integration">
1434
1736
  Swift Integration
1435
1737
  </h2>
1436
1738
 
@@ -1438,170 +1740,313 @@ make
1438
1740
  Apex provides an idiomatic Swift API wrapper (<code>Apex.swift</code>) that offers type-safe enums and structs over the Objective-C API.
1439
1741
  </p>
1440
1742
 
1441
- <h3 id="idiomatic-swift-api-recommended">
1442
- Idiomatic Swift API (Recommended)
1743
+ <h3 Display title id="idiomatic-swift-api-recommended">
1744
+ Idiomatic Swift API&nbsp;(Recommended)
1443
1745
  </h3>
1444
1746
 
1445
- <pre><code class="highlight language-swift"><span class="kd">import</span> <span class="kt">Foundation</span>
1446
- <span class="kt">Import</span> <span class="kt">Apex</span><span class="o">.</span><span class="nf">swift</span> <span class="p">(</span><span class="n">automatically</span> <span class="n">available</span> <span class="n">when</span> <span class="n">framework</span> <span class="k">is</span> <span class="n">linked</span><span class="p">)</span>
1447
-
1448
- <span class="kt">Basic</span> <span class="n">conversion</span> <span class="n">with</span> <span class="k">default</span> <span class="n">unified</span> <span class="n">mode</span>
1449
- <span class="k">let</span> <span class="nv">markdown</span> <span class="o">=</span> <span class="s">"# Hello World"</span>
1450
- <span class="k">let</span> <span class="nv">html</span> <span class="o">=</span> <span class="n">markdown</span><span class="o">.</span><span class="nf">apexHTML</span><span class="p">()</span>
1451
-
1452
- <span class="kt">With</span> <span class="n">type</span><span class="o">-</span><span class="n">safe</span> <span class="n">mode</span> <span class="kd">enum</span>
1453
- <span class="k">let</span> <span class="nv">gfmHtml</span> <span class="o">=</span> <span class="n">markdown</span><span class="o">.</span><span class="nf">apexHTML</span><span class="p">(</span><span class="nv">mode</span><span class="p">:</span> <span class="o">.</span><span class="n">gfm</span><span class="p">)</span>
1454
- <span class="k">let</span> <span class="nv">mmdHtml</span> <span class="o">=</span> <span class="n">markdown</span><span class="o">.</span><span class="nf">apexHTML</span><span class="p">(</span><span class="nv">mode</span><span class="p">:</span> <span class="o">.</span><span class="n">multimarkdown</span><span class="p">)</span>
1455
- <span class="k">let</span> <span class="nv">kramdownHtml</span> <span class="o">=</span> <span class="n">markdown</span><span class="o">.</span><span class="nf">apexHTML</span><span class="p">(</span><span class="nv">mode</span><span class="p">:</span> <span class="o">.</span><span class="n">kramdown</span><span class="p">)</span>
1456
- <span class="k">let</span> <span class="nv">commonmarkHtml</span> <span class="o">=</span> <span class="n">markdown</span><span class="o">.</span><span class="nf">apexHTML</span><span class="p">(</span><span class="nv">mode</span><span class="p">:</span> <span class="o">.</span><span class="n">commonmark</span><span class="p">)</span>
1457
- <span class="k">let</span> <span class="nv">unifiedHtml</span> <span class="o">=</span> <span class="n">markdown</span><span class="o">.</span><span class="nf">apexHTML</span><span class="p">(</span><span class="nv">mode</span><span class="p">:</span> <span class="o">.</span><span class="n">unified</span><span class="p">)</span>
1458
-
1459
- <span class="kt">Using</span> <span class="kt">ApexOptions</span> <span class="nf">struct</span> <span class="p">(</span><span class="n">type</span><span class="o">-</span><span class="n">safe</span><span class="p">)</span>
1460
- <span class="k">var</span> <span class="nv">options</span> <span class="o">=</span> <span class="kt">ApexOptions</span><span class="p">()</span>
1461
- <span class="n">options</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="kc">true</span>
1462
- <span class="n">options</span><span class="o">.</span><span class="n">standalone</span> <span class="o">=</span> <span class="kc">true</span>
1463
- <span class="n">options</span><span class="o">.</span><span class="n">stylesheet</span> <span class="o">=</span> <span class="s">"style.css"</span>
1464
- <span class="n">options</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="s">"My Document"</span>
1465
- <span class="n">options</span><span class="o">.</span><span class="n">generateHeaderIDs</span> <span class="o">=</span> <span class="kc">true</span>
1466
- <span class="n">options</span><span class="o">.</span><span class="n">hardBreaks</span> <span class="o">=</span> <span class="kc">true</span>
1467
- <span class="n">options</span><span class="o">.</span><span class="n">obfuscateEmails</span> <span class="o">=</span> <span class="kc">true</span>
1468
-
1469
- <span class="k">let</span> <span class="nv">configuredHtml</span> <span class="o">=</span> <span class="n">markdown</span><span class="o">.</span><span class="nf">apexHTML</span><span class="p">(</span><span class="nv">mode</span><span class="p">:</span> <span class="o">.</span><span class="n">unified</span><span class="p">,</span> <span class="nv">options</span><span class="p">:</span> <span class="n">options</span><span class="p">)</span>
1470
-
1471
- <span class="kt">Or</span> <span class="n">use</span> <span class="kd">static</span> <span class="kt">Apex</span> <span class="n">converter</span>
1472
- <span class="k">let</span> <span class="nv">html2</span> <span class="o">=</span> <span class="kt">Apex</span><span class="o">.</span><span class="nf">convert</span><span class="p">(</span><span class="n">markdown</span><span class="p">)</span>
1473
- <span class="k">let</span> <span class="nv">html3</span> <span class="o">=</span> <span class="kt">Apex</span><span class="o">.</span><span class="nf">convert</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span> <span class="nv">mode</span><span class="p">:</span> <span class="o">.</span><span class="n">gfm</span><span class="p">)</span>
1474
- <span class="k">let</span> <span class="nv">html4</span> <span class="o">=</span> <span class="kt">Apex</span><span class="o">.</span><span class="nf">convert</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span> <span class="nv">mode</span><span class="p">:</span> <span class="o">.</span><span class="n">unified</span><span class="p">,</span> <span class="nv">options</span><span class="p">:</span> <span class="n">options</span><span class="p">)</span>
1475
-
1476
- <span class="kt">Standalone</span> <span class="kt">HTML</span> <span class="n">document</span>
1477
- <span class="k">let</span> <span class="nv">standaloneHtml</span> <span class="o">=</span> <span class="n">markdown</span><span class="o">.</span><span class="nf">apexHTML</span><span class="p">(</span>
1478
- <span class="nv">mode</span><span class="p">:</span> <span class="o">.</span><span class="n">unified</span><span class="p">,</span>
1479
- <span class="nv">standalone</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
1480
- <span class="nv">stylesheet</span><span class="p">:</span> <span class="s">"style.css"</span><span class="p">,</span>
1481
- <span class="nv">title</span><span class="p">:</span> <span class="s">"My Document"</span>
1747
+ <div class="highlight">
1748
+ <pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Foundation</span>
1749
+ <span class="c1">// Import Apex.swift (automatically available when framework is linked)</span>
1750
+
1751
+ <span class="c1">// Basic conversion with default unified mode</span>
1752
+ <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 World&quot;</span>
1753
+ <span class="kd">let</span><span class="w"> </span><span class="nv">html</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">apexHTML</span><span class="p">()</span>
1754
+
1755
+ <span class="c1">// With type-safe mode enum</span>
1756
+ <span class="kd">let</span><span class="w"> </span><span class="nv">gfmHtml</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">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">gfm</span><span class="p">)</span>
1757
+ <span class="kd">let</span><span class="w"> </span><span class="nv">mmdHtml</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">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">multimarkdown</span><span class="p">)</span>
1758
+ <span class="kd">let</span><span class="w"> </span><span class="nv">kramdownHtml</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">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">kramdown</span><span class="p">)</span>
1759
+ <span class="kd">let</span><span class="w"> </span><span class="nv">commonmarkHtml</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">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">commonmark</span><span class="p">)</span>
1760
+ <span class="kd">let</span><span class="w"> </span><span class="nv">unifiedHtml</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">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">)</span>
1761
+
1762
+ <span class="c1">// Using ApexOptions struct (type-safe)</span>
1763
+ <span class="kd">var</span><span class="w"> </span><span class="nv">options</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">ApexOptions</span><span class="p">()</span>
1764
+ <span class="n">options</span><span class="p">.</span><span class="n">pretty</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
1765
+ <span class="n">options</span><span class="p">.</span><span class="n">standalone</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
1766
+ <span class="n">options</span><span class="p">.</span><span class="n">stylesheet</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s">&quot;style.css&quot;</span>
1767
+ <span class="n">options</span><span class="p">.</span><span class="n">title</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s">&quot;My Document&quot;</span>
1768
+ <span class="n">options</span><span class="p">.</span><span class="n">generateHeaderIDs</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
1769
+ <span class="n">options</span><span class="p">.</span><span class="n">hardBreaks</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
1770
+ <span class="n">options</span><span class="p">.</span><span class="n">obfuscateEmails</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
1771
+
1772
+ <span class="kd">let</span><span class="w"> </span><span class="nv">configuredHtml</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">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">,</span><span class="w"> </span><span class="n">options</span><span class="p">:</span><span class="w"> </span><span class="n">options</span><span class="p">)</span>
1773
+
1774
+ <span class="c1">// Or use static Apex converter</span>
1775
+ <span class="kd">let</span><span class="w"> </span><span class="nv">html2</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Apex</span><span class="p">.</span><span class="n">convert</span><span class="p">(</span><span class="n">markdown</span><span class="p">)</span>
1776
+ <span class="kd">let</span><span class="w"> </span><span class="nv">html3</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Apex</span><span class="p">.</span><span class="n">convert</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">gfm</span><span class="p">)</span>
1777
+ <span class="kd">let</span><span class="w"> </span><span class="nv">html4</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Apex</span><span class="p">.</span><span class="n">convert</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">,</span><span class="w"> </span><span class="n">options</span><span class="p">:</span><span class="w"> </span><span class="n">options</span><span class="p">)</span>
1778
+
1779
+ <span class="c1">// Standalone HTML document</span>
1780
+ <span class="kd">let</span><span class="w"> </span><span class="nv">standaloneHtml</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">apexHTML</span><span class="p">(</span>
1781
+ <span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">,</span>
1782
+ <span class="w"> </span><span class="n">standalone</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
1783
+ <span class="w"> </span><span class="n">stylesheet</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;style.css&quot;</span><span class="p">,</span>
1784
+ <span class="w"> </span><span class="n">title</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;My Document&quot;</span>
1482
1785
  <span class="p">)</span>
1483
1786
 
1484
- <span class="kt">Pretty</span><span class="o">-</span><span class="n">printed</span> <span class="kt">HTML</span>
1485
- <span class="k">let</span> <span class="nv">prettyHtml</span> <span class="o">=</span> <span class="n">markdown</span><span class="o">.</span><span class="nf">apexHTML</span><span class="p">(</span><span class="nv">pretty</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nv">mode</span><span class="p">:</span> <span class="o">.</span><span class="n">unified</span><span class="p">)</span>
1787
+ <span class="c1">// Pretty-printed HTML</span>
1788
+ <span class="kd">let</span><span class="w"> </span><span class="nv">prettyHtml</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">apexHTML</span><span class="p">(</span><span class="n">pretty</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">)</span>
1486
1789
 
1487
- <span class="kt">Common</span> <span class="n">options</span> <span class="n">combined</span>
1488
- <span class="k">let</span> <span class="nv">commonOptionsHtml</span> <span class="o">=</span> <span class="n">markdown</span><span class="o">.</span><span class="nf">apexHTML</span><span class="p">(</span>
1489
- <span class="nv">mode</span><span class="p">:</span> <span class="o">.</span><span class="n">unified</span><span class="p">,</span>
1490
- <span class="nv">generateHeaderIDs</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
1491
- <span class="nv">hardBreaks</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
1492
- <span class="nv">pretty</span><span class="p">:</span> <span class="kc">true</span>
1790
+ <span class="c1">// Common options combined</span>
1791
+ <span class="kd">let</span><span class="w"> </span><span class="nv">commonOptionsHtml</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">apexHTML</span><span class="p">(</span>
1792
+ <span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">,</span>
1793
+ <span class="w"> </span><span class="n">generateHeaderIDs</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
1794
+ <span class="w"> </span><span class="n">hardBreaks</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
1795
+ <span class="w"> </span><span class="n">pretty</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span>
1493
1796
  <span class="p">)</span>
1494
- </code></pre>
1797
+ </pre>
1798
+ </div>
1495
1799
 
1496
1800
  <h3 id="apexmode-enum">
1497
- ApexMode Enum
1801
+ ApexMode&nbsp;Enum
1498
1802
  </h3>
1499
1803
 
1500
1804
  <p>
1501
1805
  Type-safe processor mode enum:
1502
1806
  </p>
1503
1807
 
1504
- <pre><code class="highlight language-swift"><span class="kd">public</span> <span class="kd">enum</span> <span class="kt">ApexMode</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="kt">CaseIterable</span> <span class="p">{</span>
1505
- <span class="k">case</span> <span class="n">commonmark</span>
1506
- <span class="k">case</span> <span class="n">gfm</span>
1507
- <span class="k">case</span> <span class="n">multimarkdown</span>
1508
- <span class="k">case</span> <span class="n">kramdown</span>
1509
- <span class="k">case</span> <span class="n">unified</span>
1808
+ <div class="highlight">
1809
+ <pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="nc">ApexMode</span><span class="p">:</span><span class="w"> </span><span class="nb">String</span><span class="p">,</span><span class="w"> </span><span class="n">CaseIterable</span><span class="w"> </span><span class="p">{</span>
1810
+ <span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">commonmark</span>
1811
+ <span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">gfm</span>
1812
+ <span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">multimarkdown</span>
1813
+ <span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">kramdown</span>
1814
+ <span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">unified</span>
1510
1815
  <span class="p">}</span>
1511
- </code></pre>
1816
+ </pre>
1817
+ </div>
1512
1818
 
1513
- <h3 id="apexoptions-struct">
1514
- ApexOptions Struct
1819
+ <h3 `id` id="apexoptions-struct">
1820
+ ApexOptions&nbsp;Struct
1515
1821
  </h3>
1516
1822
 
1517
1823
  <p>
1518
1824
  Type-safe options configuration:
1519
1825
  </p>
1520
1826
 
1521
- <pre><code class="highlight language-swift"><span class="kd">public</span> <span class="kd">struct</span> <span class="kt">ApexOptions</span> <span class="p">{</span>
1522
- <span class="kd">public</span> <span class="k">var</span> <span class="nv">pretty</span><span class="p">:</span> <span class="kt">Bool</span> <span class="o">=</span> <span class="kc">false</span>
1523
- <span class="kd">public</span> <span class="k">var</span> <span class="nv">standalone</span><span class="p">:</span> <span class="kt">Bool</span> <span class="o">=</span> <span class="kc">false</span>
1524
- <span class="kd">public</span> <span class="k">var</span> <span class="nv">stylesheet</span><span class="p">:</span> <span class="kt">String</span><span class="p">?</span> <span class="o">=</span> <span class="kc">nil</span>
1525
- <span class="kd">public</span> <span class="k">var</span> <span class="nv">title</span><span class="p">:</span> <span class="kt">String</span><span class="p">?</span> <span class="o">=</span> <span class="kc">nil</span>
1526
- <span class="kd">public</span> <span class="k">var</span> <span class="nv">hardBreaks</span><span class="p">:</span> <span class="kt">Bool</span> <span class="o">=</span> <span class="kc">false</span>
1527
- <span class="kd">public</span> <span class="k">var</span> <span class="nv">generateHeaderIDs</span><span class="p">:</span> <span class="kt">Bool</span> <span class="o">=</span> <span class="kc">false</span>
1528
- <span class="kd">public</span> <span class="k">var</span> <span class="nv">unsafe</span><span class="p">:</span> <span class="kt">Bool</span> <span class="o">=</span> <span class="kc">false</span>
1529
- <span class="kd">public</span> <span class="k">var</span> <span class="nv">headerAnchors</span><span class="p">:</span> <span class="kt">Bool</span> <span class="o">=</span> <span class="kc">false</span>
1530
- <span class="kd">public</span> <span class="k">var</span> <span class="nv">obfuscateEmails</span><span class="p">:</span> <span class="kt">Bool</span> <span class="o">=</span> <span class="kc">false</span>
1531
- <span class="kd">public</span> <span class="k">var</span> <span class="nv">embedImages</span><span class="p">:</span> <span class="kt">Bool</span> <span class="o">=</span> <span class="kc">false</span>
1532
-
1533
- <span class="kd">public</span> <span class="kd">static</span> <span class="kd">let</span> <span class="p">`</span><span class="nv">default</span><span class="p">`</span> <span class="o">=</span> <span class="kt">ApexOptions</span><span class="p">()</span>
1827
+ <div class="highlight">
1828
+ <pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kd">struct</span><span class="w"> </span><span class="nc">ApexOptions</span><span class="w"> </span><span class="p">{</span>
1829
+ <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">pretty</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
1830
+ <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">standalone</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
1831
+ <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">stylesheet</span><span class="p">:</span><span class="w"> </span><span class="nb">String</span><span class="p">?</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">nil</span>
1832
+ <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">title</span><span class="p">:</span><span class="w"> </span><span class="nb">String</span><span class="p">?</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">nil</span>
1833
+ <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">hardBreaks</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
1834
+ <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">generateHeaderIDs</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
1835
+ <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">unsafe</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
1836
+ <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">headerAnchors</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
1837
+ <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">obfuscateEmails</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
1838
+ <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">embedImages</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
1839
+ <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">enablePlugins</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
1840
+
1841
+ <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="p">`</span><span class="k">default</span><span class="p">`</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">ApexOptions</span><span class="p">()</span>
1534
1842
  <span class="p">}</span>
1535
- </code></pre>
1843
+ </pre>
1844
+ </div>
1536
1845
 
1537
1846
  <p>
1538
- <strong> Example usage:</strong>
1847
+ <strong>Example usage:</strong>
1539
1848
  </p>
1540
1849
 
1541
- <pre><code class="highlight language-swift"><span class="k">var</span> <span class="nv">options</span> <span class="o">=</span> <span class="kt">ApexOptions</span><span class="o">.</span><span class="k">default</span>
1542
- <span class="n">options</span><span class="o">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="kc">true</span>
1543
- <span class="n">options</span><span class="o">.</span><span class="n">generateHeaderIDs</span> <span class="o">=</span> <span class="kc">true</span>
1544
- <span class="k">let</span> <span class="nv">html</span> <span class="o">=</span> <span class="n">markdown</span><span class="o">.</span><span class="nf">apexHTML</span><span class="p">(</span><span class="nv">mode</span><span class="p">:</span> <span class="o">.</span><span class="n">gfm</span><span class="p">,</span> <span class="nv">options</span><span class="p">:</span> <span class="n">options</span><span class="p">)</span>
1545
- </code></pre>
1850
+ <div class="highlight">
1851
+ <pre><span></span><span class="kd">var</span><span class="w"> </span><span class="nv">options</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">ApexOptions</span><span class="p">.</span><span class="k">default</span>
1852
+ <span class="n">options</span><span class="p">.</span><span class="n">pretty</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
1853
+ <span class="n">options</span><span class="p">.</span><span class="n">generateHeaderIDs</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
1854
+ <span class="kd">let</span><span class="w"> </span><span class="nv">html</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">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">gfm</span><span class="p">,</span><span class="w"> </span><span class="n">options</span><span class="p">:</span><span class="w"> </span><span class="n">options</span><span class="p">)</span>
1855
+ </pre>
1856
+ </div>
1546
1857
 
1547
- <h3 id="objective-c-bridge-alternative">
1548
- Objective-C Bridge (Alternative)
1858
+ <h3 `NSString` id="apexoptions-vs-apexoptions">
1859
+ ApexOptions vs&nbsp;apex_options
1860
+ </h3>
1861
+
1862
+ <p>
1863
+ Use <code>ApexOptions</code> for most Swift code, and use <code>apex_options</code> only for low-level or plugin-focused use cases.
1864
+ </p>
1865
+
1866
+ <ul>
1867
+
1868
+ <li>
1869
+ <code>ApexOptions</code> is the high-level Swift API and is the recommended default for app code.
1870
+ </li>
1871
+
1872
+ <li>
1873
+ <code>apex_options</code> is the C struct and exposes advanced flags that may not be surfaced in <code>ApexOptions</code>.
1874
+ </li>
1875
+
1876
+ <li>
1877
+ For direct C struct field access in Swift, import both modules:
1878
+ </li>
1879
+
1880
+ </ul>
1881
+
1882
+ <div class="highlight">
1883
+ <pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Apex</span>
1884
+ <span class="kd">import</span><span class="w"> </span><span class="nc">ApexC</span>
1885
+ </pre>
1886
+ </div>
1887
+
1888
+ <p>
1889
+ You can get a default C options struct from the Objective-C bridge:
1890
+ </p>
1891
+
1892
+ <div class="highlight">
1893
+ <pre><span></span><span class="kd">var</span><span class="w"> </span><span class="nv">cOptions</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="bp">NSString</span><span class="p">.</span><span class="n">defaultApexOptions</span><span class="p">()</span>
1894
+ <span class="n">cOptions</span><span class="p">.</span><span class="n">enable_callouts</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
1895
+ <span class="n">cOptions</span><span class="p">.</span><span class="n">enable_plugins</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
1896
+ </pre>
1897
+ </div>
1898
+
1899
+ <p>
1900
+ Use this pattern when integrating plugins or other advanced features that require direct control over C-level options.
1901
+ </p>
1902
+
1903
+ <h3 Fragment id (same rules as `--id-format` / manual IDs) id="objective-c-bridge-alternative">
1904
+ Objective-C Bridge&nbsp;(Alternative)
1549
1905
  </h3>
1550
1906
 
1551
1907
  <p>
1552
1908
  You can also use the Objective-C API directly from Swift:
1553
1909
  </p>
1554
1910
 
1555
- <pre><code class="highlight language-swift"><span class="kd">import</span> <span class="kt">Foundation</span>
1911
+ <div class="highlight">
1912
+ <pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Foundation</span>
1556
1913
 
1557
- <span class="kt">Use</span> <span class="kt">Objective</span><span class="o">-</span><span class="kt">C</span> <span class="n">wrapper</span>
1558
- <span class="k">let</span> <span class="nv">html</span> <span class="o">=</span> <span class="kt">NSString</span><span class="o">.</span><span class="nf">convert</span><span class="p">(</span><span class="nv">withApex</span><span class="p">:</span> <span class="n">markdownText</span><span class="p">)</span>
1914
+ <span class="c1">// Use Objective-C wrapper</span>
1915
+ <span class="kd">let</span><span class="w"> </span><span class="nv">html</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="bp">NSString</span><span class="p">.</span><span class="n">convert</span><span class="p">(</span><span class="n">withApex</span><span class="p">:</span><span class="w"> </span><span class="n">markdownText</span><span class="p">)</span>
1559
1916
 
1560
- <span class="kt">With</span> <span class="n">mode</span> <span class="n">constants</span>
1561
- <span class="k">let</span> <span class="nv">gfmHtml</span> <span class="o">=</span> <span class="kt">NSString</span><span class="o">.</span><span class="nf">convert</span><span class="p">(</span><span class="nv">withApex</span><span class="p">:</span> <span class="n">markdownText</span><span class="p">,</span> <span class="nv">mode</span><span class="p">:</span> <span class="kt">ApexModeGFM</span><span class="p">)</span>
1917
+ <span class="c1">// With mode constants</span>
1918
+ <span class="kd">let</span><span class="w"> </span><span class="nv">gfmHtml</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="bp">NSString</span><span class="p">.</span><span class="n">convert</span><span class="p">(</span><span class="n">withApex</span><span class="p">:</span><span class="w"> </span><span class="n">markdownText</span><span class="p">,</span><span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="n">ApexModeGFM</span><span class="p">)</span>
1562
1919
 
1563
- <span class="kt">Dictionary</span><span class="o">-</span><span class="n">based</span> <span class="n">options</span>
1564
- <span class="k">let</span> <span class="nv">options</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">:</span> <span class="kt">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span>
1565
- <span class="s">"pretty"</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
1566
- <span class="s">"standalone"</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
1567
- <span class="s">"stylesheet"</span><span class="p">:</span> <span class="s">"style.css"</span>
1920
+ <span class="c1">// Dictionary-based options</span>
1921
+ <span class="kd">let</span><span class="w"> </span><span class="nv">options</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="nb">String</span><span class="p">:</span><span class="w"> </span><span class="nb">Any</span><span class="p">]</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">[</span>
1922
+ <span class="w"> </span><span class="s">&quot;pretty&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
1923
+ <span class="w"> </span><span class="s">&quot;standalone&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
1924
+ <span class="w"> </span><span class="s">&quot;stylesheet&quot;</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;style.css&quot;</span>
1568
1925
  <span class="p">]</span>
1569
- <span class="k">let</span> <span class="nv">configuredHtml</span> <span class="o">=</span> <span class="kt">NSString</span><span class="o">.</span><span class="nf">convert</span><span class="p">(</span>
1570
- <span class="nv">withApex</span><span class="p">:</span> <span class="n">markdownText</span><span class="p">,</span>
1571
- <span class="nv">mode</span><span class="p">:</span> <span class="kt">ApexModeUnified</span><span class="p">,</span>
1572
- <span class="nv">options</span><span class="p">:</span> <span class="n">options</span>
1926
+ <span class="kd">let</span><span class="w"> </span><span class="nv">configuredHtml</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="bp">NSString</span><span class="p">.</span><span class="n">convert</span><span class="p">(</span>
1927
+ <span class="w"> </span><span class="n">withApex</span><span class="p">:</span><span class="w"> </span><span class="n">markdownText</span><span class="p">,</span>
1928
+ <span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="n">ApexModeUnified</span><span class="p">,</span>
1929
+ <span class="w"> </span><span class="n">options</span><span class="p">:</span><span class="w"> </span><span class="n">options</span>
1573
1930
  <span class="p">)</span>
1574
- </code></pre>
1931
+ </pre>
1932
+ </div>
1575
1933
 
1576
1934
  <p>
1577
1935
  For direct C API access, create a Swift bridging header:
1578
1936
  </p>
1579
1937
 
1580
- <pre><code class="highlight language-swift"> <span class="kt">Bridging</span> <span class="n">header</span>
1581
- <span class="cp">#import &lt;Apex/apex.h&gt;</span>
1582
-
1583
- <span class="kt">Swift</span> <span class="n">code</span>
1584
- <span class="kd">func</span> <span class="nf">convertMarkdown</span><span class="p">(</span><span class="n">_</span> <span class="nv">text</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">String</span><span class="p">?</span> <span class="p">{</span>
1585
- <span class="k">let</span> <span class="nv">opts</span> <span class="o">=</span> <span class="nf">apex_options_default</span><span class="p">()</span>
1586
- <span class="k">let</span> <span class="nv">cString</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">utf8CString</span>
1587
- <span class="k">guard</span> <span class="k">let</span> <span class="nv">html</span> <span class="o">=</span> <span class="nf">apex_markdown_to_html</span><span class="p">(</span><span class="n">cString</span><span class="p">,</span> <span class="n">text</span><span class="o">.</span><span class="n">utf8</span><span class="o">.</span><span class="n">count</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">opts</span><span class="p">)</span> <span class="k">else</span> <span class="p">{</span>
1588
- <span class="k">return</span> <span class="kc">nil</span>
1589
- <span class="p">}</span>
1590
- <span class="k">defer</span> <span class="p">{</span> <span class="nf">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">)</span> <span class="p">}</span>
1591
- <span class="k">return</span> <span class="kt">String</span><span class="p">(</span><span class="nv">cString</span><span class="p">:</span> <span class="n">html</span><span class="p">)</span>
1938
+ <div class="highlight">
1939
+ <pre><span></span><span class="c1">// Bridging header</span>
1940
+ <span class="p">#</span><span class="kd">import</span><span class="w"> </span><span class="p">&lt;</span><span class="nc">Apex</span><span class="o">/</span><span class="nc">apex</span><span class="p">.</span><span class="nc">h</span><span class="p">&gt;</span>
1941
+
1942
+ <span class="c1">// Swift code</span>
1943
+ <span class="kd">func</span><span class="w"> </span><span class="nf">convertMarkdown</span><span class="p">(</span><span class="kc">_</span><span class="w"> </span><span class="n">text</span><span class="p">:</span><span class="w"> </span><span class="nb">String</span><span class="p">)</span><span class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span class="nb">String</span><span class="p">?</span><span class="w"> </span><span class="p">{</span>
1944
+ <span class="w"> </span><span class="kd">let</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>
1945
+ <span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nv">cString</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">text</span><span class="p">.</span><span class="n">utf8CString</span>
1946
+ <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">html</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">cString</span><span class="p">,</span><span class="w"> </span><span class="n">text</span><span class="p">.</span><span class="n">utf8</span><span class="p">.</span><span class="bp">count</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>
1947
+ <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span>
1948
+ <span class="w"> </span><span class="p">}</span>
1949
+ <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">html</span><span class="p">)</span><span class="w"> </span><span class="p">}</span>
1950
+ <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">html</span><span class="p">)</span>
1592
1951
  <span class="p">}</span>
1593
- </code></pre>
1952
+ </pre>
1953
+ </div>
1954
+
1955
+ <h2 id="plugin-catalog-and-installation">
1956
+ Plugin Catalog and&nbsp;Installation
1957
+ </h2>
1958
+
1959
+ <p>
1960
+ Apex exposes a first-class API for building plugin picker UIs in macOS and iOS apps. Fetch the central plugin directory, list installed plugins, and install or uninstall without shelling out to the CLI.
1961
+ </p>
1962
+
1963
+ <h3 id="swift-api-recommended">
1964
+ Swift API&nbsp;(recommended)
1965
+ </h3>
1966
+
1967
+ <div class="highlight">
1968
+ <pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Apex</span>
1969
+
1970
+ <span class="c1">// Fetch available plugins from apex-plugins.json</span>
1971
+ <span class="kd">let</span><span class="w"> </span><span class="nv">available</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">ApexPluginManager</span><span class="p">.</span><span class="n">fetchAvailable</span><span class="p">()</span>
1972
+
1973
+ <span class="k">for</span><span class="w"> </span><span class="n">plugin</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="p">{</span>
1974
+ <span class="w"> </span><span class="bp">print</span><span class="p">(</span><span class="n">plugin</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">plugin</span><span class="p">.</span><span class="n">title</span><span class="w"> </span><span class="p">??</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">plugin</span><span class="p">.</span><span class="n">repo</span><span class="w"> </span><span class="p">??</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">)</span>
1975
+ <span class="p">}</span>
1976
+
1977
+ <span class="c1">// List installed plugins (project + user-global)</span>
1978
+ <span class="kd">let</span><span class="w"> </span><span class="nv">installed</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">ApexPluginManager</span><span class="p">.</span><span class="n">installed</span><span class="p">(</span><span class="n">baseDirectory</span><span class="p">:</span><span class="w"> </span><span class="n">documentFolder</span><span class="p">.</span><span class="n">path</span><span class="p">)</span>
1979
+
1980
+ <span class="c1">// Install from the curated directory</span>
1981
+ <span class="k">try</span><span class="w"> </span><span class="n">ApexPluginManager</span><span class="p">.</span><span class="n">install</span><span class="p">(</span><span class="n">id</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;kbd&quot;</span><span class="p">)</span>
1982
+
1983
+ <span class="c1">// Install from a Git URL (requires explicit opt-in)</span>
1984
+ <span class="k">try</span><span class="w"> </span><span class="n">ApexPluginManager</span><span class="p">.</span><span class="n">install</span><span class="p">(</span>
1985
+ <span class="w"> </span><span class="n">idOrRepository</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;https://github.com/ApexMarkdown/apex-plugin-kbd.git&quot;</span><span class="p">,</span>
1986
+ <span class="w"> </span><span class="n">allowUntrustedSource</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span>
1987
+ <span class="p">)</span>
1988
+
1989
+ <span class="c1">// Uninstall from ~/.config/apex/plugins</span>
1990
+ <span class="k">try</span><span class="w"> </span><span class="n">ApexPluginManager</span><span class="p">.</span><span class="n">uninstall</span><span class="p">(</span><span class="n">id</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;kbd&quot;</span><span class="p">)</span>
1991
+
1992
+ <span class="c1">// Enable plugins when converting</span>
1993
+ <span class="kd">var</span><span class="w"> </span><span class="nv">options</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">ApexOptions</span><span class="p">()</span>
1994
+ <span class="n">options</span><span class="p">.</span><span class="n">enablePlugins</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
1995
+ <span class="kd">let</span><span class="w"> </span><span class="nv">html</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">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">,</span><span class="w"> </span><span class="n">options</span><span class="p">:</span><span class="w"> </span><span class="n">options</span><span class="p">)</span>
1996
+ </pre>
1997
+ </div>
1998
+
1999
+ <p>
2000
+ <code>ApexPluginInfo</code> is <code>Identifiable</code> and includes <code>id</code>, <code>title</code>, <code>description</code>, <code>author</code>, <code>homepage</code>, and <code>repo</code>.
2001
+ </p>
2002
+
2003
+ <h3 id="objective-c-api">
2004
+ Objective-C&nbsp;API
2005
+ </h3>
2006
+
2007
+ <div class="highlight">
2008
+ <pre><span></span><span class="cp">#import &quot;NSString+ApexPlugins.h&quot;</span>
2009
+
2010
+ <span class="bp">NSError</span><span class="w"> </span><span class="o">*</span><span class="n">error</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">nil</span><span class="p">;</span>
2011
+ <span class="bp">NSArray</span><span class="o">&lt;</span><span class="n">ApexPluginInfo</span><span class="w"> </span><span class="o">*&gt;</span><span class="w"> </span><span class="o">*</span><span class="n">available</span><span class="w"> </span><span class="o">=</span>
2012
+ <span class="w"> </span><span class="p">[</span><span class="n">ApexPluginCatalog</span><span class="w"> </span><span class="n">fetchAvailablePlugins</span><span class="o">:&amp;</span><span class="n">error</span><span class="p">];</span>
2013
+ <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>
2014
+ <span class="w"> </span><span class="n">NSLog</span><span class="p">(</span><span class="s">@&quot;Fetch failed: %@&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
2015
+ <span class="p">}</span>
2016
+
2017
+ <span class="bp">NSArray</span><span class="o">&lt;</span><span class="n">ApexPluginInfo</span><span class="w"> </span><span class="o">*&gt;</span><span class="w"> </span><span class="o">*</span><span class="n">installed</span><span class="w"> </span><span class="o">=</span>
2018
+ <span class="w"> </span><span class="p">[</span><span class="n">ApexPluginCatalog</span><span class="w"> </span><span class="n">installedPluginsWithBaseDirectory</span><span class="o">:</span><span class="n">documentPath</span><span class="p">];</span>
2019
+
2020
+ <span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="p">[</span><span class="n">ApexPluginCatalog</span><span class="w"> </span><span class="n">installPluginWithId</span><span class="o">:</span><span class="s">@&quot;kbd&quot;</span><span class="w"> </span><span class="n">error</span><span class="o">:&amp;</span><span class="n">error</span><span class="p">])</span><span class="w"> </span><span class="p">{</span>
2021
+ <span class="w"> </span><span class="n">NSLog</span><span class="p">(</span><span class="s">@&quot;Install failed: %@&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
2022
+ <span class="p">}</span>
2023
+
2024
+ <span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">pluginsDir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">ApexPluginCatalog</span><span class="w"> </span><span class="n">globalPluginsDirectory</span><span class="p">];</span>
2025
+ </pre>
2026
+ </div>
2027
+
2028
+ <h3 id="c-api">
2029
+ C&nbsp;API
2030
+ </h3>
2031
+
2032
+ <p>
2033
+ For direct C integration, see <a href="C-API#plugin-catalog-api">C API - Plugin Catalog API</a>. Include <code>apex/plugins.h</code> or <code>apexc.h</code>.
2034
+ </p>
2035
+
2036
+ <p>
2037
+ <strong>Requirements:</strong> Catalog fetch uses <code>curl</code>. Install/uninstall uses <code>git clone</code> and writes to <code>~/.config/apex/plugins</code> (or <code>$XDG_CONFIG_HOME/apex/plugins</code>). Confirm untrusted sources in your UI before calling install with <code>allowUntrustedSource: true</code>.
2038
+ </p>
1594
2039
 
1595
2040
  <h2 id="troubleshooting">
1596
2041
  Troubleshooting
1597
2042
  </h2>
1598
2043
 
1599
2044
  <h3 id="swift-package-manager-issues">
1600
- Swift Package Manager Issues
2045
+ Swift Package Manager&nbsp;Issues
1601
2046
  </h3>
1602
2047
 
1603
2048
  <p>
1604
- <strong> Package Resolution Fails:</strong>
2049
+ <strong>Package Resolution Fails:</strong>
1605
2050
  </p>
1606
2051
 
1607
2052
  <ul>
@@ -1625,7 +2070,7 @@ make
1625
2070
  </ul>
1626
2071
 
1627
2072
  <p>
1628
- <strong> Build Errors:</strong>
2073
+ <strong>Build Errors:</strong>
1629
2074
  </p>
1630
2075
 
1631
2076
  <ul>
@@ -1645,7 +2090,7 @@ make
1645
2090
  </ul>
1646
2091
 
1647
2092
  <p>
1648
- <strong> Module Not Found:</strong>
2093
+ <strong>Module Not Found:</strong>
1649
2094
  </p>
1650
2095
 
1651
2096
  <ul>
@@ -1664,8 +2109,24 @@ make
1664
2109
 
1665
2110
  </ul>
1666
2111
 
2112
+ <p>
2113
+ <strong>C options visible but fields unavailable:</strong>
2114
+ </p>
2115
+
2116
+ <ul>
2117
+
2118
+ <li>
2119
+ If <code>apex_options</code> appears in quick help but field access fails, add <code>import ApexC</code> next to <code>import Apex</code>
2120
+ </li>
2121
+
2122
+ <li>
2123
+ Clean and rebuild (<code>Product &gt; Clean Build Folder</code>) to refresh Xcode indexing and module cache
2124
+ </li>
2125
+
2126
+ </ul>
2127
+
1667
2128
  <h3 id="framework-not-found">
1668
- Framework Not Found
2129
+ Framework&nbsp;Not&nbsp;Found
1669
2130
  </h3>
1670
2131
 
1671
2132
  <p>
@@ -1689,7 +2150,7 @@ make
1689
2150
  </ol>
1690
2151
 
1691
2152
  <h3 id="linker-errors">
1692
- Linker Errors
2153
+ Linker&nbsp;Errors
1693
2154
  </h3>
1694
2155
 
1695
2156
  <ul>
@@ -1709,7 +2170,7 @@ make
1709
2170
  </ul>
1710
2171
 
1711
2172
  <h3 id="runtime-errors">
1712
- Runtime Errors
2173
+ Runtime&nbsp;Errors
1713
2174
  </h3>
1714
2175
 
1715
2176
  <ul>
@@ -1761,27 +2222,29 @@ make
1761
2222
  </p>
1762
2223
 
1763
2224
  <h2 id="module-map">
1764
- Module Map
2225
+ Module&nbsp;Map
1765
2226
  </h2>
1766
2227
 
1767
2228
  <p>
1768
2229
  Apex includes a module map (<code>include/apex/module.modulemap</code>) that allows Swift to import the C API directly:
1769
2230
  </p>
1770
2231
 
1771
- <pre><code class="highlight language-swift"><span class="kd">import</span> <span class="kt">Apex</span>
2232
+ <div class="highlight">
2233
+ <pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Apex</span>
1772
2234
 
1773
- <span class="kt">Direct</span> <span class="kt">C</span> <span class="kt">API</span> <span class="nf">access</span> <span class="p">(</span><span class="n">advanced</span> <span class="n">usage</span><span class="p">)</span>
1774
- <span class="k">let</span> <span class="nv">opts</span> <span class="o">=</span> <span class="nf">apex_options_default</span><span class="p">()</span>
1775
- <span class="o">...</span> <span class="n">configure</span> <span class="n">options</span> <span class="o">...</span>
1776
- <span class="k">let</span> <span class="nv">html</span> <span class="o">=</span> <span class="nf">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span> <span class="n">markdown</span><span class="o">.</span><span class="n">count</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">opts</span><span class="p">)</span>
1777
- </code></pre>
2235
+ <span class="c1">// Direct C API access (advanced usage)</span>
2236
+ <span class="kd">let</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>
2237
+ <span class="c1">// ... configure options ...</span>
2238
+ <span class="kd">let</span><span class="w"> </span><span class="nv">html</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">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="bp">count</span><span class="p">,</span><span class="w"> </span><span class="p">&amp;</span><span class="n">opts</span><span class="p">)</span>
2239
+ </pre>
2240
+ </div>
1778
2241
 
1779
2242
  <p>
1780
2243
  The module map is automatically included when using SPM or the framework.
1781
2244
  </p>
1782
2245
 
1783
2246
  <h2 id="comparison-of-integration-methods">
1784
- Comparison of Integration Methods
2247
+ Comparison of Integration&nbsp;Methods
1785
2248
  </h2>
1786
2249
 
1787
2250
  <table>
@@ -1815,7 +2278,7 @@ make
1815
2278
  <tr>
1816
2279
 
1817
2280
  <td>
1818
- <strong> Swift Package Manager</strong>
2281
+ <strong>Swift Package Manager</strong>
1819
2282
  </td>
1820
2283
 
1821
2284
  <td>
@@ -1874,7 +2337,7 @@ make
1874
2337
  </table>
1875
2338
 
1876
2339
  <p>
1877
- <strong> Recommendation:</strong> Use Swift Package Manager for the easiest integration and best cross-platform support.
2340
+ <strong>Recommendation:</strong> Use Swift Package Manager for the easiest integration and best cross-platform support.
1878
2341
  </p>
1879
2342
 
1880
2343
  <h2 id="related">
@@ -1884,19 +2347,52 @@ make
1884
2347
  <ul>
1885
2348
 
1886
2349
  <li>
1887
- <a href="C-API.html"> C API</a> - Direct C API documentation
2350
+ <a href="C-API.html">C API</a> - Direct C API documentation (includes plugin catalog API)
1888
2351
  </li>
1889
2352
 
1890
2353
  <li>
1891
- <a href="Usage.html"> Usage</a> - Basic usage examples
2354
+ <a href="Plugins.html">Plugins</a> - Plugin syntax and CLI install flags
1892
2355
  </li>
1893
2356
 
1894
2357
  <li>
1895
- <a href="Modes.html"> Modes</a> - Processor mode details
2358
+ <a href="Usage.html">Usage</a> - Basic usage examples
2359
+ </li>
2360
+
2361
+ <li>
2362
+ <a href="Modes.html">Modes</a> - Processor mode details
1896
2363
  </li>
1897
2364
 
1898
2365
  </ul>
1899
2366
 
2367
+ <h1 id="index-section">
2368
+ Index
2369
+ </h1>
2370
+
2371
+ <div class="index">
2372
+
2373
+ <dl>
2374
+
2375
+ <dt>
2376
+ A
2377
+ </dt>
2378
+
2379
+ <dd>
2380
+
2381
+ <ul>
2382
+
2383
+ <li>
2384
+
2385
+ available <a class="index-return" href="#idxref-0"><sup>[go]</sup></a>
2386
+ </li>
2387
+
2388
+ </ul>
2389
+
2390
+ </dd>
2391
+
2392
+ </dl>
2393
+
2394
+ </div>
2395
+
1900
2396
  <script>
1901
2397
  // Hamburger menu functionality
1902
2398
  (function() {