apex-ruby 1.0.30 → 1.0.31

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 (490) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -8
  3. data/apex-ruby.gemspec +14 -3
  4. data/ext/apex_ext/apex_src/include/apex/apex.h +11 -2
  5. data/ext/apex_ext/apex_src/src/apex.c +64 -5
  6. data/ext/apex_ext/apex_src/src/ast_terminal.c +2 -4
  7. data/ext/apex_ext/apex_src/src/extensions/callouts.c +103 -63
  8. data/ext/apex_ext/apex_src/src/extensions/callouts.h +3 -2
  9. data/ext/apex_ext/apex_src/src/extensions/citations.c +15 -2
  10. data/ext/apex_ext/apex_src/src/extensions/emoji.c +73 -7
  11. data/ext/apex_ext/apex_src/src/extensions/html_markdown.c +25 -4
  12. data/ext/apex_ext/apex_src/src/extensions/html_markdown.h +4 -1
  13. data/ext/apex_ext/apex_src/src/extensions/insert.c +49 -0
  14. data/ext/apex_ext/apex_src/src/extensions/metadata.c +275 -55
  15. data/ext/apex_ext/apex_src/src/extensions/metadata.h +9 -0
  16. data/ext/apex_ext/apex_src/src/extensions/relaxed_tables.c +172 -254
  17. data/ext/apex_ext/apex_src/src/extensions/table_html_postprocess.c +36 -127
  18. data/ext/apex_ext/apex_src/src/html_renderer.c +99 -157
  19. data/ext/apex_ext/extconf.rb +31 -79
  20. data/lib/apex/version.rb +1 -1
  21. metadata +1 -470
  22. data/ext/apex_ext/apex_src/AGENTS.md +0 -41
  23. data/ext/apex_ext/apex_src/BENCHMARK.md +0 -32
  24. data/ext/apex_ext/apex_src/BENCHMARK_COMPARISON.md +0 -67
  25. data/ext/apex_ext/apex_src/CHANGELOG.md +0 -3373
  26. data/ext/apex_ext/apex_src/CMakeLists.txt +0 -481
  27. data/ext/apex_ext/apex_src/Dockerfile.linux-build +0 -15
  28. data/ext/apex_ext/apex_src/Formula/apex.rb +0 -43
  29. data/ext/apex_ext/apex_src/Info.plist.in +0 -27
  30. data/ext/apex_ext/apex_src/Package.swift +0 -192
  31. data/ext/apex_ext/apex_src/PackageSupport/README.md +0 -17
  32. data/ext/apex_ext/apex_src/PackageSupport/cmark-gfm/cmark_gfm_spm_stub.c +0 -4
  33. data/ext/apex_ext/apex_src/README.md +0 -536
  34. data/ext/apex_ext/apex_src/ROADMAP.md +0 -5
  35. data/ext/apex_ext/apex_src/VERSION +0 -1
  36. data/ext/apex_ext/apex_src/apex-debug.log +0 -4
  37. data/ext/apex_ext/apex_src/apex-header-2-rb@2x.webp +0 -0
  38. data/ext/apex_ext/apex_src/apex-plugins.json.example +0 -20
  39. data/ext/apex_ext/apex_src/apex.code-workspace +0 -38
  40. data/ext/apex_ext/apex_src/apex.pc.in +0 -11
  41. data/ext/apex_ext/apex_src/apex.taskpaper +0 -12
  42. data/ext/apex_ext/apex_src/apex_deflist_debug.log +0 -25
  43. data/ext/apex_ext/apex_src/buildnotes.md +0 -1435
  44. data/ext/apex_ext/apex_src/cli/main.c +0 -4588
  45. data/ext/apex_ext/apex_src/debug.log +0 -7
  46. data/ext/apex_ext/apex_src/debug_test.sh +0 -22
  47. data/ext/apex_ext/apex_src/docs/API_REFERENCE.md +0 -451
  48. data/ext/apex_ext/apex_src/docs/ARCHITECTURE.md +0 -166
  49. data/ext/apex_ext/apex_src/docs/CITATIONS_EXAMPLES.md +0 -274
  50. data/ext/apex_ext/apex_src/docs/CITATIONS_IMPLEMENTATION_PLAN.md +0 -749
  51. data/ext/apex_ext/apex_src/docs/CITATIONS_PLAN.md +0 -744
  52. data/ext/apex_ext/apex_src/docs/CMARK_INTEGRATION.md +0 -220
  53. data/ext/apex_ext/apex_src/docs/CRITICMARKUP.md +0 -501
  54. data/ext/apex_ext/apex_src/docs/DEBUGGING.md +0 -73
  55. data/ext/apex_ext/apex_src/docs/FINAL_STATUS.md +0 -391
  56. data/ext/apex_ext/apex_src/docs/FINAL_STATUS_UPDATE.md +0 -237
  57. data/ext/apex_ext/apex_src/docs/IAL_FEATURES.md +0 -210
  58. data/ext/apex_ext/apex_src/docs/IAL_STATUS.md +0 -344
  59. data/ext/apex_ext/apex_src/docs/INDEX_IMPLEMENTATION_ANALYSIS.md +0 -382
  60. data/ext/apex_ext/apex_src/docs/INTEGRATION_EXAMPLE.m +0 -144
  61. data/ext/apex_ext/apex_src/docs/LIMITATIONS_RESOLVED.md +0 -278
  62. data/ext/apex_ext/apex_src/docs/OUTPUT_MODES.md +0 -321
  63. data/ext/apex_ext/apex_src/docs/PROGRESS.md +0 -167
  64. data/ext/apex_ext/apex_src/docs/STANDALONE_FEATURE.md +0 -174
  65. data/ext/apex_ext/apex_src/docs/TABLE_SPANS_STATUS.md +0 -243
  66. data/ext/apex_ext/apex_src/docs/TEST_COVERAGE.md +0 -316
  67. data/ext/apex_ext/apex_src/docs/USER_GUIDE.md +0 -803
  68. data/ext/apex_ext/apex_src/docs/WIKI_LINKS_ISSUE.md +0 -91
  69. data/ext/apex_ext/apex_src/docs/index.md +0 -459
  70. data/ext/apex_ext/apex_src/docs/plans/2025-02-27-man-page-output-implementation.md +0 -351
  71. data/ext/apex_ext/apex_src/docs/superpowers/plans/2026-07-12-toc-output-format.md +0 -745
  72. data/ext/apex_ext/apex_src/docs/superpowers/plans/2026-07-18-bear-image-attributes.md +0 -829
  73. data/ext/apex_ext/apex_src/docs/superpowers/plans/2026-07-19-apex-node-npm.md +0 -1148
  74. data/ext/apex_ext/apex_src/docs/superpowers/specs/2026-07-12-toc-output-format-design.md +0 -161
  75. data/ext/apex_ext/apex_src/docs/superpowers/specs/2026-07-18-bear-image-attributes-design.md +0 -184
  76. data/ext/apex_ext/apex_src/docs/superpowers/specs/2026-07-19-apex-node-npm-design.md +0 -211
  77. data/ext/apex_ext/apex_src/documentation/README.md +0 -160
  78. data/ext/apex_ext/apex_src/documentation/app-settings-table.md +0 -67
  79. data/ext/apex_ext/apex_src/documentation/app-transformed/Citations.md +0 -340
  80. data/ext/apex_ext/apex_src/documentation/app-transformed/Credits.md +0 -11
  81. data/ext/apex_ext/apex_src/documentation/app-transformed/Header-IDs.md +0 -234
  82. data/ext/apex_ext/apex_src/documentation/app-transformed/Inline-Attribute-Lists.md +0 -516
  83. data/ext/apex_ext/apex_src/documentation/app-transformed/Metadata-Transforms.md +0 -461
  84. data/ext/apex_ext/apex_src/documentation/app-transformed/Modes.md +0 -193
  85. data/ext/apex_ext/apex_src/documentation/app-transformed/Multi-File-Documents.md +0 -201
  86. data/ext/apex_ext/apex_src/documentation/app-transformed/Plugins.md +0 -678
  87. data/ext/apex_ext/apex_src/documentation/app-transformed/Syntax.md +0 -1367
  88. data/ext/apex_ext/apex_src/documentation/docsets/Apex Command Line Options.cheatsheet.txt +0 -371
  89. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Info.plist +0 -24
  90. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/C-API.html +0 -2211
  91. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Callouts.html +0 -1194
  92. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Citations.html +0 -1620
  93. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Command-Line-Options.html +0 -6024
  94. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Configuration.html +0 -1877
  95. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Credits.html +0 -1040
  96. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Examples.html +0 -1402
  97. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Filters.html +0 -1656
  98. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Generating-Man-Pages.html +0 -1226
  99. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Getting-Started.html +0 -1148
  100. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Header-IDs.html +0 -1478
  101. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Home.html +0 -1225
  102. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Indices.html +0 -2327
  103. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Inline-Attribute-Lists.html +0 -2041
  104. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Installation.html +0 -1314
  105. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Limitations-and-Roadmap.html +0 -1868
  106. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Metadata-Transforms.html +0 -1731
  107. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Modes.html +0 -2242
  108. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Multi-File-Documents.html +0 -1533
  109. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Multi-Format-Images.html +0 -1362
  110. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Pandoc-Integration.html +0 -1338
  111. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Plugins.html +0 -3188
  112. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Quarto-Mode.html +0 -1405
  113. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Rendering-Markdown-In-Terminal.html +0 -1902
  114. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Syntax.html +0 -4222
  115. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Tables.html +0 -1781
  116. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Troubleshooting.html +0 -1629
  117. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Usage.html +0 -1394
  118. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Using-Apex-with-Jekyll.html +0 -1132
  119. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Writing-Tests.html +0 -1754
  120. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Xcode-Integration.html +0 -2562
  121. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/docSet.dsidx +0 -0
  122. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/optimizedIndex.dsidx +0 -0
  123. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Info.plist +0 -22
  124. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans.woff +0 -0
  125. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans_Bold.woff +0 -0
  126. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans_Bold_Italic.woff +0 -0
  127. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans_Extrabold.woff +0 -0
  128. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans_Extrabold_Italic.woff +0 -0
  129. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans_Italic.woff +0 -0
  130. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans_Semibold.woff +0 -0
  131. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans_Semibold_Italic.woff +0 -0
  132. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/index.html +0 -914
  133. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/style.css +0 -399
  134. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/docSet.dsidx +0 -0
  135. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/optimizedIndex.dsidx +0 -0
  136. data/ext/apex_ext/apex_src/documentation/generate_app_docs.rb +0 -772
  137. data/ext/apex_ext/apex_src/documentation/generate_app_docs_ai.rb +0 -678
  138. data/ext/apex_ext/apex_src/documentation/generate_docset.rb +0 -873
  139. data/ext/apex_ext/apex_src/documentation/generate_single_html.rb +0 -733
  140. data/ext/apex_ext/apex_src/documentation/html/apex-app-docs.html +0 -8746
  141. data/ext/apex_ext/apex_src/documentation/html/apex-docs.html +0 -17073
  142. data/ext/apex_ext/apex_src/documentation/shared_scripts.js +0 -64
  143. data/ext/apex_ext/apex_src/documentation/shared_styles.css +0 -651
  144. data/ext/apex_ext/apex_src/documentation/transform_for_app.example.md +0 -260
  145. data/ext/apex_ext/apex_src/documentation/transform_for_app.md +0 -55
  146. data/ext/apex_ext/apex_src/escaping-repro.md +0 -103
  147. data/ext/apex_ext/apex_src/examples/bracketed_spans_demo.md +0 -119
  148. data/ext/apex_ext/apex_src/examples/emoji_span_plugin.yml +0 -11
  149. data/ext/apex_ext/apex_src/examples/example.html +0 -53
  150. data/ext/apex_ext/apex_src/examples/example.md +0 -85
  151. data/ext/apex_ext/apex_src/examples/fenced_divs_demo.md +0 -158
  152. data/ext/apex_ext/apex_src/examples/kbd.md +0 -8
  153. data/ext/apex_ext/apex_src/examples/kbd_plugin.rb +0 -250
  154. data/ext/apex_ext/apex_src/examples/kbd_plugin.yml +0 -9
  155. data/ext/apex_ext/apex_src/examples/quick-actions/Markdown to RTF.workflow/Contents/Info.plist +0 -8
  156. data/ext/apex_ext/apex_src/examples/quick-actions/Markdown to RTF.workflow/Contents/QuickLook/Preview.png +0 -0
  157. data/ext/apex_ext/apex_src/examples/quick-actions/Markdown to RTF.workflow/Contents/document.wflow +0 -547
  158. data/ext/apex_ext/apex_src/examples/quick-actions/Markdown-to-RTF.workflow.zip +0 -0
  159. data/ext/apex_ext/apex_src/examples/quick-actions/README.md +0 -33
  160. data/ext/apex_ext/apex_src/ial.html +0 -24
  161. data/ext/apex_ext/apex_src/icon/apexicon-outline-black.png +0 -0
  162. data/ext/apex_ext/apex_src/icon/apexicon-outline-black@2x.png +0 -0
  163. data/ext/apex_ext/apex_src/icon/apexicon-outline-mark.png +0 -0
  164. data/ext/apex_ext/apex_src/icon/apexicon-outline-mark@2x.png +0 -0
  165. data/ext/apex_ext/apex_src/icon/apexicon-outline-white.png +0 -0
  166. data/ext/apex_ext/apex_src/icon/apexicon-outline-white@2x.png +0 -0
  167. data/ext/apex_ext/apex_src/icon/apexicon.png +0 -0
  168. data/ext/apex_ext/apex_src/icon/apexicon@2x.png +0 -0
  169. data/ext/apex_ext/apex_src/man/apex-config.5 +0 -455
  170. data/ext/apex_ext/apex_src/man/apex-config.5.md +0 -262
  171. data/ext/apex_ext/apex_src/man/apex-plugins.7 +0 -541
  172. data/ext/apex_ext/apex_src/man/apex-plugins.7.md +0 -365
  173. data/ext/apex_ext/apex_src/man/apex.1 +0 -583
  174. data/ext/apex_ext/apex_src/man/apex.1.html +0 -703
  175. data/ext/apex_ext/apex_src/man/apex.1.md +0 -803
  176. data/ext/apex_ext/apex_src/man/apex.1.new +0 -338
  177. data/ext/apex_ext/apex_src/objc/Apex.swift +0 -316
  178. data/ext/apex_ext/apex_src/objc/ApexPlugins.swift +0 -79
  179. data/ext/apex_ext/apex_src/objc/NSString+Apex.h +0 -207
  180. data/ext/apex_ext/apex_src/objc/NSString+Apex.m +0 -584
  181. data/ext/apex_ext/apex_src/objc/NSString+ApexPlugins.h +0 -76
  182. data/ext/apex_ext/apex_src/objc/NSString+ApexPlugins.m +0 -169
  183. data/ext/apex_ext/apex_src/output.html +0 -87
  184. data/ext/apex_ext/apex_src/pages/index.md +0 -459
  185. data/ext/apex_ext/apex_src/plans/quarto-mode.md +0 -442
  186. data/ext/apex_ext/apex_src/src/_README.md +0 -413
  187. data/ext/apex_ext/apex_src/src/extensions/github-emoji.txt +0 -869
  188. data/ext/apex_ext/apex_src/test-linux-build.sh +0 -20
  189. data/ext/apex_ext/apex_src/test.html +0 -103
  190. data/ext/apex_ext/apex_src/test_coverage.sh +0 -121
  191. data/ext/apex_ext/apex_src/test_ial_fenced.md +0 -6
  192. data/ext/apex_ext/apex_src/test_math_norm.py +0 -79
  193. data/ext/apex_ext/apex_src/test_pandoc_output.html +0 -48
  194. data/ext/apex_ext/apex_src/test_spm.sh +0 -107
  195. data/ext/apex_ext/apex_src/tests/ApexSPMTest/main.swift +0 -50
  196. data/ext/apex_ext/apex_src/tests/BENCHMARK_RESULTS.md +0 -229
  197. data/ext/apex_ext/apex_src/tests/CMakeLists.txt +0 -25
  198. data/ext/apex_ext/apex_src/tests/README.md +0 -152
  199. data/ext/apex_ext/apex_src/tests/benchmark.sh +0 -113
  200. data/ext/apex_ext/apex_src/tests/benchmark_comparison.sh +0 -166
  201. data/ext/apex_ext/apex_src/tests/compare_header_ids.sh +0 -31
  202. data/ext/apex_ext/apex_src/tests/fixtures/basic/headers.md +0 -25
  203. data/ext/apex_ext/apex_src/tests/fixtures/basic/list-interruption.md +0 -24
  204. data/ext/apex_ext/apex_src/tests/fixtures/basic/misc_markup.md +0 -33
  205. data/ext/apex_ext/apex_src/tests/fixtures/basic/test_basic.md +0 -26
  206. data/ext/apex_ext/apex_src/tests/fixtures/code/code-blocks.md +0 -260
  207. data/ext/apex_ext/apex_src/tests/fixtures/combine_summary/SUMMARY.md +0 -6
  208. data/ext/apex_ext/apex_src/tests/fixtures/combine_summary/chapter1.md +0 -7
  209. data/ext/apex_ext/apex_src/tests/fixtures/combine_summary/index.txt +0 -9
  210. data/ext/apex_ext/apex_src/tests/fixtures/combine_summary/intro.md +0 -5
  211. data/ext/apex_ext/apex_src/tests/fixtures/combine_summary/section1_1.md +0 -5
  212. data/ext/apex_ext/apex_src/tests/fixtures/comprehensive_test.md +0 -652
  213. data/ext/apex_ext/apex_src/tests/fixtures/debug_ref_image_ial.md +0 -3
  214. data/ext/apex_ext/apex_src/tests/fixtures/demos/ial.md +0 -11
  215. data/ext/apex_ext/apex_src/tests/fixtures/demos/ial_demo.md +0 -177
  216. data/ext/apex_ext/apex_src/tests/fixtures/extensions/emoji-autocorrect.md +0 -94
  217. data/ext/apex_ext/apex_src/tests/fixtures/extensions/emoji_test.md +0 -3
  218. data/ext/apex_ext/apex_src/tests/fixtures/extensions/kbd_test.md +0 -3
  219. data/ext/apex_ext/apex_src/tests/fixtures/filters/filter_output_with_rawblock.json +0 -1
  220. data/ext/apex_ext/apex_src/tests/fixtures/filters/unwrap.md +0 -7
  221. data/ext/apex_ext/apex_src/tests/fixtures/ial/bracketed_spans_test.md +0 -74
  222. data/ext/apex_ext/apex_src/tests/fixtures/images/auto-wildcard.md +0 -8
  223. data/ext/apex_ext/apex_src/tests/fixtures/images/bear_image_attributes.md +0 -10
  224. data/ext/apex_ext/apex_src/tests/fixtures/images/image_and_encoding_test.md +0 -27
  225. data/ext/apex_ext/apex_src/tests/fixtures/images/img/app-pass-1-profile-menu.avif +0 -0
  226. data/ext/apex_ext/apex_src/tests/fixtures/images/img/app-pass-1-profile-menu.jpg +0 -0
  227. data/ext/apex_ext/apex_src/tests/fixtures/images/img/app-pass-1-profile-menu.webp +0 -0
  228. data/ext/apex_ext/apex_src/tests/fixtures/images/img/app-pass-1-profile-menu@2x.avif +0 -0
  229. data/ext/apex_ext/apex_src/tests/fixtures/images/img/app-pass-1-profile-menu@2x.jpg +0 -0
  230. data/ext/apex_ext/apex_src/tests/fixtures/images/img/app-pass-1-profile-menu@2x.webp +0 -0
  231. data/ext/apex_ext/apex_src/tests/fixtures/images/media_formats_test.md +0 -63
  232. data/ext/apex_ext/apex_src/tests/fixtures/images/multimarkdown_image_attributes_test.md +0 -60
  233. data/ext/apex_ext/apex_src/tests/fixtures/images/pandoc_ial_image_test.md +0 -27
  234. data/ext/apex_ext/apex_src/tests/fixtures/images/width_height_conversion_test.md +0 -94
  235. data/ext/apex_ext/apex_src/tests/fixtures/img-in-div.md +0 -16
  236. data/ext/apex_ext/apex_src/tests/fixtures/includes/code.py +0 -4
  237. data/ext/apex_ext/apex_src/tests/fixtures/includes/data-semi.csv +0 -3
  238. data/ext/apex_ext/apex_src/tests/fixtures/includes/data.csv +0 -5
  239. data/ext/apex_ext/apex_src/tests/fixtures/includes/data.tsv +0 -5
  240. data/ext/apex_ext/apex_src/tests/fixtures/includes/image.png +0 -2
  241. data/ext/apex_ext/apex_src/tests/fixtures/includes/metadata_options.yml +0 -11
  242. data/ext/apex_ext/apex_src/tests/fixtures/includes/nested.md +0 -8
  243. data/ext/apex_ext/apex_src/tests/fixtures/includes/raw.html +0 -4
  244. data/ext/apex_ext/apex_src/tests/fixtures/includes/sections.md +0 -19
  245. data/ext/apex_ext/apex_src/tests/fixtures/includes/sections.txt +0 -11
  246. data/ext/apex_ext/apex_src/tests/fixtures/includes/simple.md +0 -7
  247. data/ext/apex_ext/apex_src/tests/fixtures/includes/test_image.png +0 -0
  248. data/ext/apex_ext/apex_src/tests/fixtures/includes/with space.txt +0 -1
  249. data/ext/apex_ext/apex_src/tests/fixtures/large_doc.md +0 -1094
  250. data/ext/apex_ext/apex_src/tests/fixtures/metadata/mmd-metadata.md +0 -5
  251. data/ext/apex_ext/apex_src/tests/fixtures/metadata/pandoc-meta.md +0 -4
  252. data/ext/apex_ext/apex_src/tests/fixtures/metadata/yaml-frontmatter.md +0 -6
  253. data/ext/apex_ext/apex_src/tests/fixtures/metadata_options.yml +0 -11
  254. data/ext/apex_ext/apex_src/tests/fixtures/minimal_pb.md +0 -2
  255. data/ext/apex_ext/apex_src/tests/fixtures/obsidian-callouts.md +0 -46
  256. data/ext/apex_ext/apex_src/tests/fixtures/output/gfm_header_id_test.md +0 -96
  257. data/ext/apex_ext/apex_src/tests/fixtures/output/test_citations.md +0 -43
  258. data/ext/apex_ext/apex_src/tests/fixtures/output/test_def_list_links.md +0 -12
  259. data/ext/apex_ext/apex_src/tests/fixtures/output/test_index_mmark.md +0 -53
  260. data/ext/apex_ext/apex_src/tests/fixtures/output/test_index_textindex.md +0 -37
  261. data/ext/apex_ext/apex_src/tests/fixtures/pagebreak_html_repro.md +0 -5
  262. data/ext/apex_ext/apex_src/tests/fixtures/python-callouts.md +0 -47
  263. data/ext/apex_ext/apex_src/tests/fixtures/quarto/callouts.md +0 -3
  264. data/ext/apex_ext/apex_src/tests/fixtures/quarto/code-attrs.md +0 -3
  265. data/ext/apex_ext/apex_src/tests/fixtures/quarto/diagrams.md +0 -8
  266. data/ext/apex_ext/apex_src/tests/fixtures/quarto/lists.md +0 -19
  267. data/ext/apex_ext/apex_src/tests/fixtures/quarto/raw-content.md +0 -5
  268. data/ext/apex_ext/apex_src/tests/fixtures/quarto/shortcodes.md +0 -7
  269. data/ext/apex_ext/apex_src/tests/fixtures/quarto/smoke.md +0 -81
  270. data/ext/apex_ext/apex_src/tests/fixtures/quarto/spans.md +0 -5
  271. data/ext/apex_ext/apex_src/tests/fixtures/quarto-callouts.md +0 -47
  272. data/ext/apex_ext/apex_src/tests/fixtures/speed.md +0 -192
  273. data/ext/apex_ext/apex_src/tests/fixtures/tables/advanced_tables_test.md +0 -93
  274. data/ext/apex_ext/apex_src/tests/fixtures/tables/grid-tables.md +0 -37
  275. data/ext/apex_ext/apex_src/tests/fixtures/tables/inline_tables_test.md +0 -41
  276. data/ext/apex_ext/apex_src/tests/fixtures/tables/relaxed-table.md +0 -12
  277. data/ext/apex_ext/apex_src/tests/fixtures/tables/table_cr_line_endings.md +0 -15
  278. data/ext/apex_ext/apex_src/tests/fixtures/tables/table_no_trailing_newline.md +0 -15
  279. data/ext/apex_ext/apex_src/tests/generate_gfm_ids.sh +0 -105
  280. data/ext/apex_ext/apex_src/tests/generate_ial_demo.sh +0 -143
  281. data/ext/apex_ext/apex_src/tests/gfm_id_comparison_summary.md +0 -96
  282. data/ext/apex_ext/apex_src/tests/gh_api_test.md +0 -6
  283. data/ext/apex_ext/apex_src/tests/ial_demo.html +0 -186
  284. data/ext/apex_ext/apex_src/tests/include_code.py +0 -19
  285. data/ext/apex_ext/apex_src/tests/include_snippet.md +0 -15
  286. data/ext/apex_ext/apex_src/tests/metadata_cli_test.sh +0 -119
  287. data/ext/apex_ext/apex_src/tests/multi_file_cli_test.sh +0 -64
  288. data/ext/apex_ext/apex_src/tests/paginate_cli_test.sh +0 -80
  289. data/ext/apex_ext/apex_src/tests/sample_data.csv +0 -7
  290. data/ext/apex_ext/apex_src/tests/table_escaped_ltlt.md +0 -4
  291. data/ext/apex_ext/apex_src/tests/terminal_width_test.sh +0 -29
  292. data/ext/apex_ext/apex_src/tests/test-swift-package.sh +0 -14
  293. data/ext/apex_ext/apex_src/tests/test_basic.c +0 -74
  294. data/ext/apex_ext/apex_src/tests/test_bear_image_attrs.c +0 -301
  295. data/ext/apex_ext/apex_src/tests/test_cmark_callback.c +0 -189
  296. data/ext/apex_ext/apex_src/tests/test_concordance.tsv +0 -4
  297. data/ext/apex_ext/apex_src/tests/test_custom_plugins.c +0 -78
  298. data/ext/apex_ext/apex_src/tests/test_escaping_repro.c +0 -82
  299. data/ext/apex_ext/apex_src/tests/test_extensions.c +0 -3337
  300. data/ext/apex_ext/apex_src/tests/test_helpers.c +0 -183
  301. data/ext/apex_ext/apex_src/tests/test_helpers.h +0 -91
  302. data/ext/apex_ext/apex_src/tests/test_ial.c +0 -289
  303. data/ext/apex_ext/apex_src/tests/test_links.c +0 -418
  304. data/ext/apex_ext/apex_src/tests/test_marked_integration.c +0 -290
  305. data/ext/apex_ext/apex_src/tests/test_metadata.c +0 -1147
  306. data/ext/apex_ext/apex_src/tests/test_output.c +0 -2056
  307. data/ext/apex_ext/apex_src/tests/test_plugins.c +0 -219
  308. data/ext/apex_ext/apex_src/tests/test_refs.bib +0 -31
  309. data/ext/apex_ext/apex_src/tests/test_runner.c +0 -268
  310. data/ext/apex_ext/apex_src/tests/test_syntax_highlight.c +0 -198
  311. data/ext/apex_ext/apex_src/tests/test_tables.c +0 -1298
  312. data/ext/apex_ext/apex_src/tests/update_benchmarks.sh +0 -9
  313. data/ext/apex_ext/apex_src/tests/yaml_test.md +0 -13
  314. data/ext/apex_ext/apex_src/tests.rb +0 -39
  315. data/ext/apex_ext/apex_src/vendor/cmark-gfm/CMakeLists.txt +0 -48
  316. data/ext/apex_ext/apex_src/vendor/cmark-gfm/CheckFileOffsetBits.c +0 -14
  317. data/ext/apex_ext/apex_src/vendor/cmark-gfm/CheckFileOffsetBits.cmake +0 -43
  318. data/ext/apex_ext/apex_src/vendor/cmark-gfm/FindAsan.cmake +0 -74
  319. data/ext/apex_ext/apex_src/vendor/cmark-gfm/Makefile.nmake +0 -38
  320. data/ext/apex_ext/apex_src/vendor/cmark-gfm/README.md +0 -206
  321. data/ext/apex_ext/apex_src/vendor/cmark-gfm/api_test/CMakeLists.txt +0 -30
  322. data/ext/apex_ext/apex_src/vendor/cmark-gfm/api_test/cplusplus.cpp +0 -15
  323. data/ext/apex_ext/apex_src/vendor/cmark-gfm/api_test/cplusplus.h +0 -16
  324. data/ext/apex_ext/apex_src/vendor/cmark-gfm/api_test/harness.c +0 -111
  325. data/ext/apex_ext/apex_src/vendor/cmark-gfm/api_test/harness.h +0 -35
  326. data/ext/apex_ext/apex_src/vendor/cmark-gfm/api_test/main.c +0 -1169
  327. data/ext/apex_ext/apex_src/vendor/cmark-gfm/appveyor.yml +0 -21
  328. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-bq-flat.md +0 -16
  329. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-bq-nested.md +0 -13
  330. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-code.md +0 -11
  331. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-fences.md +0 -14
  332. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-heading.md +0 -9
  333. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-hr.md +0 -10
  334. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-html.md +0 -32
  335. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-lheading.md +0 -8
  336. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-list-flat.md +0 -67
  337. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-list-nested.md +0 -36
  338. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-ref-flat.md +0 -15
  339. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-ref-nested.md +0 -17
  340. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-autolink.md +0 -14
  341. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-backticks.md +0 -3
  342. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-em-flat.md +0 -5
  343. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-em-nested.md +0 -5
  344. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-em-worst.md +0 -5
  345. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-entity.md +0 -11
  346. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-escape.md +0 -15
  347. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-html.md +0 -44
  348. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-links-flat.md +0 -23
  349. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-links-nested.md +0 -13
  350. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-newlines.md +0 -24
  351. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/lorem1.md +0 -13
  352. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/rawtabs.md +0 -18
  353. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/statistics.py +0 -595
  354. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/stats.py +0 -19
  355. data/ext/apex_ext/apex_src/vendor/cmark-gfm/benchmarks.md +0 -33
  356. data/ext/apex_ext/apex_src/vendor/cmark-gfm/changelog.txt +0 -1245
  357. data/ext/apex_ext/apex_src/vendor/cmark-gfm/data/CaseFolding.txt +0 -1495
  358. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/CMakeLists.txt +0 -119
  359. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/ext_scanners.re +0 -92
  360. data/ext/apex_ext/apex_src/vendor/cmark-gfm/fuzz/CMakeLists.txt +0 -22
  361. data/ext/apex_ext/apex_src/vendor/cmark-gfm/fuzz/README.md +0 -12
  362. data/ext/apex_ext/apex_src/vendor/cmark-gfm/fuzz/fuzz_quadratic.c +0 -91
  363. data/ext/apex_ext/apex_src/vendor/cmark-gfm/fuzz/fuzz_quadratic_brackets.c +0 -110
  364. data/ext/apex_ext/apex_src/vendor/cmark-gfm/fuzz/fuzzloop.sh +0 -28
  365. data/ext/apex_ext/apex_src/vendor/cmark-gfm/man/CMakeLists.txt +0 -10
  366. data/ext/apex_ext/apex_src/vendor/cmark-gfm/man/make_man_page.py +0 -133
  367. data/ext/apex_ext/apex_src/vendor/cmark-gfm/man/man1/cmark-gfm.1 +0 -78
  368. data/ext/apex_ext/apex_src/vendor/cmark-gfm/man/man3/cmark-gfm.3 +0 -1041
  369. data/ext/apex_ext/apex_src/vendor/cmark-gfm/nmake.bat +0 -1
  370. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/CMakeLists.txt +0 -230
  371. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/cmark-gfm_version.h.in +0 -7
  372. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/config.h +0 -38
  373. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/config.h.in +0 -76
  374. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/libcmark-gfm.pc.in +0 -10
  375. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/scanners.re +0 -365
  376. data/ext/apex_ext/apex_src/vendor/cmark-gfm/suppressions +0 -10
  377. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/CMakeLists.txt +0 -114
  378. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/__pycache__/cmark.cpython-314.pyc +0 -0
  379. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/__pycache__/normalize.cpython-314.pyc +0 -0
  380. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/afl_test_cases/test.md +0 -49
  381. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/cmark-fuzz.c +0 -58
  382. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/cmark.py +0 -105
  383. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/entity_tests.py +0 -67
  384. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/extensions-full-info-string.txt +0 -0
  385. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/extensions-table-prefer-style-attributes.txt +0 -38
  386. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/extensions.txt +0 -989
  387. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/fuzzing_dictionary +0 -67
  388. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/normalize.py +0 -194
  389. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/pathological_tests.py +0 -160
  390. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/regression.txt +0 -375
  391. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/roundtrip_tests.py +0 -50
  392. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/run-cmark-fuzz +0 -4
  393. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/smart_punct.txt +0 -177
  394. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/spec.txt +0 -10212
  395. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/spec_tests.py +0 -152
  396. data/ext/apex_ext/apex_src/vendor/cmark-gfm/toolchain-mingw32.cmake +0 -17
  397. data/ext/apex_ext/apex_src/vendor/cmark-gfm/tools/Dockerfile +0 -41
  398. data/ext/apex_ext/apex_src/vendor/cmark-gfm/tools/appveyor-build.bat +0 -13
  399. data/ext/apex_ext/apex_src/vendor/cmark-gfm/tools/make_entities_inc.py +0 -32
  400. data/ext/apex_ext/apex_src/vendor/cmark-gfm/tools/mkcasefold.pl +0 -22
  401. data/ext/apex_ext/apex_src/vendor/cmark-gfm/tools/xml2md.xsl +0 -319
  402. data/ext/apex_ext/apex_src/vendor/cmark-gfm/tools/xml2md_gfm.xsl +0 -80
  403. data/ext/apex_ext/apex_src/vendor/cmark-gfm/why-cmark-and-not-x.md +0 -104
  404. data/ext/apex_ext/apex_src/vendor/cmark-gfm/wrappers/wrapper.js +0 -6
  405. data/ext/apex_ext/apex_src/vendor/cmark-gfm/wrappers/wrapper.py +0 -37
  406. data/ext/apex_ext/apex_src/vendor/cmark-gfm/wrappers/wrapper.rb +0 -15
  407. data/ext/apex_ext/apex_src/vendor/cmark-gfm/wrappers/wrapper.rkt +0 -208
  408. data/ext/apex_ext/apex_src/vendor/cmark-gfm/wrappers/wrapper_ext.py +0 -109
  409. data/ext/apex_ext/apex_src/vendor/libyaml/CMakeLists.txt +0 -160
  410. data/ext/apex_ext/apex_src/vendor/libyaml/Changes +0 -372
  411. data/ext/apex_ext/apex_src/vendor/libyaml/License +0 -20
  412. data/ext/apex_ext/apex_src/vendor/libyaml/Makefile.am +0 -51
  413. data/ext/apex_ext/apex_src/vendor/libyaml/ReadMe.md +0 -46
  414. data/ext/apex_ext/apex_src/vendor/libyaml/announcement.msg +0 -89
  415. data/ext/apex_ext/apex_src/vendor/libyaml/bootstrap +0 -3
  416. data/ext/apex_ext/apex_src/vendor/libyaml/cmake/config.h.in +0 -4
  417. data/ext/apex_ext/apex_src/vendor/libyaml/configure.ac +0 -73
  418. data/ext/apex_ext/apex_src/vendor/libyaml/doc/doxygen.cfg +0 -222
  419. data/ext/apex_ext/apex_src/vendor/libyaml/docker/README.mkd +0 -17
  420. data/ext/apex_ext/apex_src/vendor/libyaml/docker/alpine-3.7 +0 -26
  421. data/ext/apex_ext/apex_src/vendor/libyaml/docker/fedora-25 +0 -26
  422. data/ext/apex_ext/apex_src/vendor/libyaml/docker/ubuntu-14.04 +0 -29
  423. data/ext/apex_ext/apex_src/vendor/libyaml/docker/ubuntu-16.04 +0 -24
  424. data/ext/apex_ext/apex_src/vendor/libyaml/examples/anchors.yaml +0 -10
  425. data/ext/apex_ext/apex_src/vendor/libyaml/examples/array.yaml +0 -2
  426. data/ext/apex_ext/apex_src/vendor/libyaml/examples/global-tag.yaml +0 -14
  427. data/ext/apex_ext/apex_src/vendor/libyaml/examples/json.yaml +0 -1
  428. data/ext/apex_ext/apex_src/vendor/libyaml/examples/mapping.yaml +0 -2
  429. data/ext/apex_ext/apex_src/vendor/libyaml/examples/numbers.yaml +0 -1
  430. data/ext/apex_ext/apex_src/vendor/libyaml/examples/strings.yaml +0 -7
  431. data/ext/apex_ext/apex_src/vendor/libyaml/examples/tags.yaml +0 -7
  432. data/ext/apex_ext/apex_src/vendor/libyaml/examples/yaml-version.yaml +0 -3
  433. data/ext/apex_ext/apex_src/vendor/libyaml/include/Makefile.am +0 -17
  434. data/ext/apex_ext/apex_src/vendor/libyaml/include/yaml.h +0 -1999
  435. data/ext/apex_ext/apex_src/vendor/libyaml/pkg/ReadMe.md +0 -77
  436. data/ext/apex_ext/apex_src/vendor/libyaml/pkg/docker/Dockerfile +0 -32
  437. data/ext/apex_ext/apex_src/vendor/libyaml/pkg/docker/output/ReadMe +0 -1
  438. data/ext/apex_ext/apex_src/vendor/libyaml/pkg/docker/scripts/libyaml-dist.sh +0 -23
  439. data/ext/apex_ext/apex_src/vendor/libyaml/regression-inputs/clusterfuzz-testcase-minimized-5607885063061504.yml +0 -1
  440. data/ext/apex_ext/apex_src/vendor/libyaml/src/Makefile.am +0 -4
  441. data/ext/apex_ext/apex_src/vendor/libyaml/src/api.c +0 -1393
  442. data/ext/apex_ext/apex_src/vendor/libyaml/src/dumper.c +0 -394
  443. data/ext/apex_ext/apex_src/vendor/libyaml/src/emitter.c +0 -2358
  444. data/ext/apex_ext/apex_src/vendor/libyaml/src/loader.c +0 -544
  445. data/ext/apex_ext/apex_src/vendor/libyaml/src/parser.c +0 -1416
  446. data/ext/apex_ext/apex_src/vendor/libyaml/src/reader.c +0 -469
  447. data/ext/apex_ext/apex_src/vendor/libyaml/src/scanner.c +0 -3598
  448. data/ext/apex_ext/apex_src/vendor/libyaml/src/writer.c +0 -141
  449. data/ext/apex_ext/apex_src/vendor/libyaml/src/yaml_private.h +0 -684
  450. data/ext/apex_ext/apex_src/vendor/libyaml/tests/CMakeLists.txt +0 -27
  451. data/ext/apex_ext/apex_src/vendor/libyaml/tests/Makefile.am +0 -9
  452. data/ext/apex_ext/apex_src/vendor/libyaml/tests/ReadMe.md +0 -63
  453. data/ext/apex_ext/apex_src/vendor/libyaml/tests/example-deconstructor-alt.c +0 -800
  454. data/ext/apex_ext/apex_src/vendor/libyaml/tests/example-deconstructor.c +0 -1127
  455. data/ext/apex_ext/apex_src/vendor/libyaml/tests/example-reformatter-alt.c +0 -217
  456. data/ext/apex_ext/apex_src/vendor/libyaml/tests/example-reformatter.c +0 -202
  457. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-all-tests.sh +0 -29
  458. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-dumper.c +0 -314
  459. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-emitter-test-suite.c +0 -290
  460. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-emitter.c +0 -327
  461. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-loader.c +0 -63
  462. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-parser-test-suite.c +0 -196
  463. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-parser.c +0 -88
  464. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-scanner.c +0 -63
  465. data/ext/apex_ext/apex_src/vendor/libyaml/tests/test-reader.c +0 -354
  466. data/ext/apex_ext/apex_src/vendor/libyaml/tests/test-version.c +0 -29
  467. data/ext/apex_ext/apex_src/vendor/libyaml/yaml-0.1.pc.in +0 -10
  468. data/ext/apex_ext/apex_src/vendor/libyaml/yamlConfig.cmake.in +0 -16
  469. data/ext/apex_ext/apex_src/xcode_build/CMakeScripts/ReRunCMake.make +0 -74
  470. data/ext/apex_ext/apex_src/xcode_build/CTestTestfile.cmake +0 -22
  471. data/ext/apex_ext/apex_src/xcode_build/Debug/Apex.framework/Versions/A/Apex +0 -0
  472. data/ext/apex_ext/apex_src/xcode_build/Debug/Apex.framework/Versions/A/Resources/Info.plist +0 -44
  473. data/ext/apex_ext/apex_src/xcode_build/Debug/Apex.framework/Versions/A/_CodeSignature/CodeResources +0 -128
  474. data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/project.pbxproj +0 -5118
  475. data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +0 -8
  476. data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/project.xcworkspace/xcuserdata/ttscoff.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  477. data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/project.xcworkspace/xcuserdata/ttscoff.xcuserdatad/WorkspaceSettings.xcsettings +0 -8
  478. data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/xcuserdata/ttscoff.xcuserdatad/xcschemes/xcschememanagement.plist +0 -99
  479. data/ext/apex_ext/apex_src/xcode_build/cmake_install.cmake +0 -452
  480. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/CMakeScripts/ReRunCMake.make +0 -52
  481. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/cmake_install.cmake +0 -55
  482. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/cmark-gfm.xcodeproj/project.pbxproj +0 -2455
  483. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/cmark-gfm.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +0 -8
  484. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/extensions/cmake_install.cmake +0 -171
  485. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/man/cmake_install.cmake +0 -55
  486. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/cmake_install.cmake +0 -220
  487. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/cmark-gfm_export.h +0 -43
  488. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/cmark-gfm_version.h +0 -7
  489. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/config.h +0 -76
  490. data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/libcmark-gfm.pc +0 -10
