apex-ruby 1.0.6

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 (501) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +119 -0
  3. data/apex-ruby.gemspec +31 -0
  4. data/ext/apex_ext/apex_ext.c +215 -0
  5. data/ext/apex_ext/apex_src/BENCHMARK.md +32 -0
  6. data/ext/apex_ext/apex_src/BENCHMARK_COMPARISON.md +67 -0
  7. data/ext/apex_ext/apex_src/CHANGELOG.md +2454 -0
  8. data/ext/apex_ext/apex_src/CMakeLists.txt +454 -0
  9. data/ext/apex_ext/apex_src/Dockerfile.linux-build +15 -0
  10. data/ext/apex_ext/apex_src/Formula/apex.rb +38 -0
  11. data/ext/apex_ext/apex_src/Info.plist.in +27 -0
  12. data/ext/apex_ext/apex_src/LICENSE +21 -0
  13. data/ext/apex_ext/apex_src/Package.swift +160 -0
  14. data/ext/apex_ext/apex_src/PackageSupport/README.md +17 -0
  15. data/ext/apex_ext/apex_src/PackageSupport/cmark-gfm/cmark-gfm_export.h +20 -0
  16. data/ext/apex_ext/apex_src/PackageSupport/cmark-gfm/cmark-gfm_version.h +14 -0
  17. data/ext/apex_ext/apex_src/PackageSupport/cmark-gfm/cmark_gfm_spm_stub.c +4 -0
  18. data/ext/apex_ext/apex_src/PackageSupport/cmark-gfm/config.h +41 -0
  19. data/ext/apex_ext/apex_src/README.md +452 -0
  20. data/ext/apex_ext/apex_src/VERSION +1 -0
  21. data/ext/apex_ext/apex_src/apex-header-2-rb@2x.webp +0 -0
  22. data/ext/apex_ext/apex_src/apex-plugins.json.example +20 -0
  23. data/ext/apex_ext/apex_src/apex.pc.in +11 -0
  24. data/ext/apex_ext/apex_src/cli/main.c +2720 -0
  25. data/ext/apex_ext/apex_src/debug_test.sh +22 -0
  26. data/ext/apex_ext/apex_src/docs/API_REFERENCE.md +451 -0
  27. data/ext/apex_ext/apex_src/docs/ARCHITECTURE.md +166 -0
  28. data/ext/apex_ext/apex_src/docs/CMARK_INTEGRATION.md +220 -0
  29. data/ext/apex_ext/apex_src/docs/CRITICMARKUP.md +501 -0
  30. data/ext/apex_ext/apex_src/docs/DEBUGGING.md +73 -0
  31. data/ext/apex_ext/apex_src/docs/FINAL_STATUS.md +391 -0
  32. data/ext/apex_ext/apex_src/docs/FINAL_STATUS_UPDATE.md +237 -0
  33. data/ext/apex_ext/apex_src/docs/FUTURE_FEATURES.md +456 -0
  34. data/ext/apex_ext/apex_src/docs/IAL_FEATURES.md +210 -0
  35. data/ext/apex_ext/apex_src/docs/IAL_STATUS.md +344 -0
  36. data/ext/apex_ext/apex_src/docs/INTEGRATION_EXAMPLE.m +144 -0
  37. data/ext/apex_ext/apex_src/docs/LIMITATIONS_RESOLVED.md +278 -0
  38. data/ext/apex_ext/apex_src/docs/OUTPUT_MODES.md +321 -0
  39. data/ext/apex_ext/apex_src/docs/PROGRESS.md +167 -0
  40. data/ext/apex_ext/apex_src/docs/STANDALONE_FEATURE.md +174 -0
  41. data/ext/apex_ext/apex_src/docs/TABLE_SPANS_STATUS.md +243 -0
  42. data/ext/apex_ext/apex_src/docs/TEST_COVERAGE.md +316 -0
  43. data/ext/apex_ext/apex_src/docs/USER_GUIDE.md +803 -0
  44. data/ext/apex_ext/apex_src/docs/WIKI_LINKS_ISSUE.md +91 -0
  45. data/ext/apex_ext/apex_src/documentation/README.md +160 -0
  46. data/ext/apex_ext/apex_src/documentation/docsets/Apex Command Line Options.cheatsheet.txt +365 -0
  47. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Info.plist +24 -0
  48. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/C-API.html +1737 -0
  49. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Citations.html +1420 -0
  50. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Command-Line-Options.html +3574 -0
  51. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Configuration.html +1603 -0
  52. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Credits.html +910 -0
  53. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Examples.html +1168 -0
  54. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Getting-Started.html +1003 -0
  55. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Header-IDs.html +1308 -0
  56. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Home.html +1078 -0
  57. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Inline-Attribute-Lists.html +1622 -0
  58. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Installation.html +1168 -0
  59. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Limitations-and-Roadmap.html +1698 -0
  60. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Metadata-Transforms.html +1531 -0
  61. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Modes.html +1980 -0
  62. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Multi-File-Documents.html +1368 -0
  63. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Pandoc-Integration.html +1151 -0
  64. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Plugins.html +2861 -0
  65. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Syntax.html +3981 -0
  66. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Troubleshooting.html +1454 -0
  67. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Usage.html +1200 -0
  68. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Xcode-Integration.html +2066 -0
  69. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/docSet.dsidx +0 -0
  70. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/optimizedIndex.dsidx +0 -0
  71. data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/tempOptimizedIndex.dsidx +0 -0
  72. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Info.plist +22 -0
  73. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans.woff +0 -0
  74. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans_Bold.woff +0 -0
  75. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans_Bold_Italic.woff +0 -0
  76. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans_Extrabold.woff +0 -0
  77. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans_Extrabold_Italic.woff +0 -0
  78. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans_Italic.woff +0 -0
  79. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans_Semibold.woff +0 -0
  80. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/cheatset_resources/Open_Sans_Semibold_Italic.woff +0 -0
  81. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/index.html +914 -0
  82. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/Documents/style.css +399 -0
  83. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/docSet.dsidx +0 -0
  84. data/ext/apex_ext/apex_src/documentation/docsets/ApexCLI.docset/Contents/Resources/optimizedIndex.dsidx +0 -0
  85. data/ext/apex_ext/apex_src/documentation/generate_app_docs.rb +772 -0
  86. data/ext/apex_ext/apex_src/documentation/generate_app_docs_ai.rb +678 -0
  87. data/ext/apex_ext/apex_src/documentation/generate_docset.rb +873 -0
  88. data/ext/apex_ext/apex_src/documentation/generate_single_html.rb +733 -0
  89. data/ext/apex_ext/apex_src/documentation/html/apex-docs.html +17073 -0
  90. data/ext/apex_ext/apex_src/documentation/shared_scripts.js +64 -0
  91. data/ext/apex_ext/apex_src/documentation/shared_styles.css +646 -0
  92. data/ext/apex_ext/apex_src/documentation/transform_for_app.example.md +260 -0
  93. data/ext/apex_ext/apex_src/examples/bracketed_spans_demo.md +119 -0
  94. data/ext/apex_ext/apex_src/examples/emoji_span_plugin.yml +11 -0
  95. data/ext/apex_ext/apex_src/examples/example.html +53 -0
  96. data/ext/apex_ext/apex_src/examples/example.md +85 -0
  97. data/ext/apex_ext/apex_src/examples/fenced_divs_demo.md +158 -0
  98. data/ext/apex_ext/apex_src/examples/kbd.md +8 -0
  99. data/ext/apex_ext/apex_src/examples/kbd_plugin.rb +250 -0
  100. data/ext/apex_ext/apex_src/examples/kbd_plugin.yml +9 -0
  101. data/ext/apex_ext/apex_src/icon/apexicon-outline-black.png +0 -0
  102. data/ext/apex_ext/apex_src/icon/apexicon-outline-black@2x.png +0 -0
  103. data/ext/apex_ext/apex_src/icon/apexicon-outline-mark.png +0 -0
  104. data/ext/apex_ext/apex_src/icon/apexicon-outline-mark@2x.png +0 -0
  105. data/ext/apex_ext/apex_src/icon/apexicon-outline-white.png +0 -0
  106. data/ext/apex_ext/apex_src/icon/apexicon-outline-white@2x.png +0 -0
  107. data/ext/apex_ext/apex_src/icon/apexicon.png +0 -0
  108. data/ext/apex_ext/apex_src/icon/apexicon@2x.png +0 -0
  109. data/ext/apex_ext/apex_src/include/apex/apex.h +247 -0
  110. data/ext/apex_ext/apex_src/include/apex/buffer.h +93 -0
  111. data/ext/apex_ext/apex_src/include/apex/module.modulemap +16 -0
  112. data/ext/apex_ext/apex_src/include/apex/parser.h +150 -0
  113. data/ext/apex_ext/apex_src/include/apex/renderer.h +39 -0
  114. data/ext/apex_ext/apex_src/man/apex-config.5 +374 -0
  115. data/ext/apex_ext/apex_src/man/apex-config.5.md +260 -0
  116. data/ext/apex_ext/apex_src/man/apex-plugins.7 +456 -0
  117. data/ext/apex_ext/apex_src/man/apex-plugins.7.md +365 -0
  118. data/ext/apex_ext/apex_src/man/apex.1 +828 -0
  119. data/ext/apex_ext/apex_src/man/apex.1.md +643 -0
  120. data/ext/apex_ext/apex_src/man/apex.1.new +338 -0
  121. data/ext/apex_ext/apex_src/objc/Apex.swift +237 -0
  122. data/ext/apex_ext/apex_src/objc/NSString+Apex.h +117 -0
  123. data/ext/apex_ext/apex_src/objc/NSString+Apex.m +332 -0
  124. data/ext/apex_ext/apex_src/src/_README.md +358 -0
  125. data/ext/apex_ext/apex_src/src/apex.c +6326 -0
  126. data/ext/apex_ext/apex_src/src/buffer.c +93 -0
  127. data/ext/apex_ext/apex_src/src/extensions/abbreviations.c +362 -0
  128. data/ext/apex_ext/apex_src/src/extensions/abbreviations.h +45 -0
  129. data/ext/apex_ext/apex_src/src/extensions/advanced_footnotes.c +184 -0
  130. data/ext/apex_ext/apex_src/src/extensions/advanced_footnotes.h +50 -0
  131. data/ext/apex_ext/apex_src/src/extensions/advanced_tables.c +1897 -0
  132. data/ext/apex_ext/apex_src/src/extensions/advanced_tables.h +42 -0
  133. data/ext/apex_ext/apex_src/src/extensions/callouts.c +215 -0
  134. data/ext/apex_ext/apex_src/src/extensions/callouts.h +53 -0
  135. data/ext/apex_ext/apex_src/src/extensions/citations.c +2042 -0
  136. data/ext/apex_ext/apex_src/src/extensions/citations.h +163 -0
  137. data/ext/apex_ext/apex_src/src/extensions/critic.c +329 -0
  138. data/ext/apex_ext/apex_src/src/extensions/critic.h +48 -0
  139. data/ext/apex_ext/apex_src/src/extensions/definition_list.c +1670 -0
  140. data/ext/apex_ext/apex_src/src/extensions/definition_list.h +42 -0
  141. data/ext/apex_ext/apex_src/src/extensions/emoji.c +710 -0
  142. data/ext/apex_ext/apex_src/src/extensions/emoji.h +38 -0
  143. data/ext/apex_ext/apex_src/src/extensions/emoji_data.h +942 -0
  144. data/ext/apex_ext/apex_src/src/extensions/fenced_divs.c +925 -0
  145. data/ext/apex_ext/apex_src/src/extensions/fenced_divs.h +43 -0
  146. data/ext/apex_ext/apex_src/src/extensions/github-emoji.txt +869 -0
  147. data/ext/apex_ext/apex_src/src/extensions/grid_tables.c +1121 -0
  148. data/ext/apex_ext/apex_src/src/extensions/grid_tables.h +33 -0
  149. data/ext/apex_ext/apex_src/src/extensions/header_ids.c +626 -0
  150. data/ext/apex_ext/apex_src/src/extensions/header_ids.h +60 -0
  151. data/ext/apex_ext/apex_src/src/extensions/highlight.c +135 -0
  152. data/ext/apex_ext/apex_src/src/extensions/highlight.h +16 -0
  153. data/ext/apex_ext/apex_src/src/extensions/html_markdown.c +408 -0
  154. data/ext/apex_ext/apex_src/src/extensions/html_markdown.h +42 -0
  155. data/ext/apex_ext/apex_src/src/extensions/ial.c +4084 -0
  156. data/ext/apex_ext/apex_src/src/extensions/ial.h +145 -0
  157. data/ext/apex_ext/apex_src/src/extensions/includes.c +1536 -0
  158. data/ext/apex_ext/apex_src/src/extensions/includes.h +54 -0
  159. data/ext/apex_ext/apex_src/src/extensions/index.c +967 -0
  160. data/ext/apex_ext/apex_src/src/extensions/index.h +90 -0
  161. data/ext/apex_ext/apex_src/src/extensions/inline_footnotes.c +205 -0
  162. data/ext/apex_ext/apex_src/src/extensions/inline_footnotes.h +34 -0
  163. data/ext/apex_ext/apex_src/src/extensions/inline_tables.c +332 -0
  164. data/ext/apex_ext/apex_src/src/extensions/inline_tables.h +13 -0
  165. data/ext/apex_ext/apex_src/src/extensions/insert.c +248 -0
  166. data/ext/apex_ext/apex_src/src/extensions/insert.h +18 -0
  167. data/ext/apex_ext/apex_src/src/extensions/math.c +279 -0
  168. data/ext/apex_ext/apex_src/src/extensions/math.h +32 -0
  169. data/ext/apex_ext/apex_src/src/extensions/metadata.c +3046 -0
  170. data/ext/apex_ext/apex_src/src/extensions/metadata.h +125 -0
  171. data/ext/apex_ext/apex_src/src/extensions/relaxed_tables.c +1297 -0
  172. data/ext/apex_ext/apex_src/src/extensions/relaxed_tables.h +39 -0
  173. data/ext/apex_ext/apex_src/src/extensions/special_markers.c +194 -0
  174. data/ext/apex_ext/apex_src/src/extensions/special_markers.h +29 -0
  175. data/ext/apex_ext/apex_src/src/extensions/sup_sub.c +405 -0
  176. data/ext/apex_ext/apex_src/src/extensions/sup_sub.h +16 -0
  177. data/ext/apex_ext/apex_src/src/extensions/syntax_highlight.c +468 -0
  178. data/ext/apex_ext/apex_src/src/extensions/syntax_highlight.h +44 -0
  179. data/ext/apex_ext/apex_src/src/extensions/table_html_postprocess.c +2679 -0
  180. data/ext/apex_ext/apex_src/src/extensions/table_html_postprocess.h +23 -0
  181. data/ext/apex_ext/apex_src/src/extensions/toc.c +255 -0
  182. data/ext/apex_ext/apex_src/src/extensions/toc.h +34 -0
  183. data/ext/apex_ext/apex_src/src/extensions/wiki_links.c +624 -0
  184. data/ext/apex_ext/apex_src/src/extensions/wiki_links.h +58 -0
  185. data/ext/apex_ext/apex_src/src/html_renderer.c +2762 -0
  186. data/ext/apex_ext/apex_src/src/html_renderer.h +126 -0
  187. data/ext/apex_ext/apex_src/src/parser.c +227 -0
  188. data/ext/apex_ext/apex_src/src/plugins.c +895 -0
  189. data/ext/apex_ext/apex_src/src/plugins.h +39 -0
  190. data/ext/apex_ext/apex_src/src/plugins_env.c +187 -0
  191. data/ext/apex_ext/apex_src/src/plugins_remote.c +263 -0
  192. data/ext/apex_ext/apex_src/src/pretty_html.c +358 -0
  193. data/ext/apex_ext/apex_src/src/renderer.c +241 -0
  194. data/ext/apex_ext/apex_src/src/utf8.c +56 -0
  195. data/ext/apex_ext/apex_src/test-linux-build.sh +20 -0
  196. data/ext/apex_ext/apex_src/test.html +103 -0
  197. data/ext/apex_ext/apex_src/test_coverage.sh +121 -0
  198. data/ext/apex_ext/apex_src/test_ial_fenced.md +6 -0
  199. data/ext/apex_ext/apex_src/test_math_norm.py +79 -0
  200. data/ext/apex_ext/apex_src/test_pandoc_output.html +48 -0
  201. data/ext/apex_ext/apex_src/test_spm.sh +107 -0
  202. data/ext/apex_ext/apex_src/tests/ApexSPMTest/main.swift +50 -0
  203. data/ext/apex_ext/apex_src/tests/BENCHMARK_RESULTS.md +229 -0
  204. data/ext/apex_ext/apex_src/tests/CMakeLists.txt +24 -0
  205. data/ext/apex_ext/apex_src/tests/README.md +146 -0
  206. data/ext/apex_ext/apex_src/tests/benchmark.sh +113 -0
  207. data/ext/apex_ext/apex_src/tests/benchmark_comparison.sh +166 -0
  208. data/ext/apex_ext/apex_src/tests/compare_header_ids.sh +31 -0
  209. data/ext/apex_ext/apex_src/tests/fixtures/basic/headers.md +25 -0
  210. data/ext/apex_ext/apex_src/tests/fixtures/basic/list-interruption.md +24 -0
  211. data/ext/apex_ext/apex_src/tests/fixtures/basic/misc_markup.md +33 -0
  212. data/ext/apex_ext/apex_src/tests/fixtures/basic/test_basic.md +26 -0
  213. data/ext/apex_ext/apex_src/tests/fixtures/code/code-blocks.md +260 -0
  214. data/ext/apex_ext/apex_src/tests/fixtures/combine_summary/SUMMARY.md +6 -0
  215. data/ext/apex_ext/apex_src/tests/fixtures/combine_summary/chapter1.md +7 -0
  216. data/ext/apex_ext/apex_src/tests/fixtures/combine_summary/index.txt +9 -0
  217. data/ext/apex_ext/apex_src/tests/fixtures/combine_summary/intro.md +5 -0
  218. data/ext/apex_ext/apex_src/tests/fixtures/combine_summary/section1_1.md +5 -0
  219. data/ext/apex_ext/apex_src/tests/fixtures/comprehensive_test.md +620 -0
  220. data/ext/apex_ext/apex_src/tests/fixtures/debug_ref_image_ial.md +3 -0
  221. data/ext/apex_ext/apex_src/tests/fixtures/demos/ial.md +11 -0
  222. data/ext/apex_ext/apex_src/tests/fixtures/demos/ial_demo.md +177 -0
  223. data/ext/apex_ext/apex_src/tests/fixtures/extensions/emoji-autocorrect.md +94 -0
  224. data/ext/apex_ext/apex_src/tests/fixtures/extensions/emoji_test.md +3 -0
  225. data/ext/apex_ext/apex_src/tests/fixtures/extensions/kbd_test.md +3 -0
  226. data/ext/apex_ext/apex_src/tests/fixtures/ial/bracketed_spans_test.md +74 -0
  227. data/ext/apex_ext/apex_src/tests/fixtures/images/image_and_encoding_test.md +27 -0
  228. data/ext/apex_ext/apex_src/tests/fixtures/images/multimarkdown_image_attributes_test.md +60 -0
  229. data/ext/apex_ext/apex_src/tests/fixtures/images/pandoc_ial_image_test.md +27 -0
  230. data/ext/apex_ext/apex_src/tests/fixtures/images/width_height_conversion_test.md +94 -0
  231. data/ext/apex_ext/apex_src/tests/fixtures/img-in-div.md +16 -0
  232. data/ext/apex_ext/apex_src/tests/fixtures/includes/code.py +4 -0
  233. data/ext/apex_ext/apex_src/tests/fixtures/includes/data.csv +5 -0
  234. data/ext/apex_ext/apex_src/tests/fixtures/includes/data.tsv +5 -0
  235. data/ext/apex_ext/apex_src/tests/fixtures/includes/image.png +2 -0
  236. data/ext/apex_ext/apex_src/tests/fixtures/includes/metadata_options.yml +11 -0
  237. data/ext/apex_ext/apex_src/tests/fixtures/includes/nested.md +8 -0
  238. data/ext/apex_ext/apex_src/tests/fixtures/includes/raw.html +4 -0
  239. data/ext/apex_ext/apex_src/tests/fixtures/includes/simple.md +7 -0
  240. data/ext/apex_ext/apex_src/tests/fixtures/includes/test_image.png +0 -0
  241. data/ext/apex_ext/apex_src/tests/fixtures/large_doc.md +1094 -0
  242. data/ext/apex_ext/apex_src/tests/fixtures/metadata_options.yml +11 -0
  243. data/ext/apex_ext/apex_src/tests/fixtures/output/gfm_header_id_test.md +96 -0
  244. data/ext/apex_ext/apex_src/tests/fixtures/output/test_citations.md +43 -0
  245. data/ext/apex_ext/apex_src/tests/fixtures/output/test_def_list_links.md +12 -0
  246. data/ext/apex_ext/apex_src/tests/fixtures/output/test_index_mmark.md +53 -0
  247. data/ext/apex_ext/apex_src/tests/fixtures/output/test_index_textindex.md +37 -0
  248. data/ext/apex_ext/apex_src/tests/fixtures/tables/advanced_tables_test.md +93 -0
  249. data/ext/apex_ext/apex_src/tests/fixtures/tables/inline_tables_test.md +38 -0
  250. data/ext/apex_ext/apex_src/tests/fixtures/tables/relaxed-table.md +12 -0
  251. data/ext/apex_ext/apex_src/tests/fixtures/tables/table_cr_line_endings.md +15 -0
  252. data/ext/apex_ext/apex_src/tests/fixtures/tables/table_no_trailing_newline.md +15 -0
  253. data/ext/apex_ext/apex_src/tests/generate_gfm_ids.sh +105 -0
  254. data/ext/apex_ext/apex_src/tests/generate_ial_demo.sh +143 -0
  255. data/ext/apex_ext/apex_src/tests/gfm_id_comparison_summary.md +96 -0
  256. data/ext/apex_ext/apex_src/tests/gh_api_test.md +6 -0
  257. data/ext/apex_ext/apex_src/tests/ial_demo.html +186 -0
  258. data/ext/apex_ext/apex_src/tests/include_code.py +19 -0
  259. data/ext/apex_ext/apex_src/tests/include_snippet.md +15 -0
  260. data/ext/apex_ext/apex_src/tests/multi_file_cli_test.sh +64 -0
  261. data/ext/apex_ext/apex_src/tests/sample_data.csv +7 -0
  262. data/ext/apex_ext/apex_src/tests/table_escaped_ltlt.md +4 -0
  263. data/ext/apex_ext/apex_src/tests/test_basic.c +74 -0
  264. data/ext/apex_ext/apex_src/tests/test_extensions.c +2116 -0
  265. data/ext/apex_ext/apex_src/tests/test_helpers.c +183 -0
  266. data/ext/apex_ext/apex_src/tests/test_helpers.h +91 -0
  267. data/ext/apex_ext/apex_src/tests/test_ial.c +282 -0
  268. data/ext/apex_ext/apex_src/tests/test_links.c +418 -0
  269. data/ext/apex_ext/apex_src/tests/test_marked_integration.c +265 -0
  270. data/ext/apex_ext/apex_src/tests/test_metadata.c +908 -0
  271. data/ext/apex_ext/apex_src/tests/test_output.c +1118 -0
  272. data/ext/apex_ext/apex_src/tests/test_plugins.c +219 -0
  273. data/ext/apex_ext/apex_src/tests/test_refs.bib +31 -0
  274. data/ext/apex_ext/apex_src/tests/test_runner.c +244 -0
  275. data/ext/apex_ext/apex_src/tests/test_syntax_highlight.c +198 -0
  276. data/ext/apex_ext/apex_src/tests/test_tables.c +862 -0
  277. data/ext/apex_ext/apex_src/tests/update_benchmarks.sh +9 -0
  278. data/ext/apex_ext/apex_src/tests/yaml_test.md +13 -0
  279. data/ext/apex_ext/apex_src/tests.rb +39 -0
  280. data/ext/apex_ext/apex_src/vendor/cmark-gfm/CMakeLists.txt +48 -0
  281. data/ext/apex_ext/apex_src/vendor/cmark-gfm/COPYING +170 -0
  282. data/ext/apex_ext/apex_src/vendor/cmark-gfm/CheckFileOffsetBits.c +14 -0
  283. data/ext/apex_ext/apex_src/vendor/cmark-gfm/CheckFileOffsetBits.cmake +43 -0
  284. data/ext/apex_ext/apex_src/vendor/cmark-gfm/FindAsan.cmake +74 -0
  285. data/ext/apex_ext/apex_src/vendor/cmark-gfm/Makefile.nmake +38 -0
  286. data/ext/apex_ext/apex_src/vendor/cmark-gfm/README.md +206 -0
  287. data/ext/apex_ext/apex_src/vendor/cmark-gfm/api_test/CMakeLists.txt +30 -0
  288. data/ext/apex_ext/apex_src/vendor/cmark-gfm/api_test/cplusplus.cpp +15 -0
  289. data/ext/apex_ext/apex_src/vendor/cmark-gfm/api_test/cplusplus.h +16 -0
  290. data/ext/apex_ext/apex_src/vendor/cmark-gfm/api_test/harness.c +111 -0
  291. data/ext/apex_ext/apex_src/vendor/cmark-gfm/api_test/harness.h +35 -0
  292. data/ext/apex_ext/apex_src/vendor/cmark-gfm/api_test/main.c +1169 -0
  293. data/ext/apex_ext/apex_src/vendor/cmark-gfm/appveyor.yml +21 -0
  294. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-bq-flat.md +16 -0
  295. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-bq-nested.md +13 -0
  296. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-code.md +11 -0
  297. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-fences.md +14 -0
  298. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-heading.md +9 -0
  299. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-hr.md +10 -0
  300. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-html.md +32 -0
  301. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-lheading.md +8 -0
  302. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-list-flat.md +67 -0
  303. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-list-nested.md +36 -0
  304. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-ref-flat.md +15 -0
  305. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/block-ref-nested.md +17 -0
  306. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-autolink.md +14 -0
  307. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-backticks.md +3 -0
  308. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-em-flat.md +5 -0
  309. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-em-nested.md +5 -0
  310. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-em-worst.md +5 -0
  311. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-entity.md +11 -0
  312. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-escape.md +15 -0
  313. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-html.md +44 -0
  314. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-links-flat.md +23 -0
  315. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-links-nested.md +13 -0
  316. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/inline-newlines.md +24 -0
  317. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/lorem1.md +13 -0
  318. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/samples/rawtabs.md +18 -0
  319. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/statistics.py +595 -0
  320. data/ext/apex_ext/apex_src/vendor/cmark-gfm/bench/stats.py +19 -0
  321. data/ext/apex_ext/apex_src/vendor/cmark-gfm/benchmarks.md +33 -0
  322. data/ext/apex_ext/apex_src/vendor/cmark-gfm/changelog.txt +1245 -0
  323. data/ext/apex_ext/apex_src/vendor/cmark-gfm/data/CaseFolding.txt +1495 -0
  324. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/CMakeLists.txt +119 -0
  325. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/autolink.c +508 -0
  326. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/autolink.h +8 -0
  327. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/cmark-gfm-core-extensions.h +54 -0
  328. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/core-extensions.c +27 -0
  329. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/ext_scanners.c +879 -0
  330. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/ext_scanners.h +24 -0
  331. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/ext_scanners.re +92 -0
  332. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/strikethrough.c +167 -0
  333. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/strikethrough.h +9 -0
  334. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/table.c +917 -0
  335. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/table.h +12 -0
  336. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/tagfilter.c +60 -0
  337. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/tagfilter.h +8 -0
  338. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/tasklist.c +156 -0
  339. data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/tasklist.h +8 -0
  340. data/ext/apex_ext/apex_src/vendor/cmark-gfm/fuzz/CMakeLists.txt +22 -0
  341. data/ext/apex_ext/apex_src/vendor/cmark-gfm/fuzz/README.md +12 -0
  342. data/ext/apex_ext/apex_src/vendor/cmark-gfm/fuzz/fuzz_quadratic.c +91 -0
  343. data/ext/apex_ext/apex_src/vendor/cmark-gfm/fuzz/fuzz_quadratic_brackets.c +110 -0
  344. data/ext/apex_ext/apex_src/vendor/cmark-gfm/fuzz/fuzzloop.sh +28 -0
  345. data/ext/apex_ext/apex_src/vendor/cmark-gfm/man/CMakeLists.txt +10 -0
  346. data/ext/apex_ext/apex_src/vendor/cmark-gfm/man/make_man_page.py +133 -0
  347. data/ext/apex_ext/apex_src/vendor/cmark-gfm/man/man1/cmark-gfm.1 +78 -0
  348. data/ext/apex_ext/apex_src/vendor/cmark-gfm/man/man3/cmark-gfm.3 +1041 -0
  349. data/ext/apex_ext/apex_src/vendor/cmark-gfm/nmake.bat +1 -0
  350. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/CMakeLists.txt +230 -0
  351. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/arena.c +104 -0
  352. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/blocks.c +1622 -0
  353. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/buffer.c +278 -0
  354. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/buffer.h +116 -0
  355. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/case_fold_switch.inc +4327 -0
  356. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/chunk.h +135 -0
  357. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/cmark-gfm-extension_api.h +737 -0
  358. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/cmark-gfm.h +833 -0
  359. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/cmark-gfm_version.h.in +7 -0
  360. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/cmark.c +55 -0
  361. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/cmark_ctype.c +44 -0
  362. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/cmark_ctype.h +33 -0
  363. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/commonmark.c +514 -0
  364. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/config.h.in +76 -0
  365. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/entities.inc +2138 -0
  366. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/footnotes.c +63 -0
  367. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/footnotes.h +27 -0
  368. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/houdini.h +57 -0
  369. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/houdini_href_e.c +100 -0
  370. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/houdini_html_e.c +66 -0
  371. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/houdini_html_u.c +149 -0
  372. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/html.c +502 -0
  373. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/html.h +27 -0
  374. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/inlines.c +1788 -0
  375. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/inlines.h +29 -0
  376. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/iterator.c +159 -0
  377. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/iterator.h +26 -0
  378. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/latex.c +468 -0
  379. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/libcmark-gfm.pc.in +10 -0
  380. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/linked_list.c +37 -0
  381. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/main.c +328 -0
  382. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/man.c +274 -0
  383. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/map.c +129 -0
  384. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/map.h +44 -0
  385. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/node.c +1045 -0
  386. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/node.h +167 -0
  387. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/parser.h +59 -0
  388. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/plaintext.c +218 -0
  389. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/plugin.c +36 -0
  390. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/plugin.h +34 -0
  391. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/references.c +43 -0
  392. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/references.h +26 -0
  393. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/registry.c +63 -0
  394. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/registry.h +24 -0
  395. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/render.c +213 -0
  396. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/render.h +62 -0
  397. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/scanners.c +14056 -0
  398. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/scanners.h +70 -0
  399. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/scanners.re +365 -0
  400. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/syntax_extension.c +149 -0
  401. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/syntax_extension.h +34 -0
  402. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/utf8.c +317 -0
  403. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/utf8.h +35 -0
  404. data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/xml.c +182 -0
  405. data/ext/apex_ext/apex_src/vendor/cmark-gfm/suppressions +10 -0
  406. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/CMakeLists.txt +114 -0
  407. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/afl_test_cases/test.md +49 -0
  408. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/cmark-fuzz.c +58 -0
  409. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/cmark.py +105 -0
  410. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/entity_tests.py +67 -0
  411. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/extensions-full-info-string.txt +0 -0
  412. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/extensions-table-prefer-style-attributes.txt +38 -0
  413. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/extensions.txt +920 -0
  414. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/fuzzing_dictionary +67 -0
  415. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/normalize.py +194 -0
  416. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/pathological_tests.py +160 -0
  417. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/regression.txt +375 -0
  418. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/roundtrip_tests.py +50 -0
  419. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/run-cmark-fuzz +4 -0
  420. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/smart_punct.txt +177 -0
  421. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/spec.txt +10212 -0
  422. data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/spec_tests.py +152 -0
  423. data/ext/apex_ext/apex_src/vendor/cmark-gfm/toolchain-mingw32.cmake +17 -0
  424. data/ext/apex_ext/apex_src/vendor/cmark-gfm/tools/Dockerfile +41 -0
  425. data/ext/apex_ext/apex_src/vendor/cmark-gfm/tools/appveyor-build.bat +13 -0
  426. data/ext/apex_ext/apex_src/vendor/cmark-gfm/tools/make_entities_inc.py +32 -0
  427. data/ext/apex_ext/apex_src/vendor/cmark-gfm/tools/mkcasefold.pl +22 -0
  428. data/ext/apex_ext/apex_src/vendor/cmark-gfm/tools/xml2md.xsl +319 -0
  429. data/ext/apex_ext/apex_src/vendor/cmark-gfm/tools/xml2md_gfm.xsl +80 -0
  430. data/ext/apex_ext/apex_src/vendor/cmark-gfm/why-cmark-and-not-x.md +104 -0
  431. data/ext/apex_ext/apex_src/vendor/cmark-gfm/wrappers/wrapper.js +6 -0
  432. data/ext/apex_ext/apex_src/vendor/cmark-gfm/wrappers/wrapper.py +37 -0
  433. data/ext/apex_ext/apex_src/vendor/cmark-gfm/wrappers/wrapper.rb +15 -0
  434. data/ext/apex_ext/apex_src/vendor/cmark-gfm/wrappers/wrapper.rkt +208 -0
  435. data/ext/apex_ext/apex_src/vendor/cmark-gfm/wrappers/wrapper_ext.py +109 -0
  436. data/ext/apex_ext/apex_src/vendor/libyaml/CMakeLists.txt +160 -0
  437. data/ext/apex_ext/apex_src/vendor/libyaml/Changes +372 -0
  438. data/ext/apex_ext/apex_src/vendor/libyaml/License +20 -0
  439. data/ext/apex_ext/apex_src/vendor/libyaml/Makefile.am +51 -0
  440. data/ext/apex_ext/apex_src/vendor/libyaml/ReadMe.md +46 -0
  441. data/ext/apex_ext/apex_src/vendor/libyaml/announcement.msg +89 -0
  442. data/ext/apex_ext/apex_src/vendor/libyaml/bootstrap +3 -0
  443. data/ext/apex_ext/apex_src/vendor/libyaml/cmake/config.h.in +4 -0
  444. data/ext/apex_ext/apex_src/vendor/libyaml/configure.ac +73 -0
  445. data/ext/apex_ext/apex_src/vendor/libyaml/doc/doxygen.cfg +222 -0
  446. data/ext/apex_ext/apex_src/vendor/libyaml/docker/README.mkd +17 -0
  447. data/ext/apex_ext/apex_src/vendor/libyaml/docker/alpine-3.7 +26 -0
  448. data/ext/apex_ext/apex_src/vendor/libyaml/docker/fedora-25 +26 -0
  449. data/ext/apex_ext/apex_src/vendor/libyaml/docker/ubuntu-14.04 +29 -0
  450. data/ext/apex_ext/apex_src/vendor/libyaml/docker/ubuntu-16.04 +24 -0
  451. data/ext/apex_ext/apex_src/vendor/libyaml/examples/anchors.yaml +10 -0
  452. data/ext/apex_ext/apex_src/vendor/libyaml/examples/array.yaml +2 -0
  453. data/ext/apex_ext/apex_src/vendor/libyaml/examples/global-tag.yaml +14 -0
  454. data/ext/apex_ext/apex_src/vendor/libyaml/examples/json.yaml +1 -0
  455. data/ext/apex_ext/apex_src/vendor/libyaml/examples/mapping.yaml +2 -0
  456. data/ext/apex_ext/apex_src/vendor/libyaml/examples/numbers.yaml +1 -0
  457. data/ext/apex_ext/apex_src/vendor/libyaml/examples/strings.yaml +7 -0
  458. data/ext/apex_ext/apex_src/vendor/libyaml/examples/tags.yaml +7 -0
  459. data/ext/apex_ext/apex_src/vendor/libyaml/examples/yaml-version.yaml +3 -0
  460. data/ext/apex_ext/apex_src/vendor/libyaml/include/Makefile.am +17 -0
  461. data/ext/apex_ext/apex_src/vendor/libyaml/include/yaml.h +1999 -0
  462. data/ext/apex_ext/apex_src/vendor/libyaml/pkg/ReadMe.md +77 -0
  463. data/ext/apex_ext/apex_src/vendor/libyaml/pkg/docker/Dockerfile +32 -0
  464. data/ext/apex_ext/apex_src/vendor/libyaml/pkg/docker/output/ReadMe +1 -0
  465. data/ext/apex_ext/apex_src/vendor/libyaml/pkg/docker/scripts/libyaml-dist.sh +23 -0
  466. data/ext/apex_ext/apex_src/vendor/libyaml/regression-inputs/clusterfuzz-testcase-minimized-5607885063061504.yml +1 -0
  467. data/ext/apex_ext/apex_src/vendor/libyaml/src/Makefile.am +4 -0
  468. data/ext/apex_ext/apex_src/vendor/libyaml/src/api.c +1393 -0
  469. data/ext/apex_ext/apex_src/vendor/libyaml/src/dumper.c +394 -0
  470. data/ext/apex_ext/apex_src/vendor/libyaml/src/emitter.c +2358 -0
  471. data/ext/apex_ext/apex_src/vendor/libyaml/src/loader.c +544 -0
  472. data/ext/apex_ext/apex_src/vendor/libyaml/src/parser.c +1416 -0
  473. data/ext/apex_ext/apex_src/vendor/libyaml/src/reader.c +469 -0
  474. data/ext/apex_ext/apex_src/vendor/libyaml/src/scanner.c +3598 -0
  475. data/ext/apex_ext/apex_src/vendor/libyaml/src/writer.c +141 -0
  476. data/ext/apex_ext/apex_src/vendor/libyaml/src/yaml_private.h +684 -0
  477. data/ext/apex_ext/apex_src/vendor/libyaml/tests/CMakeLists.txt +27 -0
  478. data/ext/apex_ext/apex_src/vendor/libyaml/tests/Makefile.am +9 -0
  479. data/ext/apex_ext/apex_src/vendor/libyaml/tests/ReadMe.md +63 -0
  480. data/ext/apex_ext/apex_src/vendor/libyaml/tests/example-deconstructor-alt.c +800 -0
  481. data/ext/apex_ext/apex_src/vendor/libyaml/tests/example-deconstructor.c +1127 -0
  482. data/ext/apex_ext/apex_src/vendor/libyaml/tests/example-reformatter-alt.c +217 -0
  483. data/ext/apex_ext/apex_src/vendor/libyaml/tests/example-reformatter.c +202 -0
  484. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-all-tests.sh +29 -0
  485. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-dumper.c +314 -0
  486. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-emitter-test-suite.c +290 -0
  487. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-emitter.c +327 -0
  488. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-loader.c +63 -0
  489. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-parser-test-suite.c +196 -0
  490. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-parser.c +88 -0
  491. data/ext/apex_ext/apex_src/vendor/libyaml/tests/run-scanner.c +63 -0
  492. data/ext/apex_ext/apex_src/vendor/libyaml/tests/test-reader.c +354 -0
  493. data/ext/apex_ext/apex_src/vendor/libyaml/tests/test-version.c +29 -0
  494. data/ext/apex_ext/apex_src/vendor/libyaml/yaml-0.1.pc.in +10 -0
  495. data/ext/apex_ext/apex_src/vendor/libyaml/yamlConfig.cmake.in +16 -0
  496. data/ext/apex_ext/extconf.rb +103 -0
  497. data/lib/apex/configurable.rb +46 -0
  498. data/lib/apex/document.rb +66 -0
  499. data/lib/apex/version.rb +15 -0
  500. data/lib/apex.rb +28 -0
  501. metadata +544 -0
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Header ID Generation Extension
3
+ * Generates IDs for headers following GFM or MMD6 rules
4
+ */
5
+
6
+ #ifndef APEX_HEADER_IDS_H
7
+ #define APEX_HEADER_IDS_H
8
+
9
+ #include "cmark-gfm.h"
10
+ #include <stdbool.h>
11
+
12
+ /**
13
+ * ID format options
14
+ */
15
+ typedef enum {
16
+ APEX_ID_FORMAT_GFM = 0, /* GFM style: "emoji-support" (with dashes, collapsed spaces) */
17
+ APEX_ID_FORMAT_MMD = 1, /* MMD6 style: "emojisupport" (preserves dashes, removes spaces) */
18
+ APEX_ID_FORMAT_KRAMDOWN = 2 /* Kramdown style: "header-one" (spaces→dashes, removes em/en dashes) */
19
+ } apex_id_format_t;
20
+
21
+ /**
22
+ * Generate header ID from text
23
+ * @param text Header text
24
+ * @param format ID format (GFM or MMD)
25
+ * @return Newly allocated ID string (must be freed)
26
+ */
27
+ char *apex_generate_header_id(const char *text, apex_id_format_t format);
28
+
29
+ /**
30
+ * Extract text content from a heading node
31
+ * @param heading_node The heading AST node
32
+ * @return Newly allocated text string (must be freed)
33
+ */
34
+ char *apex_extract_heading_text(cmark_node *heading_node);
35
+
36
+ /**
37
+ * Extract manual header ID from heading text
38
+ * Supports:
39
+ * - MultiMarkdown: "Heading [id]" -> returns "id", removes "[id]" from text
40
+ * - Kramdown: "Heading {#id}" -> returns "id", removes "{#id}" from text
41
+ * - IAL: "Heading {: #id}" -> handled separately by IAL processor
42
+ *
43
+ * @param heading_text Heading text (will be modified to remove ID syntax)
44
+ * @param manual_id_out Output parameter for extracted ID (must be freed by caller)
45
+ * @return true if manual ID was found and extracted
46
+ */
47
+ bool apex_extract_manual_header_id(char **heading_text, char **manual_id_out);
48
+
49
+ /**
50
+ * Process manual header IDs in a heading node
51
+ * Extracts MMD [id] or Kramdown {#id} syntax and stores ID in user_data
52
+ * Updates the heading text node to remove the manual ID syntax
53
+ *
54
+ * @param heading_node The heading AST node
55
+ * @return true if manual ID was found and processed
56
+ */
57
+ bool apex_process_manual_header_id(cmark_node *heading_node);
58
+
59
+ #endif
60
+
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Simple Highlight Extension
3
+ * Converts ==text== to <mark>text</mark>
4
+ */
5
+
6
+ #include "highlight.h"
7
+ #include <string.h>
8
+ #include <stdlib.h>
9
+ #include <stdbool.h>
10
+
11
+ /**
12
+ * Process ==highlight== syntax as preprocessing
13
+ * Converts to <mark>text</mark> before parsing
14
+ */
15
+ char *apex_process_highlights(const char *text) {
16
+ if (!text) return NULL;
17
+
18
+ size_t len = strlen(text);
19
+ size_t capacity = len * 2; /* Room for <mark> tags */
20
+ char *output = malloc(capacity);
21
+ if (!output) return NULL;
22
+
23
+ const char *read = text;
24
+ char *write = output;
25
+ size_t remaining = capacity;
26
+
27
+ bool in_code_block = false;
28
+ bool in_inline_code = false;
29
+
30
+ while (*read) {
31
+ /* Track code blocks (skip highlighting inside them) */
32
+ if (*read == '`') {
33
+ if (read[1] == '`' && read[2] == '`') {
34
+ in_code_block = !in_code_block;
35
+ } else if (!in_code_block) {
36
+ in_inline_code = !in_inline_code;
37
+ }
38
+ }
39
+
40
+ /* Look for ==highlight== (not in code, not Critic Markup) */
41
+ /* Skip if preceded by { (Critic Markup) */
42
+ bool is_critic = (read > text && read[-1] == '{');
43
+
44
+ /* Check opening == requirements:
45
+ * - Exactly 2 = characters: read[0] == '=' && read[1] == '='
46
+ * - Not preceded by = or + (or beginning of line): (?<![=+])
47
+ * - Character after == is not =: read[2] != '='
48
+ * - Character immediately before or after == is not +
49
+ * - Character after == is not whitespace
50
+ */
51
+ bool preceded_by_equals = (read > text && read[-1] == '=');
52
+ bool preceded_by_plus = (read > text && read[-1] == '+');
53
+ bool followed_by_plus = (read[2] == '+');
54
+ bool is_valid_highlight_start = (read[0] == '=' && read[1] == '=' &&
55
+ read[2] != '=' && read[2] != '}' &&
56
+ read[2] != '\0' && read[2] != '\n' &&
57
+ read[2] != '\r' && read[2] != ' ' && read[2] != '\t' &&
58
+ !preceded_by_equals && !preceded_by_plus && !followed_by_plus);
59
+
60
+ if (!in_code_block && !in_inline_code && !is_critic && is_valid_highlight_start) {
61
+
62
+ /* Find closing == */
63
+ const char *close = read + 2;
64
+ while (*close && *close != '\n' && *close != '\r') {
65
+ if (close[0] == '=' && close[1] == '=') {
66
+ /* Check closing == requirements:
67
+ * - Character after closing == is not =
68
+ * - Character before closing == is not space
69
+ * - Character immediately before or after closing == is not +
70
+ */
71
+ bool closing_followed_by_equals = (close[2] == '=');
72
+ bool closing_preceded_by_space = (close > read + 2 && (close[-1] == ' ' || close[-1] == '\t'));
73
+ bool closing_preceded_by_plus = (close > read + 2 && close[-1] == '+');
74
+ bool closing_followed_by_plus = (close[2] == '+');
75
+
76
+ if (!closing_followed_by_equals && !closing_preceded_by_space &&
77
+ !closing_preceded_by_plus && !closing_followed_by_plus) {
78
+ break;
79
+ }
80
+ }
81
+ close++;
82
+ }
83
+
84
+ if (*close && close[0] == '=' && close[1] == '=' && close[2] != '=') {
85
+ /* Found complete ==highlight== */
86
+ size_t content_len = close - (read + 2);
87
+
88
+ /* Ensure there's actual content (not just == on a line by itself) */
89
+ if (content_len > 0) {
90
+ /* Write <mark> */
91
+ const char *open_tag = "<mark>";
92
+ size_t tag_len = strlen(open_tag);
93
+ if (tag_len < remaining) {
94
+ memcpy(write, open_tag, tag_len);
95
+ write += tag_len;
96
+ remaining -= tag_len;
97
+ }
98
+
99
+ /* Copy highlighted content */
100
+ if (content_len < remaining) {
101
+ memcpy(write, read + 2, content_len);
102
+ write += content_len;
103
+ remaining -= content_len;
104
+ }
105
+
106
+ /* Write </mark> */
107
+ const char *close_tag = "</mark>";
108
+ tag_len = strlen(close_tag);
109
+ if (tag_len < remaining) {
110
+ memcpy(write, close_tag, tag_len);
111
+ write += tag_len;
112
+ remaining -= tag_len;
113
+ }
114
+
115
+ /* Skip past the closing == */
116
+ read = close + 2;
117
+ continue;
118
+ }
119
+ }
120
+ }
121
+
122
+ /* Copy character */
123
+ if (remaining > 0) {
124
+ *write++ = *read++;
125
+ remaining--;
126
+ } else {
127
+ read++;
128
+ }
129
+ }
130
+
131
+ *write = '\0';
132
+ return output;
133
+ }
134
+
135
+
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Simple Highlight Extension
3
+ * Handles ==text== syntax (not part of CommonMark, but widely supported)
4
+ */
5
+
6
+ #ifndef APEX_HIGHLIGHT_H
7
+ #define APEX_HIGHLIGHT_H
8
+
9
+ /**
10
+ * Process ==highlight== syntax in text
11
+ * Converts ==text== to <mark>text</mark>
12
+ */
13
+ char *apex_process_highlights(const char *text);
14
+
15
+ #endif
16
+
@@ -0,0 +1,408 @@
1
+ /**
2
+ * HTML Markdown Attributes Extension for Apex
3
+ * Implementation
4
+ */
5
+
6
+ #include "html_markdown.h"
7
+ #include "ial.h"
8
+ #include "../html_renderer.h"
9
+ #include "cmark-gfm.h"
10
+ #include <stdio.h>
11
+ #include <stdlib.h>
12
+ #include <string.h>
13
+ #include <ctype.h>
14
+ #include <stdbool.h>
15
+
16
+ /**
17
+ * Find the next HTML tag with markdown attribute
18
+ * Returns position of '<' or NULL if not found
19
+ */
20
+ static const char *find_markdown_tag(const char *text, char *tag_name, size_t tag_name_size,
21
+ char *markdown_attr, size_t attr_size, size_t *tag_length) {
22
+ const char *pos = text;
23
+
24
+ while (*pos) {
25
+ /* Find opening < */
26
+ if (*pos == '<' && pos[1] != '/' && pos[1] != '!') {
27
+ const char *tag_start = pos;
28
+ pos++;
29
+
30
+ /* Extract tag name */
31
+ const char *name_start = pos;
32
+ while (*pos && (isalnum((unsigned char)*pos) || *pos == '-' || *pos == '_')) {
33
+ pos++;
34
+ }
35
+
36
+ size_t name_len = pos - name_start;
37
+ if (name_len == 0 || name_len >= tag_name_size) {
38
+ pos = tag_start + 1;
39
+ continue;
40
+ }
41
+
42
+ memcpy(tag_name, name_start, name_len);
43
+ tag_name[name_len] = '\0';
44
+
45
+ /* Look for markdown attribute in tag */
46
+ const char *tag_end = strchr(pos, '>');
47
+ if (!tag_end) {
48
+ pos = tag_start + 1;
49
+ continue;
50
+ }
51
+
52
+ /* Search for markdown= in attributes */
53
+ const char *attr_search = pos;
54
+ while (attr_search < tag_end) {
55
+ /* Skip whitespace */
56
+ while (attr_search < tag_end && isspace((unsigned char)*attr_search)) {
57
+ attr_search++;
58
+ }
59
+
60
+ /* Check for markdown attribute */
61
+ if (strncmp(attr_search, "markdown=", 9) == 0) {
62
+ attr_search += 9;
63
+
64
+ /* Get attribute value */
65
+ char quote = 0;
66
+ if (*attr_search == '"' || *attr_search == '\'') {
67
+ quote = *attr_search;
68
+ attr_search++;
69
+ }
70
+
71
+ const char *value_start = attr_search;
72
+ const char *value_end = value_start;
73
+
74
+ if (quote) {
75
+ value_end = strchr(value_start, quote);
76
+ if (!value_end) value_end = tag_end;
77
+ } else {
78
+ while (*value_end && !isspace((unsigned char)*value_end) && *value_end != '>') {
79
+ value_end++;
80
+ }
81
+ }
82
+
83
+ size_t value_len = value_end - value_start;
84
+ if (value_len < attr_size) {
85
+ memcpy(markdown_attr, value_start, value_len);
86
+ markdown_attr[value_len] = '\0';
87
+
88
+ *tag_length = (tag_end - tag_start) + 1;
89
+ return tag_start;
90
+ }
91
+ }
92
+
93
+ /* Move to next attribute */
94
+ while (attr_search < tag_end && !isspace((unsigned char)*attr_search)) {
95
+ attr_search++;
96
+ }
97
+ }
98
+
99
+ pos = tag_start + 1;
100
+ } else {
101
+ pos++;
102
+ }
103
+ }
104
+
105
+ return NULL;
106
+ }
107
+
108
+ /**
109
+ * Find matching closing tag
110
+ * Handles nested tags correctly
111
+ */
112
+ static const char *find_closing_tag(const char *text, const char *tag_name) {
113
+ int depth = 1;
114
+ const char *pos = text;
115
+ size_t tag_len = strlen(tag_name);
116
+
117
+ while (*pos && depth > 0) {
118
+ if (*pos == '<') {
119
+ /* Check for closing tag */
120
+ if (pos[1] == '/' && strncasecmp(pos + 2, tag_name, tag_len) == 0 &&
121
+ (pos[2 + tag_len] == '>' || isspace((unsigned char)pos[2 + tag_len]))) {
122
+ depth--;
123
+ if (depth == 0) {
124
+ /* Find the > */
125
+ const char *end = strchr(pos, '>');
126
+ return end ? end + 1 : NULL;
127
+ }
128
+ }
129
+ /* Check for opening tag (nested) */
130
+ else if (pos[1] != '/' && pos[1] != '!' &&
131
+ strncasecmp(pos + 1, tag_name, tag_len) == 0 &&
132
+ (pos[1 + tag_len] == '>' || isspace((unsigned char)pos[1 + tag_len]))) {
133
+ depth++;
134
+ }
135
+ }
136
+ pos++;
137
+ }
138
+
139
+ return NULL;
140
+ }
141
+
142
+ /**
143
+ * Process HTML tags with markdown attributes
144
+ * If img_attrs is non-NULL, image attributes (e.g. width/height from ref defs) are applied to images in markdown="1" regions.
145
+ */
146
+ char *apex_process_html_markdown(const char *text, void *img_attrs) {
147
+ if (!text) return NULL;
148
+
149
+ image_attr_entry *attrs = (image_attr_entry *)img_attrs;
150
+
151
+ size_t text_len = strlen(text);
152
+ size_t output_capacity = text_len * 2;
153
+ char *output = malloc(output_capacity);
154
+ if (!output) return NULL;
155
+
156
+ const char *read_pos = text;
157
+ char *write_pos = output;
158
+ size_t remaining = output_capacity;
159
+
160
+ while (*read_pos) {
161
+ char tag_name[64];
162
+ char markdown_attr[64];
163
+ size_t tag_length;
164
+
165
+ /* Find next HTML tag with markdown attribute */
166
+ const char *tag_start = find_markdown_tag(read_pos, tag_name, sizeof(tag_name),
167
+ markdown_attr, sizeof(markdown_attr), &tag_length);
168
+
169
+ if (!tag_start) {
170
+ /* No more markdown tags, copy rest */
171
+ size_t rest_len = strlen(read_pos);
172
+ if (rest_len < remaining) {
173
+ memcpy(write_pos, read_pos, rest_len);
174
+ write_pos += rest_len;
175
+ remaining -= rest_len;
176
+ }
177
+ break;
178
+ }
179
+
180
+ /* Copy text before tag */
181
+ size_t prefix_len = tag_start - read_pos;
182
+ if (prefix_len < remaining) {
183
+ memcpy(write_pos, read_pos, prefix_len);
184
+ write_pos += prefix_len;
185
+ remaining -= prefix_len;
186
+ }
187
+
188
+ /* Find content between tags */
189
+ const char *content_start = tag_start + tag_length;
190
+ const char *closing_tag = find_closing_tag(content_start, tag_name);
191
+
192
+ if (!closing_tag) {
193
+ /* No closing tag, just copy the opening tag */
194
+ if (tag_length < remaining) {
195
+ memcpy(write_pos, tag_start, tag_length);
196
+ write_pos += tag_length;
197
+ remaining -= tag_length;
198
+ }
199
+ read_pos = content_start;
200
+ continue;
201
+ }
202
+
203
+ /* Extract content */
204
+ size_t content_len = closing_tag - content_start;
205
+
206
+ /* Find the actual closing tag start for later */
207
+ const char *closing_tag_start = closing_tag;
208
+ while (closing_tag_start > content_start && *(closing_tag_start - 1) != '<') {
209
+ closing_tag_start--;
210
+ }
211
+ if (closing_tag_start > content_start && *(closing_tag_start - 1) == '<') {
212
+ closing_tag_start--;
213
+ }
214
+ content_len = closing_tag_start - content_start;
215
+
216
+ /* Process based on markdown attribute value */
217
+ bool parse_markdown = false;
218
+ bool parse_inline = false;
219
+
220
+ if (strcmp(markdown_attr, "1") == 0 || strcmp(markdown_attr, "block") == 0) {
221
+ parse_markdown = true;
222
+ parse_inline = false;
223
+ } else if (strcmp(markdown_attr, "span") == 0) {
224
+ parse_markdown = true;
225
+ parse_inline = true;
226
+ } else if (strcmp(markdown_attr, "0") == 0) {
227
+ parse_markdown = false;
228
+ }
229
+
230
+ if (parse_markdown && content_len > 0) {
231
+ /* Extract content */
232
+ char *content = malloc(content_len + 1);
233
+ if (content) {
234
+ memcpy(content, content_start, content_len);
235
+ content[content_len] = '\0';
236
+
237
+ /* Recursively process nested divs with markdown="1" BEFORE parsing */
238
+ /* This ensures nested divs are processed before cmark-gfm sees them */
239
+ char *processed_content = apex_process_html_markdown(content, img_attrs);
240
+ if (processed_content) {
241
+ free(content);
242
+ content = processed_content;
243
+ content_len = strlen(content);
244
+ }
245
+
246
+ /* Create parser and parse */
247
+ /* Use CMARK_OPT_UNSAFE to allow raw HTML (including nested divs) */
248
+ int cmark_opts = CMARK_OPT_DEFAULT | CMARK_OPT_UNSAFE;
249
+ cmark_parser *parser = cmark_parser_new(cmark_opts);
250
+ if (parser) {
251
+ cmark_parser_feed(parser, content, content_len);
252
+ cmark_node *doc = cmark_parser_finish(parser);
253
+
254
+ if (doc) {
255
+ /* Process IAL in inner content so block/span IAL (e.g. {: .lead }) are applied */
256
+ apex_process_ial_in_tree(doc, NULL);
257
+ /* Apply image attributes (e.g. width/height from ref defs) so images in fenced divs get them */
258
+ if (attrs) {
259
+ apex_apply_image_attributes(doc, attrs);
260
+ }
261
+ /* Render to HTML with IAL attributes injected */
262
+ char *html = apex_render_html_with_attributes(doc, cmark_opts);
263
+ if (html) {
264
+ /* Write opening tag (without markdown attribute) */
265
+ char opening_tag[2048];
266
+ size_t tag_written = 0;
267
+
268
+ /* Reconstruct tag without markdown attribute */
269
+ snprintf(opening_tag, sizeof(opening_tag), "<%s", tag_name);
270
+ tag_written = strlen(opening_tag);
271
+
272
+ /* Copy attributes except markdown */
273
+ const char *attrs_start = strchr(tag_start + 1, ' ');
274
+ if (attrs_start && attrs_start < content_start) {
275
+ const char *attrs_end = strchr(attrs_start, '>');
276
+ if (attrs_end) {
277
+ /* Parse and copy attributes, filtering out markdown attribute */
278
+ const char *attr_pos = attrs_start;
279
+ while (attr_pos < attrs_end) {
280
+ /* Skip whitespace */
281
+ while (attr_pos < attrs_end && isspace((unsigned char)*attr_pos)) {
282
+ attr_pos++;
283
+ }
284
+ if (attr_pos >= attrs_end) break;
285
+
286
+ /* Check if this is the markdown attribute */
287
+ if (strncmp(attr_pos, "markdown=", 9) == 0) {
288
+ /* Skip markdown attribute */
289
+ attr_pos += 9;
290
+ /* Skip attribute value */
291
+ if (*attr_pos == '"' || *attr_pos == '\'') {
292
+ char quote = *attr_pos++;
293
+ while (attr_pos < attrs_end && *attr_pos != quote) {
294
+ if (*attr_pos == '\\' && attr_pos + 1 < attrs_end) attr_pos++;
295
+ attr_pos++;
296
+ }
297
+ if (*attr_pos == quote) attr_pos++;
298
+ } else {
299
+ while (attr_pos < attrs_end && !isspace((unsigned char)*attr_pos) && *attr_pos != '>') {
300
+ attr_pos++;
301
+ }
302
+ }
303
+ continue;
304
+ }
305
+
306
+ /* Copy this attribute */
307
+ const char *attr_start = attr_pos;
308
+ while (attr_pos < attrs_end && *attr_pos != '>') {
309
+ /* Check if we've reached the start of the next attribute */
310
+ if (attr_pos > attr_start && (isspace((unsigned char)*attr_pos) || *attr_pos == '>')) {
311
+ /* Check if next token is markdown= */
312
+ const char *next = attr_pos;
313
+ while (next < attrs_end && isspace((unsigned char)*next)) next++;
314
+ if (strncmp(next, "markdown=", 9) == 0) {
315
+ break; /* Stop before markdown attribute */
316
+ }
317
+ }
318
+ attr_pos++;
319
+ }
320
+
321
+ /* Copy attribute to opening_tag */
322
+ size_t attr_len = attr_pos - attr_start;
323
+ if (tag_written + attr_len + 1 < sizeof(opening_tag)) {
324
+ opening_tag[tag_written++] = ' ';
325
+ memcpy(opening_tag + tag_written, attr_start, attr_len);
326
+ tag_written += attr_len;
327
+ }
328
+ }
329
+ opening_tag[tag_written++] = '>';
330
+ opening_tag[tag_written] = '\0';
331
+ }
332
+ } else {
333
+ opening_tag[tag_written++] = '>';
334
+ opening_tag[tag_written] = '\0';
335
+ }
336
+
337
+ if (tag_written < remaining) {
338
+ memcpy(write_pos, opening_tag, tag_written);
339
+ write_pos += tag_written;
340
+ remaining -= tag_written;
341
+ }
342
+
343
+ /* Write parsed HTML (trim outer <p> tags if inline) */
344
+ char *html_content = html;
345
+ size_t html_len = strlen(html);
346
+
347
+ if (parse_inline && html_len > 7 &&
348
+ strncmp(html, "<p>", 3) == 0 &&
349
+ strcmp(html + html_len - 5, "</p>\n") == 0) {
350
+ /* Strip <p> tags for inline */
351
+ html_content = html + 3;
352
+ html_len -= 8;
353
+ html_content[html_len] = '\0';
354
+ }
355
+
356
+ if (html_len < remaining) {
357
+ memcpy(write_pos, html_content, html_len);
358
+ write_pos += html_len;
359
+ remaining -= html_len;
360
+ }
361
+
362
+ free(html);
363
+ }
364
+ cmark_node_free(doc);
365
+ }
366
+ cmark_parser_free(parser);
367
+ }
368
+ free(content);
369
+ }
370
+
371
+ /* Write closing tag */
372
+ size_t closing_len = closing_tag - closing_tag_start;
373
+ if (closing_len < remaining) {
374
+ memcpy(write_pos, closing_tag_start, closing_len);
375
+ write_pos += closing_len;
376
+ remaining -= closing_len;
377
+ }
378
+
379
+ /* Ensure newline after closing tag so following markdown is parsed correctly */
380
+ /* Check if closing tag ends with newline */
381
+ bool needs_newline = true;
382
+ if (closing_len > 0) {
383
+ const char *last_char = closing_tag_start + closing_len - 1;
384
+ if (*last_char == '\n' || (*last_char == '\r' && closing_len > 1 && *(last_char - 1) == '\n')) {
385
+ needs_newline = false;
386
+ }
387
+ }
388
+ if (needs_newline && remaining > 0) {
389
+ *write_pos++ = '\n';
390
+ remaining--;
391
+ }
392
+ } else {
393
+ /* markdown="0" or no parsing - copy everything as-is */
394
+ size_t total_len = closing_tag - tag_start;
395
+ if (total_len < remaining) {
396
+ memcpy(write_pos, tag_start, total_len);
397
+ write_pos += total_len;
398
+ remaining -= total_len;
399
+ }
400
+ }
401
+
402
+ read_pos = closing_tag;
403
+ }
404
+
405
+ *write_pos = '\0';
406
+ return output;
407
+ }
408
+
@@ -0,0 +1,42 @@
1
+ /**
2
+ * HTML Markdown Attributes Extension for Apex
3
+ *
4
+ * Parse markdown inside HTML tags based on the `markdown` attribute:
5
+ *
6
+ * <div markdown="1">
7
+ * ## This markdown is parsed (block-level)
8
+ * </div>
9
+ *
10
+ * <span markdown="span">*emphasis* works</span>
11
+ *
12
+ * <div markdown="block">
13
+ * Same as markdown="1"
14
+ * </div>
15
+ *
16
+ * <div markdown="0">
17
+ * ## This is literal, not parsed
18
+ * </div>
19
+ */
20
+
21
+ #ifndef APEX_HTML_MARKDOWN_H
22
+ #define APEX_HTML_MARKDOWN_H
23
+
24
+ #ifdef __cplusplus
25
+ extern "C" {
26
+ #endif
27
+
28
+ struct image_attr_entry;
29
+
30
+ /**
31
+ * Process HTML tags with markdown attributes (preprocessing)
32
+ * Returns newly allocated string with markdown content parsed.
33
+ * If img_attrs is non-NULL, image attributes (e.g. width/height from ref defs) are applied to images in markdown="1" regions.
34
+ */
35
+ char *apex_process_html_markdown(const char *text, void *img_attrs);
36
+
37
+ #ifdef __cplusplus
38
+ }
39
+ #endif
40
+
41
+ #endif /* APEX_HTML_MARKDOWN_H */
42
+