@@ -1,2562 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
-
6
- <meta charset="UTF-8">
7
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
- <meta name="generator" content="Apex 1.1.12">
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>
99
- <style>
100
- body {
101
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
102
- line-height: 1.6;
103
- max-width: 800px;
104
- margin: 2rem auto;
105
- padding: 0 1rem;
106
- color: #333;
107
- }
108
- pre { background: #f5f5f5; padding: 1rem; overflow-x: auto; }
109
- code { background: #f0f0f0; padding: 0.2em 0.4em; border-radius: 3px; }
110
- blockquote { border-left: 4px solid #ddd; margin: 0; padding-left: 1rem; color: #666; }
111
- table { border-collapse: collapse; width: 100%%; }
112
- th, td { border: 1px solid #ddd; padding: 0.5rem; }
113
- th { background: #f5f5f5; }
114
- tfoot td { background: #e8e8e8; }
115
- figure.table-figure { width: fit-content; margin: 1em 0; }
116
- figure.table-figure table { width: auto; }
117
- figcaption { text-align: center; font-weight: bold; font-size: 0.8em; }
118
- .page-break { page-break-after: always; }
119
- .callout { padding: 1rem; margin: 1rem 0; border-left: 4px solid; }
120
- .callout-note { border-color: #3b82f6; background: #eff6ff; }
121
- .callout-warning { border-color: #f59e0b; background: #fffbeb; }
122
- .callout-tip { border-color: #10b981; background: #f0fdf4; }
123
- .callout-danger { border-color: #ef4444; background: #fef2f2; }
124
- ins { background: #d4fcbc; text-decoration: none; }
125
- del { background: #fbb6c2; text-decoration: line-through; }
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; }
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
- }
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
-
165
- <style>
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) */
173
- body {
174
- -webkit-font-smoothing: antialiased;
175
- -moz-osx-font-smoothing: grayscale;
176
- font-size: 17px;
177
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
178
- "Helvetica Neue", Arial, sans-serif;
179
- line-height: 1.65;
180
- color: #1e293b;
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;
187
- }
188
-
189
- /* Sidebar / Main TOC - wider on larger screens */
190
- .main-toc,
191
- .sidebar {
192
- position: fixed;
193
- left: 0;
194
- top: 0;
195
- box-sizing: border-box;
196
- width: var(--sidebar-width);
197
- min-width: var(--sidebar-width);
198
- max-width: var(--sidebar-width);
199
- height: 100vh;
200
- overflow-y: auto;
201
- background: #1e293b;
202
- color: rgba(255, 255, 255, 0.9);
203
- border-right: 2px solid rgba(255, 255, 255, 0.1);
204
- padding: 24px 20px 130px;
205
- font-size: 14px;
206
- z-index: 100;
207
- box-shadow: 4px 0 24px rgba(0, 0, 0, 0.08);
208
- transition: transform 0.3s ease;
209
- }
210
-
211
- .main-toc ul,
212
- .sidebar ul {
213
- list-style: none;
214
- padding-left: 0;
215
- margin: 0;
216
- padding-bottom: 80px;
217
- }
218
-
219
- .main-toc ul::after,
220
- .sidebar ul::after {
221
- content: "";
222
- display: block;
223
- height: 80px;
224
- }
225
-
226
- .main-toc li,
227
- .sidebar li {
228
- margin: 0.25em 0;
229
- }
230
-
231
- .main-toc a,
232
- .sidebar a {
233
- color: rgba(255, 255, 255, 0.85);
234
- text-decoration: none;
235
- display: block;
236
- padding: 6px 12px;
237
- border-radius: 4px;
238
- transition: all 0.15s ease;
239
- white-space: nowrap;
240
- overflow: hidden;
241
- text-overflow: ellipsis;
242
- }
243
-
244
- .main-toc a:hover,
245
- .sidebar a:hover {
246
- background: #334155;
247
- color: #fff;
248
- }
249
-
250
- .sidebar a.active {
251
- color: #0ea5e9;
252
- font-weight: 500;
253
- }
254
-
255
- /* Hamburger menu button */
256
- .hamburger-menu {
257
- display: none;
258
- position: fixed;
259
- top: 12px;
260
- left: 12px;
261
- z-index: 200;
262
- background: #1e293b;
263
- border: 2px solid rgba(255, 255, 255, 0.1);
264
- border-radius: 6px;
265
- padding: 10px;
266
- cursor: pointer;
267
- color: rgba(255, 255, 255, 0.9);
268
- font-size: 20px;
269
- line-height: 1;
270
- box-sizing: border-box;
271
- width: 44px;
272
- height: 44px;
273
- align-items: center;
274
- justify-content: center;
275
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
276
- transition: all 0.2s ease;
277
- opacity: 0.2;
278
- }
279
-
280
- .hamburger-menu:hover {
281
- background: #334155;
282
- color: #fff;
283
- opacity: 1;
284
- }
285
-
286
- /* Move hamburger to the right of the sidebar when menu is open */
287
- .hamburger-menu.active {
288
- left: calc(var(--sidebar-width) + 12px);
289
- }
290
-
291
- .hamburger-menu.active {
292
- background: #0ea5e9;
293
- }
294
-
295
- .hamburger-menu::before {
296
- content: "☰";
297
- }
298
-
299
- .hamburger-menu.active::before {
300
- content: "✕";
301
- }
302
-
303
- /* Mobile menu overlay */
304
- .mobile-menu-overlay {
305
- display: none;
306
- position: fixed;
307
- top: 0;
308
- left: 0;
309
- right: 0;
310
- bottom: 0;
311
- background: rgba(0, 0, 0, 0.5);
312
- z-index: 150;
313
- opacity: 0;
314
- visibility: hidden;
315
- transition: opacity 0.3s ease, visibility 0.3s ease;
316
- }
317
-
318
- .mobile-menu-overlay.active {
319
- opacity: 1;
320
- visibility: visible;
321
- }
322
-
323
- /* Page TOC */
324
- .page-toc {
325
- background: #f9f9f9;
326
- border: 1px solid #ddd;
327
- border-radius: 4px;
328
- padding: 1rem;
329
- margin: 1.5rem 0;
330
- }
331
-
332
- .page-toc ul {
333
- list-style: none;
334
- padding-left: 0;
335
- margin: 0;
336
- }
337
-
338
- .page-toc > ul {
339
- padding-left: 0;
340
- }
341
-
342
- .page-toc li {
343
- margin: 0.25em 0;
344
- }
345
-
346
- .page-toc a {
347
- color: #0066cc;
348
- text-decoration: none;
349
- display: block;
350
- padding: 0.25em 0.5em;
351
- border-radius: 3px;
352
- }
353
-
354
- .page-toc a:hover {
355
- background: #e0e0e0;
356
- color: #004499;
357
- }
358
-
359
- .page-toc ul ul {
360
- list-style: none;
361
- padding-left: 1.5em;
362
- margin-top: 0.25em;
363
- margin-left: 0;
364
- }
365
-
366
- .page-toc ul ul ul {
367
- padding-left: 1.5em;
368
- }
369
-
370
- .page-toc ul ul a {
371
- font-size: 0.9em;
372
- color: #555;
373
- }
374
-
375
- .page-toc ul ul ul a {
376
- font-size: 0.85em;
377
- color: #666;
378
- }
379
-
380
- /* Floating TOC */
381
- .floating-toc {
382
- position: fixed;
383
- top: 0;
384
- left: var(--sidebar-offset);
385
- right: 0;
386
- z-index: 50;
387
- opacity: 0;
388
- visibility: hidden;
389
- transition: opacity 0.2s ease, visibility 0.2s ease;
390
- pointer-events: none;
391
- display: flex;
392
- justify-content: flex-end;
393
- padding-right: 2rem;
394
- }
395
-
396
- .floating-toc.visible {
397
- opacity: 1;
398
- visibility: visible;
399
- pointer-events: auto;
400
- }
401
-
402
- .floating-toc-container {
403
- background: rgba(255, 255, 255, 0.95);
404
- backdrop-filter: blur(10px);
405
- border-bottom: 1px solid #ddd;
406
- border-radius: 0 0 12px 12px;
407
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
408
- width: fit-content;
409
- max-width: 400px;
410
- min-width: 200px;
411
- overflow: hidden;
412
- transition: max-height 0.3s ease;
413
- }
414
-
415
- .floating-toc-header {
416
- padding: 8px 16px;
417
- cursor: pointer;
418
- user-select: none;
419
- font-size: 14px;
420
- font-weight: 500;
421
- color: #1e293b;
422
- display: flex;
423
- align-items: center;
424
- justify-content: space-between;
425
- }
426
-
427
- .floating-toc-header:hover {
428
- background: rgba(0, 0, 0, 0.02);
429
- }
430
-
431
- .floating-toc-content {
432
- max-height: 0;
433
- overflow: hidden;
434
- transition: max-height 0.3s ease;
435
- }
436
-
437
- .floating-toc-container:hover .floating-toc-content {
438
- max-height: 70vh;
439
- overflow-y: auto;
440
- }
441
-
442
- .floating-toc-content ul {
443
- list-style: none;
444
- padding: 8px 16px 16px;
445
- margin: 0;
446
- }
447
-
448
- .floating-toc-content li {
449
- margin: 0.1em 0;
450
- }
451
-
452
- .floating-toc-content a {
453
- color: #0066cc;
454
- text-decoration: none;
455
- display: block;
456
- padding: 0.2em 0.5em;
457
- border-radius: 4px;
458
- font-size: 13px;
459
- transition: background 0.15s ease;
460
- }
461
-
462
- .floating-toc-content a:hover {
463
- background: #e0e0e0;
464
- color: #004499;
465
- }
466
-
467
- .floating-toc-content ul ul {
468
- padding-left: 1.2em;
469
- margin-top: 0;
470
- margin-bottom: 0;
471
- }
472
-
473
- .floating-toc-content ul ul ul {
474
- margin-top: 0;
475
- margin-bottom: 0;
476
- }
477
-
478
- .floating-toc-content ul ul a {
479
- font-size: 12px;
480
- color: #555;
481
- }
482
-
483
- .floating-toc-content ul ul ul a {
484
- font-size: 11px;
485
- color: #666;
486
- }
487
-
488
- /* Smooth scrolling */
489
- html {
490
- scroll-behavior: smooth;
491
- }
492
-
493
- /* Code blocks */
494
- code {
495
- background: #f0f0f0;
496
- padding: 0.2em 0.4em;
497
- border-radius: 3px;
498
- font-family: "Monaco", "Menlo", "Ubuntu Mono", monospace;
499
- font-size: 0.9em;
500
- margin: 0 0.1em;
501
- }
502
-
503
- pre {
504
- background: #f5f5f5;
505
- padding: 1rem;
506
- overflow-x: auto;
507
- border-radius: 4px;
508
- margin: 1em 0;
509
- }
510
-
511
- pre code {
512
- background: none;
513
- padding: 0;
514
- margin: 0;
515
- }
516
-
517
- /* Rouge syntax highlighting - GitHub theme, scoped to .highlight containers */
518
- .highlight {
519
- color: #24292e;
520
- }
521
-
522
- .highlight .c {
523
- color: #6a737d;
524
- font-style: italic;
525
- } /* Comment */
526
- .highlight .err {
527
- color: #a61717;
528
- background-color: #e3d2d2;
529
- } /* Error */
530
- .highlight .k {
531
- color: #d73a49;
532
- font-weight: bold;
533
- } /* Keyword */
534
- .highlight .l {
535
- color: #032f62;
536
- } /* Literal */
537
- .highlight .n {
538
- color: #24292e;
539
- } /* Name */
540
- .highlight .o {
541
- color: #d73a49;
542
- } /* Operator */
543
- .highlight .p {
544
- color: #24292e;
545
- } /* Punctuation */
546
- .highlight .cm {
547
- color: #6a737d;
548
- font-style: italic;
549
- } /* Comment.Multiline */
550
- .highlight .cp {
551
- color: #6a737d;
552
- font-weight: bold;
553
- } /* Comment.Preproc */
554
- .highlight .c1 {
555
- color: #6a737d;
556
- font-style: italic;
557
- } /* Comment.Single */
558
- .highlight .cs {
559
- color: #6a737d;
560
- font-weight: bold;
561
- font-style: italic;
562
- } /* Comment.Special */
563
- .highlight .gd {
564
- color: #24292e;
565
- background-color: #ffeef0;
566
- } /* Generic.Deleted */
567
- .highlight .ge {
568
- color: #24292e;
569
- font-style: italic;
570
- } /* Generic.Emph */
571
- .highlight .gr {
572
- color: #aa0000;
573
- } /* Generic.Error */
574
- .highlight .gh {
575
- color: #999999;
576
- font-weight: bold;
577
- } /* Generic.Heading */
578
- .highlight .gi {
579
- color: #24292e;
580
- background-color: #f0fff4;
581
- } /* Generic.Inserted */
582
- .highlight .go {
583
- color: #888888;
584
- } /* Generic.Output */
585
- .highlight .gp {
586
- color: #555555;
587
- } /* Generic.Prompt */
588
- .highlight .gs {
589
- font-weight: bold;
590
- } /* Generic.Strong */
591
- .highlight .gu {
592
- color: #aaaaaa;
593
- } /* Generic.Subheading */
594
- .highlight .gt {
595
- color: #aa0000;
596
- } /* Generic.Traceback */
597
- .highlight .kc {
598
- color: #d73a49;
599
- font-weight: bold;
600
- } /* Keyword.Constant */
601
- .highlight .kd {
602
- color: #d73a49;
603
- font-weight: bold;
604
- } /* Keyword.Declaration */
605
- .highlight .kn {
606
- color: #d73a49;
607
- font-weight: bold;
608
- } /* Keyword.Namespace */
609
- .highlight .kp {
610
- color: #d73a49;
611
- font-weight: bold;
612
- } /* Keyword.Pseudo */
613
- .highlight .kr {
614
- color: #d73a49;
615
- font-weight: bold;
616
- } /* Keyword.Reserved */
617
- .highlight .kt {
618
- color: #d73a49;
619
- font-weight: bold;
620
- } /* Keyword.Type */
621
- .highlight .ld {
622
- color: #032f62;
623
- } /* Literal.Date */
624
- .highlight .m {
625
- color: #005cc5;
626
- } /* Literal.Number */
627
- .highlight .s {
628
- color: #032f62;
629
- } /* Literal.String */
630
- .highlight .na {
631
- color: #6f42c1;
632
- } /* Name.Attribute */
633
- .highlight .nb {
634
- color: #005cc5;
635
- } /* Name.Builtin */
636
- .highlight .nc {
637
- color: #6f42c1;
638
- font-weight: bold;
639
- } /* Name.Class */
640
- .highlight .no {
641
- color: #005cc5;
642
- } /* Name.Constant */
643
- .highlight .nd {
644
- color: #6f42c1;
645
- font-weight: bold;
646
- } /* Name.Decorator */
647
- .highlight .ni {
648
- color: #800080;
649
- } /* Name.Entity */
650
- .highlight .ne {
651
- color: #990000;
652
- font-weight: bold;
653
- } /* Name.Exception */
654
- .highlight .nf {
655
- color: #6f42c1;
656
- } /* Name.Function */
657
- .highlight .nl {
658
- color: #990000;
659
- } /* Name.Label */
660
- .highlight .nn {
661
- color: #555555;
662
- } /* Name.Namespace */
663
- .highlight .nx {
664
- color: #6f42c1;
665
- } /* Name.Other */
666
- .highlight .py {
667
- color: #990000;
668
- } /* Name.Property */
669
- .highlight .nt {
670
- color: #22863a;
671
- } /* Name.Tag */
672
- .highlight .nv {
673
- color: #e36209;
674
- } /* Name.Variable */
675
- .highlight .ow {
676
- color: #d73a49;
677
- font-weight: bold;
678
- } /* Operator.Word */
679
- .highlight .w {
680
- color: #bbbbbb;
681
- } /* Text.Whitespace */
682
- .highlight .mf {
683
- color: #005cc5;
684
- } /* Literal.Number.Float */
685
- .highlight .mh {
686
- color: #005cc5;
687
- } /* Literal.Number.Hex */
688
- .highlight .mi {
689
- color: #005cc5;
690
- } /* Literal.Number.Integer */
691
- .highlight .mo {
692
- color: #005cc5;
693
- } /* Literal.Number.Oct */
694
- .highlight .sb {
695
- color: #032f62;
696
- } /* Literal.String.Backtick */
697
- .highlight .sc {
698
- color: #032f62;
699
- } /* Literal.String.Char */
700
- .highlight .sd {
701
- color: #032f62;
702
- } /* Literal.String.Doc */
703
- .highlight .s2 {
704
- color: #032f62;
705
- } /* Literal.String.Double */
706
- .highlight .se {
707
- color: #032f62;
708
- } /* Literal.String.Escape */
709
- .highlight .sh {
710
- color: #032f62;
711
- } /* Literal.String.Heredoc */
712
- .highlight .si {
713
- color: #032f62;
714
- } /* Literal.String.Interpol */
715
- .highlight .sx {
716
- color: #032f62;
717
- } /* Literal.String.Other */
718
- .highlight .sr {
719
- color: #22863a;
720
- } /* Literal.String.Regex */
721
- .highlight .s1 {
722
- color: #032f62;
723
- } /* Literal.String.Single */
724
- .highlight .ss {
725
- color: #032f62;
726
- } /* Literal.String.Symbol */
727
- .highlight .bp {
728
- color: #005cc5;
729
- } /* Name.Builtin.Pseudo */
730
- .highlight .vc {
731
- color: #e36209;
732
- } /* Name.Variable.Class */
733
- .highlight .vg {
734
- color: #e36209;
735
- } /* Name.Variable.Global */
736
- .highlight .vi {
737
- color: #e36209;
738
- } /* Name.Variable.Instance */
739
- .highlight .il {
740
- color: #005cc5;
741
- } /* Literal.Number.Integer.Long */
742
-
743
- /* Additional Rouge token classes that may be used */
744
- .highlight .token {
745
- color: #5670a0;
746
- }
747
- .highlight .token.list {
748
- color: #546e9f;
749
- }
750
- .highlight .token.punctuation {
751
- color: #3e8dad;
752
- }
753
- .highlight .token.list.punctuation {
754
- color: #e05b78;
755
- }
756
- .highlight .token.content {
757
- padding: 0;
758
- }
759
-
760
- /* Nested lists in page content */
761
- ul ul,
762
- ol ol,
763
- ul ol,
764
- ol ul {
765
- padding-left: 1.5em;
766
- margin-top: 0.25em;
767
- }
768
-
769
- /* Page footer */
770
- .page-footer {
771
- background: #f5f5f5;
772
- border-top: 1px solid #ddd;
773
- padding: 1.5rem;
774
- margin-top: 3rem;
775
- color: #666;
776
- font-size: 0.9em;
777
- }
778
-
779
- .page-footer p {
780
- margin: 0.5em 0;
781
- }
782
-
783
- .page-footer a {
784
- color: #0066cc;
785
- text-decoration: none;
786
- }
787
-
788
- .page-footer a:hover {
789
- text-decoration: underline;
790
- }
791
-
792
- /* Mobile responsive */
793
- @media (max-width: 768px) {
794
- .hamburger-menu {
795
- display: flex;
796
- }
797
-
798
- .main-toc,
799
- .sidebar {
800
- transform: translateX(-100%);
801
- z-index: 175;
802
- }
803
-
804
- .main-toc.mobile-open,
805
- .sidebar.mobile-open {
806
- transform: translateX(0);
807
- }
808
-
809
- body {
810
- margin: 2rem 1rem;
811
- }
812
-
813
- .floating-toc {
814
- left: 0;
815
- }
816
- }
817
-
818
- </style></head>
819
-
820
- <body class="code-highlighted">
821
- <div class="floating-toc" id="floating-toc">
822
- <div class="floating-toc-container">
823
- <div class="floating-toc-header">
824
- <span>Table of Contents 🔻</span>
825
- </div>
826
- <div class="floating-toc-content" id="floating-toc-content">
827
- <!-- Content will be populated by JavaScript -->
828
- </div>
829
- </div>
830
- </div>
831
-
832
- <button class="hamburger-menu" id="hamburger-menu" aria-label="Toggle navigation"></button>
833
- <div class="mobile-menu-overlay" id="mobile-menu-overlay"></div>
834
-
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>
836
-
837
- <h1 id="xcode-integration">
838
- Xcode Integration
839
- </h1>
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>
841
-
842
- <p>
843
- This guide covers integrating Apex into Xcode projects for macOS and iOS applications.
844
- </p>
845
-
846
- <h2 id="production-readiness">
847
- Production&nbsp;Readiness
848
- </h2>
849
-
850
- <p>
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.
852
- </p>
853
-
854
- <p>
855
- Once Apex reaches version 1.0, the project will follow <a href="https://semver.org/">Semantic Versioning</a>. This means:
856
- </p>
857
-
858
- <ul>
859
-
860
- <li>
861
- <strong>Major versions</strong> (1.0, 2.0, etc.) may include breaking API changes
862
- </li>
863
-
864
- <li>
865
- <strong>Minor versions</strong> (1.1, 1.2, etc.) will add new features while maintaining backward compatibility
866
- </li>
867
-
868
- <li>
869
- <strong>Patch versions</strong> (1.0.1, 1.0.2, etc.) will only include bug fixes and will maintain full backward compatibility
870
- </li>
871
-
872
- </ul>
873
-
874
- <p>
875
- For production use, please wait for the stable 1.0 release. Until then, please report any issues or provide feedback to help shape the final API.
876
- </p>
877
-
878
- <h2 id="swift-package-manager-spm-recommended">
879
- Swift Package Manager (SPM) -&nbsp;Recommended
880
- </h2>
881
-
882
- <p>
883
- The easiest way to integrate Apex into your Xcode project is using Swift Package Manager.
884
- </p>
885
-
886
- <h3 id="adding-apex-via-spm">
887
- Adding Apex&nbsp;via&nbsp;SPM
888
- </h3>
889
-
890
- <ol>
891
-
892
- <li>
893
- In Xcode, select your project in the navigator
894
- </li>
895
-
896
- <li>
897
- Select your target
898
- </li>
899
-
900
- <li>
901
- Go to the “Package Dependencies” tab
902
- </li>
903
-
904
- <li>
905
- Click the “+” button
906
- </li>
907
-
908
- <li>
909
- Enter the repository URL: <code>https://github.com/ApexMarkdown/apex</code>
910
- </li>
911
-
912
- <li>
913
- Select the version or branch you want to use
914
- </li>
915
-
916
- <li>
917
- Click “Add Package”
918
- </li>
919
-
920
- <li>
921
- Select the “Apex” library product
922
- </li>
923
-
924
- <li>
925
- Click “Add Package”
926
- </li>
927
-
928
- </ol>
929
-
930
- <h3 id="using-apex-in-your-code">
931
- Using Apex in&nbsp;Your&nbsp;Code
932
- </h3>
933
-
934
- <p>
935
- Once added via SPM, simply import and use:
936
- </p>
937
-
938
- <div class="highlight">
939
- <pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Apex</span>
940
-
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>
944
-
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>
947
-
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>
955
-
956
- <h3 id="platform-support">
957
- Platform&nbsp;Support
958
- </h3>
959
-
960
- <ul>
961
-
962
- <li>
963
- <strong>macOS</strong>: 10.13+ (High Sierra)
964
- </li>
965
-
966
- <li>
967
- <strong>iOS</strong>: 11.0+
968
- </li>
969
-
970
- </ul>
971
-
972
- <h3 id="spm-benefits">
973
- SPM&nbsp;Benefits
974
- </h3>
975
-
976
- <ul>
977
-
978
- <li>
979
- Automatic dependency management
980
- </li>
981
-
982
- <li>
983
- No manual framework embedding
984
- </li>
985
-
986
- <li>
987
- Works with both macOS and iOS
988
- </li>
989
-
990
- <li>
991
- Easy version updates
992
- </li>
993
-
994
- <li>
995
- Integrated with Xcode’s build system
996
- </li>
997
-
998
- </ul>
999
-
1000
- <h2 id="framework-build-alternative">
1001
- Framework Build&nbsp;(Alternative)
1002
- </h2>
1003
-
1004
- <p>
1005
- Apex can also be built as a framework for manual integration:
1006
- </p>
1007
-
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>..
1012
- make
1013
- </pre>
1014
- </div>
1015
-
1016
- <p>
1017
- The framework will be at <code>build/Apex.framework</code>.
1018
- </p>
1019
-
1020
- <h2 id="adding-to-xcode-project">
1021
- Adding to Xcode&nbsp;Project
1022
- </h2>
1023
-
1024
- <h3 id="method-1-swift-package-manager-recommended">
1025
- Method 1: Swift Package Manager&nbsp;(Recommended)
1026
- </h3>
1027
-
1028
- <p>
1029
- See the SPM section above for the easiest integration method.
1030
- </p>
1031
-
1032
- <h3 id="method-2-framework-reference">
1033
- Method 2: Framework&nbsp;Reference
1034
- </h3>
1035
-
1036
- <ol>
1037
-
1038
- <li>
1039
- Drag <code>Apex.framework</code> into your Xcode project
1040
- </li>
1041
-
1042
- <li>
1043
- Add to “Frameworks, Libraries, and Embedded Content”
1044
- </li>
1045
-
1046
- <li>
1047
- Set “Embed &amp; Sign” for the framework
1048
- </li>
1049
-
1050
- </ol>
1051
-
1052
- <h3 id="method-3-cmake-integration">
1053
- Method 3: CMake&nbsp;Integration
1054
- </h3>
1055
-
1056
- <p>
1057
- If your project uses CMake:
1058
- </p>
1059
-
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>
1065
-
1066
- <h2 id="objective-c-wrapper">
1067
- Objective-C&nbsp;Wrapper
1068
- </h2>
1069
-
1070
- <p>
1071
- Apex includes an Objective-C wrapper for easy integration:
1072
- </p>
1073
-
1074
- <p>
1075
- <strong>Files:</strong>
1076
- </p>
1077
-
1078
- <ul>
1079
-
1080
- <li>
1081
- <code>apex/objc/NSString+Apex.h</code>
1082
- </li>
1083
-
1084
- <li>
1085
- <code>apex/objc/NSString+Apex.m</code>
1086
- </li>
1087
-
1088
- </ul>
1089
-
1090
- <h3 id="basic-usage">
1091
- Basic&nbsp;Usage
1092
- </h3>
1093
-
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>
1112
-
1113
- <h3 id="api">
1114
- API
1115
- </h3>
1116
-
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>
1167
-
1168
- <span class="k">@end</span>
1169
- </pre>
1170
- </div>
1171
-
1172
- <p>
1173
- <strong>Parameters:</strong>
1174
- </p>
1175
-
1176
- <ul>
1177
-
1178
- <li>
1179
- <code>markdown</code> - Input Markdown text
1180
- </li>
1181
-
1182
- <li>
1183
- <code>mode</code> - Processor mode: Use <code>ApexMode*</code> constants (recommended) or string literals:
1184
- <ul>
1185
-
1186
- <li>
1187
- <code>ApexModeCommonmark</code> or <code>@&quot;commonmark&quot;</code> - Pure CommonMark specification
1188
- </li>
1189
-
1190
- <li>
1191
- <code>ApexModeGFM</code> or <code>@&quot;gfm&quot;</code> - GitHub Flavored Markdown
1192
- </li>
1193
-
1194
- <li>
1195
- <code>ApexModeMultiMarkdown</code> or <code>@&quot;multimarkdown&quot;</code> / <code>@&quot;mmd&quot;</code> - MultiMarkdown compatibility
1196
- </li>
1197
-
1198
- <li>
1199
- <code>ApexModeKramdown</code> or <code>@&quot;kramdown&quot;</code> - Kramdown compatibility
1200
- </li>
1201
-
1202
- <li>
1203
- <code>ApexModeUnified</code> or <code>@&quot;unified&quot;</code> - All features enabled (default)
1204
- </li>
1205
-
1206
- </ul>
1207
-
1208
- </li>
1209
-
1210
- </ul>
1211
-
1212
- <p>
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:
1303
- </p>
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
-
1343
- <p>
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>.
1345
- </p>
1346
-
1347
- <h3 id="convenience-methods">
1348
- Convenience&nbsp;Methods
1349
- </h3>
1350
-
1351
- <p>
1352
- Apex provides additional convenience methods for common use cases:
1353
- </p>
1354
-
1355
- <h4 id="standalone-html-documents">
1356
- Standalone HTML&nbsp;Documents
1357
- </h4>
1358
-
1359
- <p>
1360
- Generate complete HTML5 documents with stylesheet and title:
1361
- </p>
1362
-
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>
1379
-
1380
- <h4 Key id="pretty-printed-html">
1381
- Pretty-Printed&nbsp;HTML
1382
- </h4>
1383
-
1384
- <p>
1385
- Generate formatted HTML with indentation:
1386
- </p>
1387
-
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>
1395
-
1396
- <h4 Type id="dictionary-based-options">
1397
- Dictionary-Based&nbsp;Options
1398
- </h4>
1399
-
1400
- <p>
1401
- Configure multiple options at once using a dictionary:
1402
- </p>
1403
-
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>
1423
-
1424
- <p>
1425
- <strong>Supported dictionary keys:</strong>
1426
- </p>
1427
-
1428
- <ul>
1429
-
1430
- <li>
1431
- <code>@&quot;pretty&quot;</code> - NSNumber (BOOL): Pretty-print HTML with indentation
1432
- </li>
1433
-
1434
- <li>
1435
- <code>@&quot;standalone&quot;</code> - NSNumber (BOOL): Generate complete HTML5 document
1436
- </li>
1437
-
1438
- <li>
1439
- <code>@&quot;stylesheet&quot;</code> - NSString: Path to CSS file to link in document head
1440
- </li>
1441
-
1442
- <li>
1443
- <code>@&quot;title&quot;</code> - NSString: Document title
1444
- </li>
1445
-
1446
- <li>
1447
- <code>@&quot;hardBreaks&quot;</code> - NSNumber (BOOL): Treat newlines as hard breaks
1448
- </li>
1449
-
1450
- <li>
1451
- <code>@&quot;generateHeaderIDs&quot;</code> - NSNumber (BOOL): Generate IDs for headers
1452
- </li>
1453
-
1454
- <li>
1455
- <code>@&quot;unsafe&quot;</code> - NSNumber (BOOL): Allow raw HTML in output
1456
- </li>
1457
-
1458
- <li>
1459
- <code>@&quot;headerAnchors&quot;</code> - NSNumber (BOOL): Generate anchor tags instead of header IDs
1460
- </li>
1461
-
1462
- <li>
1463
- <code>@&quot;obfuscateEmails&quot;</code> - NSNumber (BOOL): Obfuscate email links using HTML entities
1464
- </li>
1465
-
1466
- <li>
1467
- <code>@&quot;embedImages&quot;</code> - NSNumber (BOOL): Embed local images as base64 data URLs
1468
- </li>
1469
-
1470
- <li>
1471
- <code>@&quot;enablePlugins&quot;</code> - NSNumber (BOOL): Enable external plugin processing during conversion
1472
- </li>
1473
-
1474
- </ul>
1475
-
1476
- <h4 Meaning id="swift-friendly-convenience-method">
1477
- Swift-Friendly Convenience&nbsp;Method
1478
- </h4>
1479
-
1480
- <p>
1481
- Combine common options in a single method call (ideal for Swift):
1482
- </p>
1483
-
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>
1493
-
1494
- <h4 id="instance-methods">
1495
- Instance&nbsp;Methods
1496
- </h4>
1497
-
1498
- <p>
1499
- Use instance methods for more natural, fluent syntax:
1500
- </p>
1501
-
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>
1506
-
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>
1511
-
1512
- <h2 `level` id="mode-constants">
1513
- Mode&nbsp;Constants
1514
- </h2>
1515
-
1516
- <p>
1517
- Apex provides NSString constants for processor modes to avoid ambiguity and typos:
1518
- </p>
1519
-
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>
1529
-
1530
- <p>
1531
- <strong>Benefits:</strong>
1532
- </p>
1533
-
1534
- <ul>
1535
-
1536
- <li>
1537
- <strong>Type safety</strong>: Xcode autocomplete suggests available modes
1538
- </li>
1539
-
1540
- <li>
1541
- <strong>No typos</strong>: Compile-time checking prevents invalid mode strings
1542
- </li>
1543
-
1544
- <li>
1545
- <strong>Self-documenting</strong>: Constants make code more readable
1546
- </li>
1547
-
1548
- <li>
1549
- <strong>Refactoring</strong>: Easy to find all usages if mode names change
1550
- </li>
1551
-
1552
- </ul>
1553
-
1554
- <p>
1555
- <strong>Example:</strong>
1556
- </p>
1557
-
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>
1561
-
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>
1566
-
1567
- <h2 `NSNumber` id="direct-c-api-usage">
1568
- Direct C&nbsp;API&nbsp;Usage
1569
- </h2>
1570
-
1571
- <p>
1572
- For more control, use the C API directly:
1573
- </p>
1574
-
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>
1577
-
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>
1581
-
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>
1584
-
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>
1592
- <span class="p">}</span>
1593
- </pre>
1594
- </div>
1595
-
1596
- <h2 Heading level 1–6 id="integration-example">
1597
- Integration&nbsp;Example
1598
- </h2>
1599
-
1600
- <h3 id="adding-to-marked">
1601
- Adding&nbsp;to&nbsp;Marked
1602
- </h3>
1603
-
1604
- <p>
1605
- Here’s how to add Apex support to an existing Marked-style application:
1606
- </p>
1607
-
1608
- <p>
1609
- <strong>1. Add to processor selection:</strong>
1610
- </p>
1611
-
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>
1618
- <span class="p">}</span>
1619
- </pre>
1620
- </div>
1621
-
1622
- <p>
1623
- <strong>2. Add to preferences:</strong>
1624
- </p>
1625
-
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>
1637
-
1638
- <p>
1639
- <strong>3. Handle custom processor rules:</strong>
1640
- </p>
1641
-
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>
1646
- <span class="p">}</span>
1647
- </pre>
1648
- </div>
1649
-
1650
- <h2 id="build-settings">
1651
- Build&nbsp;Settings
1652
- </h2>
1653
-
1654
- <h3 id="header-search-paths">
1655
- Header Search&nbsp;Paths
1656
- </h3>
1657
-
1658
- <p>
1659
- Add to “Header Search Paths”:
1660
- </p>
1661
-
1662
- <pre><code class="highlight ">$(SRCROOT)/apex/include
1663
- </code></pre>
1664
-
1665
- <h3 id="framework-search-paths">
1666
- Framework Search&nbsp;Paths
1667
- </h3>
1668
-
1669
- <p>
1670
- Add to “Framework Search Paths”:
1671
- </p>
1672
-
1673
- <pre><code class="highlight ">$(SRCROOT)/apex/build
1674
- </code></pre>
1675
-
1676
- <h3 id="other-linker-flags">
1677
- Other Linker&nbsp;Flags
1678
- </h3>
1679
-
1680
- <p>
1681
- If using static library:
1682
- </p>
1683
-
1684
- <pre><code class="highlight ">-L$(SRCROOT)/apex/build -lapex
1685
- </code></pre>
1686
-
1687
- <h3 `text` id="swift-api-support">
1688
- Swift API&nbsp;Support
1689
- </h3>
1690
-
1691
- <p>
1692
- To use the idiomatic Swift API (<code>Apex.swift</code>):
1693
- </p>
1694
-
1695
- <ol>
1696
-
1697
- <li>
1698
- <strong>If using the framework:</strong> The Swift file is automatically included when you link <code>Apex.framework</code>
1699
- </li>
1700
-
1701
- <li>
1702
- <strong>If using source files directly:</strong> Add <code>apex/objc/Apex.swift</code> to your Xcode project
1703
- </li>
1704
-
1705
- <li>
1706
- <strong>Swift/Objective-C Bridging:</strong> Xcode will automatically create a bridging header if needed
1707
- </li>
1708
-
1709
- </ol>
1710
-
1711
- <p>
1712
- The Swift API provides:
1713
- </p>
1714
-
1715
- <ul>
1716
-
1717
- <li>
1718
- Type-safe <code>ApexMode</code> enum instead of string constants
1719
- </li>
1720
-
1721
- <li>
1722
- <code>ApexOptions</code> struct for configuration
1723
- </li>
1724
-
1725
- <li>
1726
- Idiomatic String extensions
1727
- </li>
1728
-
1729
- <li>
1730
- Static <code>Apex</code> converter struct
1731
- </li>
1732
-
1733
- </ul>
1734
-
1735
- <h2 `NSString` id="swift-integration">
1736
- Swift Integration
1737
- </h2>
1738
-
1739
- <p>
1740
- Apex provides an idiomatic Swift API wrapper (<code>Apex.swift</code>) that offers type-safe enums and structs over the Objective-C API.
1741
- </p>
1742
-
1743
- <h3 Display title id="idiomatic-swift-api-recommended">
1744
- Idiomatic Swift API&nbsp;(Recommended)
1745
- </h3>
1746
-
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>
1785
- <span class="p">)</span>
1786
-
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>
1789
-
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>
1796
- <span class="p">)</span>
1797
- </pre>
1798
- </div>
1799
-
1800
- <h3 id="apexmode-enum">
1801
- ApexMode&nbsp;Enum
1802
- </h3>
1803
-
1804
- <p>
1805
- Type-safe processor mode enum:
1806
- </p>
1807
-
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>
1815
- <span class="p">}</span>
1816
- </pre>
1817
- </div>
1818
-
1819
- <h3 `id` id="apexoptions-struct">
1820
- ApexOptions&nbsp;Struct
1821
- </h3>
1822
-
1823
- <p>
1824
- Type-safe options configuration:
1825
- </p>
1826
-
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>
1842
- <span class="p">}</span>
1843
- </pre>
1844
- </div>
1845
-
1846
- <p>
1847
- <strong>Example usage:</strong>
1848
- </p>
1849
-
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>
1857
-
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)
1905
- </h3>
1906
-
1907
- <p>
1908
- You can also use the Objective-C API directly from Swift:
1909
- </p>
1910
-
1911
- <div class="highlight">
1912
- <pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Foundation</span>
1913
-
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>
1916
-
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>
1919
-
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>
1925
- <span class="p">]</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>
1930
- <span class="p">)</span>
1931
- </pre>
1932
- </div>
1933
-
1934
- <p>
1935
- For direct C API access, create a Swift bridging header:
1936
- </p>
1937
-
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>
1951
- <span class="p">}</span>
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>
2039
-
2040
- <h2 id="troubleshooting">
2041
- Troubleshooting
2042
- </h2>
2043
-
2044
- <h3 id="swift-package-manager-issues">
2045
- Swift Package Manager&nbsp;Issues
2046
- </h3>
2047
-
2048
- <p>
2049
- <strong>Package Resolution Fails:</strong>
2050
- </p>
2051
-
2052
- <ul>
2053
-
2054
- <li>
2055
- Ensure you have an active internet connection
2056
- </li>
2057
-
2058
- <li>
2059
- Check that the repository URL is correct: <code>https://github.com/ApexMarkdown/apex</code>
2060
- </li>
2061
-
2062
- <li>
2063
- Try cleaning derived data: <code>File &gt; Packages &gt; Reset Package Caches</code>
2064
- </li>
2065
-
2066
- <li>
2067
- Verify your Xcode version supports the required Swift tools version (5.7+)
2068
- </li>
2069
-
2070
- </ul>
2071
-
2072
- <p>
2073
- <strong>Build Errors:</strong>
2074
- </p>
2075
-
2076
- <ul>
2077
-
2078
- <li>
2079
- Ensure your deployment target matches Apex’s requirements (macOS 10.13+, iOS 11+)
2080
- </li>
2081
-
2082
- <li>
2083
- Clean build folder: <code>Product &gt; Clean Build Folder</code> (Shift+Cmd+K)
2084
- </li>
2085
-
2086
- <li>
2087
- Try removing and re-adding the package dependency
2088
- </li>
2089
-
2090
- </ul>
2091
-
2092
- <p>
2093
- <strong>Module Not Found:</strong>
2094
- </p>
2095
-
2096
- <ul>
2097
-
2098
- <li>
2099
- Ensure you’ve imported the module: <code>import Apex</code>
2100
- </li>
2101
-
2102
- <li>
2103
- Check that the Apex library product is added to your target’s dependencies
2104
- </li>
2105
-
2106
- <li>
2107
- Verify the package resolved successfully in the Package Dependencies tab
2108
- </li>
2109
-
2110
- </ul>
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
-
2128
- <h3 id="framework-not-found">
2129
- Framework&nbsp;Not&nbsp;Found
2130
- </h3>
2131
-
2132
- <p>
2133
- Ensure the framework is:
2134
- </p>
2135
-
2136
- <ol>
2137
-
2138
- <li>
2139
- Added to “Frameworks, Libraries, and Embedded Content”
2140
- </li>
2141
-
2142
- <li>
2143
- Set to “Embed &amp; Sign”
2144
- </li>
2145
-
2146
- <li>
2147
- Framework search paths are correct
2148
- </li>
2149
-
2150
- </ol>
2151
-
2152
- <h3 id="linker-errors">
2153
- Linker&nbsp;Errors
2154
- </h3>
2155
-
2156
- <ul>
2157
-
2158
- <li>
2159
- Ensure <code>Apex.framework</code> is linked (or Apex package is added via SPM)
2160
- </li>
2161
-
2162
- <li>
2163
- Check framework search paths
2164
- </li>
2165
-
2166
- <li>
2167
- Verify architecture matches (arm64 vs x86_64)
2168
- </li>
2169
-
2170
- </ul>
2171
-
2172
- <h3 id="runtime-errors">
2173
- Runtime&nbsp;Errors
2174
- </h3>
2175
-
2176
- <ul>
2177
-
2178
- <li>
2179
- Ensure framework is embedded (not just linked) if using framework method
2180
- </li>
2181
-
2182
- <li>
2183
- Check code signing settings
2184
- </li>
2185
-
2186
- <li>
2187
- Verify framework is built for correct deployment target
2188
- </li>
2189
-
2190
- <li>
2191
- For SPM: Ensure the package is properly resolved and built
2192
- </li>
2193
-
2194
- </ul>
2195
-
2196
- <h2 id="performance">
2197
- Performance
2198
- </h2>
2199
-
2200
- <p>
2201
- Apex is built on cmark-gfm, which is highly optimized:
2202
- </p>
2203
-
2204
- <ul>
2205
-
2206
- <li>
2207
- Small documents (&lt; 10KB): &lt; 10ms
2208
- </li>
2209
-
2210
- <li>
2211
- Medium documents (&lt; 100KB): &lt; 100ms
2212
- </li>
2213
-
2214
- <li>
2215
- Large documents (&lt; 1MB): &lt; 1s
2216
- </li>
2217
-
2218
- </ul>
2219
-
2220
- <p>
2221
- The Objective-C wrapper adds minimal overhead.
2222
- </p>
2223
-
2224
- <h2 id="module-map">
2225
- Module&nbsp;Map
2226
- </h2>
2227
-
2228
- <p>
2229
- Apex includes a module map (<code>include/apex/module.modulemap</code>) that allows Swift to import the C API directly:
2230
- </p>
2231
-
2232
- <div class="highlight">
2233
- <pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Apex</span>
2234
-
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>
2241
-
2242
- <p>
2243
- The module map is automatically included when using SPM or the framework.
2244
- </p>
2245
-
2246
- <h2 id="comparison-of-integration-methods">
2247
- Comparison of Integration&nbsp;Methods
2248
- </h2>
2249
-
2250
- <table>
2251
-
2252
- <thead>
2253
-
2254
- <tr>
2255
-
2256
- <th>
2257
- Method
2258
- </th>
2259
-
2260
- <th>
2261
- Ease of Use
2262
- </th>
2263
-
2264
- <th>
2265
- Platform Support
2266
- </th>
2267
-
2268
- <th>
2269
- Maintenance
2270
- </th>
2271
-
2272
- </tr>
2273
-
2274
- </thead>
2275
-
2276
- <tbody>
2277
-
2278
- <tr>
2279
-
2280
- <td>
2281
- <strong>Swift Package Manager</strong>
2282
- </td>
2283
-
2284
- <td>
2285
- ⭐⭐⭐⭐⭐
2286
- </td>
2287
-
2288
- <td>
2289
- macOS + iOS
2290
- </td>
2291
-
2292
- <td>
2293
- Automatic updates
2294
- </td>
2295
-
2296
- </tr>
2297
- <tr>
2298
-
2299
- <td>
2300
- Framework
2301
- </td>
2302
-
2303
- <td>
2304
- ⭐⭐⭐
2305
- </td>
2306
-
2307
- <td>
2308
- macOS only
2309
- </td>
2310
-
2311
- <td>
2312
- Manual updates
2313
- </td>
2314
-
2315
- </tr>
2316
- <tr>
2317
-
2318
- <td>
2319
- CMake
2320
- </td>
2321
-
2322
- <td>
2323
- ⭐⭐
2324
- </td>
2325
-
2326
- <td>
2327
- macOS + Linux
2328
- </td>
2329
-
2330
- <td>
2331
- Manual integration
2332
- </td>
2333
-
2334
- </tr>
2335
- </tbody>
2336
-
2337
- </table>
2338
-
2339
- <p>
2340
- <strong>Recommendation:</strong> Use Swift Package Manager for the easiest integration and best cross-platform support.
2341
- </p>
2342
-
2343
- <h2 id="related">
2344
- Related
2345
- </h2>
2346
-
2347
- <ul>
2348
-
2349
- <li>
2350
- <a href="C-API.html">C API</a> - Direct C API documentation (includes plugin catalog API)
2351
- </li>
2352
-
2353
- <li>
2354
- <a href="Plugins.html">Plugins</a> - Plugin syntax and CLI install flags
2355
- </li>
2356
-
2357
- <li>
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
2363
- </li>
2364
-
2365
- </ul>
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
-
2396
- <script>
2397
- // Hamburger menu functionality
2398
- (function() {
2399
- function initHamburgerMenu() {
2400
- var hamburger = document.getElementById('hamburger-menu');
2401
- var sidebar = document.querySelector('.main-toc, .sidebar');
2402
- var overlay = document.getElementById('mobile-menu-overlay');
2403
-
2404
- if (!hamburger || !sidebar) return;
2405
-
2406
- function toggleMenu() {
2407
- var isOpen = sidebar.classList.contains('mobile-open');
2408
- if (isOpen) {
2409
- sidebar.classList.remove('mobile-open');
2410
- hamburger.classList.remove('active');
2411
- if (overlay) overlay.classList.remove('active');
2412
- } else {
2413
- sidebar.classList.add('mobile-open');
2414
- hamburger.classList.add('active');
2415
- if (overlay) overlay.classList.add('active');
2416
- }
2417
- }
2418
-
2419
- hamburger.addEventListener('click', function(e) {
2420
- e.stopPropagation();
2421
- toggleMenu();
2422
- });
2423
-
2424
- if (overlay) {
2425
- overlay.addEventListener('click', function() {
2426
- toggleMenu();
2427
- });
2428
- }
2429
-
2430
- // Close menu when clicking on a sidebar link (mobile only)
2431
- if (window.innerWidth <= 768) {
2432
- var sidebarLinks = sidebar.querySelectorAll('a');
2433
- sidebarLinks.forEach(function(link) {
2434
- link.addEventListener('click', function() {
2435
- setTimeout(function() {
2436
- sidebar.classList.remove('mobile-open');
2437
- hamburger.classList.remove('active');
2438
- if (overlay) overlay.classList.remove('active');
2439
- }, 100);
2440
- });
2441
- });
2442
- }
2443
-
2444
- // Close menu on window resize if going to desktop
2445
- window.addEventListener('resize', function() {
2446
- if (window.innerWidth > 768) {
2447
- sidebar.classList.remove('mobile-open');
2448
- hamburger.classList.remove('active');
2449
- if (overlay) overlay.classList.remove('active');
2450
- }
2451
- });
2452
- }
2453
-
2454
- // Initialize when DOM is ready
2455
- if (document.readyState === 'loading') {
2456
- document.addEventListener('DOMContentLoaded', initHamburgerMenu);
2457
- } else {
2458
- initHamburgerMenu();
2459
- }
2460
- })();
2461
-
2462
- </script>
2463
- <script>
2464
- (function() {
2465
- // Clone the page TOC for floating TOC
2466
- function initFloatingTOC() {
2467
- var pageTOC = document.getElementById('page-toc-top');
2468
- var floatingTOCContent = document.getElementById('floating-toc-content');
2469
- var floatingTOC = document.getElementById('floating-toc');
2470
-
2471
- if (!pageTOC || !floatingTOCContent || !floatingTOC) return;
2472
-
2473
- // Clone the TOC structure
2474
- var tocClone = pageTOC.cloneNode(true);
2475
- tocClone.id = 'floating-toc-clone';
2476
- floatingTOCContent.appendChild(tocClone);
2477
-
2478
- // Update all links to use smooth scrolling
2479
- var allTOCLinks = document.querySelectorAll('.page-toc a, .floating-toc-content a');
2480
- allTOCLinks.forEach(function(link) {
2481
- link.addEventListener('click', function(e) {
2482
- var href = this.getAttribute('href');
2483
- if (href && href.startsWith('#')) {
2484
- e.preventDefault();
2485
- var targetId = href.substring(1);
2486
- var targetElement = document.getElementById(targetId);
2487
- if (targetElement) {
2488
- var offset = 20; // Offset from top
2489
-
2490
- // Function to calculate absolute position from document top
2491
- function getAbsoluteTop(element) {
2492
- var top = 0;
2493
- while (element) {
2494
- top += element.offsetTop;
2495
- element = element.offsetParent;
2496
- }
2497
- return top;
2498
- }
2499
-
2500
- var absoluteTop = getAbsoluteTop(targetElement);
2501
- var scrollTop = window.pageYOffset || document.documentElement.scrollTop;
2502
- var offsetPosition = absoluteTop - offset;
2503
-
2504
- // Only scroll if we're not already at the target position
2505
- if (Math.abs(scrollTop - offsetPosition) > 10) {
2506
- window.scrollTo({
2507
- top: Math.max(0, offsetPosition),
2508
- behavior: 'smooth'
2509
- });
2510
- }
2511
-
2512
- // Update URL hash without triggering scroll
2513
- if (history.pushState) {
2514
- history.pushState(null, null, href);
2515
- }
2516
- }
2517
- }
2518
- });
2519
- });
2520
-
2521
- // Handle scroll to show/hide floating TOC
2522
- var tocTop = pageTOC.getBoundingClientRect().top + window.pageYOffset;
2523
- var tocBottom = tocTop + pageTOC.offsetHeight;
2524
-
2525
- function updateFloatingTOC() {
2526
- var scrollY = window.pageYOffset || document.documentElement.scrollTop;
2527
-
2528
- if (scrollY > tocBottom) {
2529
- floatingTOC.classList.add('visible');
2530
- } else {
2531
- floatingTOC.classList.remove('visible');
2532
- }
2533
- }
2534
-
2535
- // Throttle scroll events
2536
- var ticking = false;
2537
- window.addEventListener('scroll', function() {
2538
- if (!ticking) {
2539
- window.requestAnimationFrame(function() {
2540
- updateFloatingTOC();
2541
- ticking = false;
2542
- });
2543
- ticking = true;
2544
- }
2545
- });
2546
-
2547
- // Initial check
2548
- updateFloatingTOC();
2549
- }
2550
-
2551
- // Initialize when DOM is ready
2552
- if (document.readyState === 'loading') {
2553
- document.addEventListener('DOMContentLoaded', initFloatingTOC);
2554
- } else {
2555
- initFloatingTOC();
2556
- }
2557
- })();
2558
- </script>
2559
- <footer class="page-footer"><p>Copyright 2025 Brett Terpstra, All Rights Reserved | MIT License</p></footer></body>
2560
-
2561
- </html>
2562
-