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,1622 @@
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 0.1.49">
9
+ <title>Document</title>
10
+ <style>
11
+ body {
12
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
13
+ line-height: 1.6;
14
+ max-width: 800px;
15
+ margin: 2rem auto;
16
+ padding: 0 1rem;
17
+ color: #333;
18
+ }
19
+ pre { background: #f5f5f5; padding: 1rem; overflow-x: auto; }
20
+ code { background: #f0f0f0; padding: 0.2em 0.4em; border-radius: 3px; }
21
+ blockquote { border-left: 4px solid #ddd; margin: 0; padding-left: 1rem; color: #666; }
22
+ table { border-collapse: collapse; width: 100%%; }
23
+ th, td { border: 1px solid #ddd; padding: 0.5rem; }
24
+ th { background: #f5f5f5; }
25
+ tfoot td { background: #e8e8e8; }
26
+ figure.table-figure { width: fit-content; margin: 1em 0; }
27
+ figure.table-figure table { width: auto; }
28
+ figcaption { text-align: center; font-weight: bold; font-size: 0.8em; }
29
+ .page-break { page-break-after: always; }
30
+ .callout { padding: 1rem; margin: 1rem 0; border-left: 4px solid; }
31
+ .callout-note { border-color: #3b82f6; background: #eff6ff; }
32
+ .callout-warning { border-color: #f59e0b; background: #fffbeb; }
33
+ .callout-tip { border-color: #10b981; background: #f0fdf4; }
34
+ .callout-danger { border-color: #ef4444; background: #fef2f2; }
35
+ ins { background: #d4fcbc; text-decoration: none; }
36
+ del { background: #fbb6c2; text-decoration: line-through; }
37
+ mark { background: #fff3cd; }
38
+ .critic.comment { background: #e7e7e7; color: #666; font-style: italic; }
39
+ </style>
40
+ <style>
41
+ /* Base styles */
42
+ body {
43
+ -webkit-font-smoothing: antialiased;
44
+ -moz-osx-font-smoothing: grayscale;
45
+ font-size: 17px;
46
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
47
+ "Helvetica Neue", Arial, sans-serif;
48
+ line-height: 1.65;
49
+ color: #1e293b;
50
+ background-color: #fff;
51
+ }
52
+
53
+ /* Sidebar / Main TOC - wider on larger screens */
54
+ .main-toc,
55
+ .sidebar {
56
+ position: fixed;
57
+ left: 0;
58
+ top: 0;
59
+ width: auto;
60
+ min-width: 180px;
61
+ max-width: 250px;
62
+ height: 100vh;
63
+ overflow-y: auto;
64
+ background: #1e293b;
65
+ color: rgba(255, 255, 255, 0.9);
66
+ border-right: 2px solid rgba(255, 255, 255, 0.1);
67
+ padding: 24px 20px 130px;
68
+ font-size: 14px;
69
+ z-index: 100;
70
+ margin-right: 1rem;
71
+ box-shadow: 4px 0 24px rgba(0, 0, 0, 0.08);
72
+ transition: transform 0.3s ease;
73
+ }
74
+
75
+ .main-toc ul,
76
+ .sidebar ul {
77
+ list-style: none;
78
+ padding-left: 0;
79
+ margin: 0;
80
+ padding-bottom: 80px;
81
+ }
82
+
83
+ .main-toc ul::after,
84
+ .sidebar ul::after {
85
+ content: "";
86
+ display: block;
87
+ height: 80px;
88
+ }
89
+
90
+ .main-toc li,
91
+ .sidebar li {
92
+ margin: 0.25em 0;
93
+ }
94
+
95
+ .main-toc a,
96
+ .sidebar a {
97
+ color: rgba(255, 255, 255, 0.85);
98
+ text-decoration: none;
99
+ display: block;
100
+ padding: 6px 12px;
101
+ border-radius: 4px;
102
+ transition: all 0.15s ease;
103
+ white-space: nowrap;
104
+ overflow: hidden;
105
+ text-overflow: ellipsis;
106
+ }
107
+
108
+ .main-toc a:hover,
109
+ .sidebar a:hover {
110
+ background: #334155;
111
+ color: #fff;
112
+ }
113
+
114
+ .sidebar a.active {
115
+ color: #0ea5e9;
116
+ font-weight: 500;
117
+ }
118
+
119
+ /* Body margin for sidebar */
120
+ body {
121
+ margin-left: 270px;
122
+ }
123
+
124
+ /* Hamburger menu button */
125
+ .hamburger-menu {
126
+ display: none;
127
+ position: fixed;
128
+ top: 12px;
129
+ left: 12px;
130
+ z-index: 200;
131
+ background: #1e293b;
132
+ border: 2px solid rgba(255, 255, 255, 0.1);
133
+ border-radius: 6px;
134
+ padding: 10px;
135
+ cursor: pointer;
136
+ color: rgba(255, 255, 255, 0.9);
137
+ font-size: 20px;
138
+ line-height: 1;
139
+ width: 44px;
140
+ height: 44px;
141
+ align-items: center;
142
+ justify-content: center;
143
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
144
+ transition: all 0.2s ease;
145
+ opacity: 0.2;
146
+ }
147
+
148
+ .hamburger-menu:hover {
149
+ background: #334155;
150
+ color: #fff;
151
+ opacity: 1;
152
+ }
153
+
154
+ /* Move hamburger to the right of the sidebar when menu is open */
155
+ .hamburger-menu.active {
156
+ left: calc(
157
+ 250px + 12px
158
+ ); /* Position just to the right of sidebar (max-width 250px + 12px padding) */
159
+ }
160
+
161
+ .hamburger-menu.active {
162
+ background: #0ea5e9;
163
+ }
164
+
165
+ .hamburger-menu::before {
166
+ content: "☰";
167
+ }
168
+
169
+ .hamburger-menu.active::before {
170
+ content: "✕";
171
+ }
172
+
173
+ /* Mobile menu overlay */
174
+ .mobile-menu-overlay {
175
+ display: none;
176
+ position: fixed;
177
+ top: 0;
178
+ left: 0;
179
+ right: 0;
180
+ bottom: 0;
181
+ background: rgba(0, 0, 0, 0.5);
182
+ z-index: 150;
183
+ opacity: 0;
184
+ visibility: hidden;
185
+ transition: opacity 0.3s ease, visibility 0.3s ease;
186
+ }
187
+
188
+ .mobile-menu-overlay.active {
189
+ opacity: 1;
190
+ visibility: visible;
191
+ }
192
+
193
+ /* Page TOC */
194
+ .page-toc {
195
+ background: #f9f9f9;
196
+ border: 1px solid #ddd;
197
+ border-radius: 4px;
198
+ padding: 1rem;
199
+ margin: 1.5rem 0;
200
+ }
201
+
202
+ .page-toc ul {
203
+ list-style: none;
204
+ padding-left: 0;
205
+ margin: 0;
206
+ }
207
+
208
+ .page-toc > ul {
209
+ padding-left: 0;
210
+ }
211
+
212
+ .page-toc li {
213
+ margin: 0.25em 0;
214
+ }
215
+
216
+ .page-toc a {
217
+ color: #0066cc;
218
+ text-decoration: none;
219
+ display: block;
220
+ padding: 0.25em 0.5em;
221
+ border-radius: 3px;
222
+ }
223
+
224
+ .page-toc a:hover {
225
+ background: #e0e0e0;
226
+ color: #004499;
227
+ }
228
+
229
+ .page-toc ul ul {
230
+ list-style: none;
231
+ padding-left: 1.5em;
232
+ margin-top: 0.25em;
233
+ margin-left: 0;
234
+ }
235
+
236
+ .page-toc ul ul ul {
237
+ padding-left: 1.5em;
238
+ }
239
+
240
+ .page-toc ul ul a {
241
+ font-size: 0.9em;
242
+ color: #555;
243
+ }
244
+
245
+ .page-toc ul ul ul a {
246
+ font-size: 0.85em;
247
+ color: #666;
248
+ }
249
+
250
+ /* Floating TOC */
251
+ .floating-toc {
252
+ position: fixed;
253
+ top: 0;
254
+ left: 270px;
255
+ right: 0;
256
+ z-index: 50;
257
+ opacity: 0;
258
+ visibility: hidden;
259
+ transition: opacity 0.2s ease, visibility 0.2s ease;
260
+ pointer-events: none;
261
+ display: flex;
262
+ justify-content: flex-end;
263
+ padding-right: 2rem;
264
+ }
265
+
266
+ .floating-toc.visible {
267
+ opacity: 1;
268
+ visibility: visible;
269
+ pointer-events: auto;
270
+ }
271
+
272
+ .floating-toc-container {
273
+ background: rgba(255, 255, 255, 0.95);
274
+ backdrop-filter: blur(10px);
275
+ border-bottom: 1px solid #ddd;
276
+ border-radius: 0 0 12px 12px;
277
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
278
+ width: fit-content;
279
+ max-width: 400px;
280
+ min-width: 200px;
281
+ overflow: hidden;
282
+ transition: max-height 0.3s ease;
283
+ }
284
+
285
+ .floating-toc-header {
286
+ padding: 8px 16px;
287
+ cursor: pointer;
288
+ user-select: none;
289
+ font-size: 14px;
290
+ font-weight: 500;
291
+ color: #1e293b;
292
+ display: flex;
293
+ align-items: center;
294
+ justify-content: space-between;
295
+ }
296
+
297
+ .floating-toc-header:hover {
298
+ background: rgba(0, 0, 0, 0.02);
299
+ }
300
+
301
+ .floating-toc-content {
302
+ max-height: 0;
303
+ overflow: hidden;
304
+ transition: max-height 0.3s ease;
305
+ }
306
+
307
+ .floating-toc-container:hover .floating-toc-content {
308
+ max-height: 70vh;
309
+ overflow-y: auto;
310
+ }
311
+
312
+ .floating-toc-content ul {
313
+ list-style: none;
314
+ padding: 8px 16px 16px;
315
+ margin: 0;
316
+ }
317
+
318
+ .floating-toc-content li {
319
+ margin: 0.1em 0;
320
+ }
321
+
322
+ .floating-toc-content a {
323
+ color: #0066cc;
324
+ text-decoration: none;
325
+ display: block;
326
+ padding: 0.2em 0.5em;
327
+ border-radius: 4px;
328
+ font-size: 13px;
329
+ transition: background 0.15s ease;
330
+ }
331
+
332
+ .floating-toc-content a:hover {
333
+ background: #e0e0e0;
334
+ color: #004499;
335
+ }
336
+
337
+ .floating-toc-content ul ul {
338
+ padding-left: 1.2em;
339
+ margin-top: 0;
340
+ margin-bottom: 0;
341
+ }
342
+
343
+ .floating-toc-content ul ul ul {
344
+ margin-top: 0;
345
+ margin-bottom: 0;
346
+ }
347
+
348
+ .floating-toc-content ul ul a {
349
+ font-size: 12px;
350
+ color: #555;
351
+ }
352
+
353
+ .floating-toc-content ul ul ul a {
354
+ font-size: 11px;
355
+ color: #666;
356
+ }
357
+
358
+ /* Smooth scrolling */
359
+ html {
360
+ scroll-behavior: smooth;
361
+ }
362
+
363
+ /* Code blocks */
364
+ code {
365
+ background: #f0f0f0;
366
+ padding: 0.2em 0.4em;
367
+ border-radius: 3px;
368
+ font-family: "Monaco", "Menlo", "Ubuntu Mono", monospace;
369
+ font-size: 0.9em;
370
+ margin: 0 0.1em;
371
+ }
372
+
373
+ pre {
374
+ background: #f5f5f5;
375
+ padding: 1rem;
376
+ overflow-x: auto;
377
+ border-radius: 4px;
378
+ margin: 1em 0;
379
+ }
380
+
381
+ pre code {
382
+ background: none;
383
+ padding: 0;
384
+ margin: 0;
385
+ }
386
+
387
+ /* Rouge syntax highlighting - GitHub theme, scoped to .highlight containers */
388
+ .highlight {
389
+ color: #24292e;
390
+ }
391
+
392
+ .highlight .c {
393
+ color: #6a737d;
394
+ font-style: italic;
395
+ } /* Comment */
396
+ .highlight .err {
397
+ color: #a61717;
398
+ background-color: #e3d2d2;
399
+ } /* Error */
400
+ .highlight .k {
401
+ color: #d73a49;
402
+ font-weight: bold;
403
+ } /* Keyword */
404
+ .highlight .l {
405
+ color: #032f62;
406
+ } /* Literal */
407
+ .highlight .n {
408
+ color: #24292e;
409
+ } /* Name */
410
+ .highlight .o {
411
+ color: #d73a49;
412
+ } /* Operator */
413
+ .highlight .p {
414
+ color: #24292e;
415
+ } /* Punctuation */
416
+ .highlight .cm {
417
+ color: #6a737d;
418
+ font-style: italic;
419
+ } /* Comment.Multiline */
420
+ .highlight .cp {
421
+ color: #6a737d;
422
+ font-weight: bold;
423
+ } /* Comment.Preproc */
424
+ .highlight .c1 {
425
+ color: #6a737d;
426
+ font-style: italic;
427
+ } /* Comment.Single */
428
+ .highlight .cs {
429
+ color: #6a737d;
430
+ font-weight: bold;
431
+ font-style: italic;
432
+ } /* Comment.Special */
433
+ .highlight .gd {
434
+ color: #24292e;
435
+ background-color: #ffeef0;
436
+ } /* Generic.Deleted */
437
+ .highlight .ge {
438
+ color: #24292e;
439
+ font-style: italic;
440
+ } /* Generic.Emph */
441
+ .highlight .gr {
442
+ color: #aa0000;
443
+ } /* Generic.Error */
444
+ .highlight .gh {
445
+ color: #999999;
446
+ font-weight: bold;
447
+ } /* Generic.Heading */
448
+ .highlight .gi {
449
+ color: #24292e;
450
+ background-color: #f0fff4;
451
+ } /* Generic.Inserted */
452
+ .highlight .go {
453
+ color: #888888;
454
+ } /* Generic.Output */
455
+ .highlight .gp {
456
+ color: #555555;
457
+ } /* Generic.Prompt */
458
+ .highlight .gs {
459
+ font-weight: bold;
460
+ } /* Generic.Strong */
461
+ .highlight .gu {
462
+ color: #aaaaaa;
463
+ } /* Generic.Subheading */
464
+ .highlight .gt {
465
+ color: #aa0000;
466
+ } /* Generic.Traceback */
467
+ .highlight .kc {
468
+ color: #d73a49;
469
+ font-weight: bold;
470
+ } /* Keyword.Constant */
471
+ .highlight .kd {
472
+ color: #d73a49;
473
+ font-weight: bold;
474
+ } /* Keyword.Declaration */
475
+ .highlight .kn {
476
+ color: #d73a49;
477
+ font-weight: bold;
478
+ } /* Keyword.Namespace */
479
+ .highlight .kp {
480
+ color: #d73a49;
481
+ font-weight: bold;
482
+ } /* Keyword.Pseudo */
483
+ .highlight .kr {
484
+ color: #d73a49;
485
+ font-weight: bold;
486
+ } /* Keyword.Reserved */
487
+ .highlight .kt {
488
+ color: #d73a49;
489
+ font-weight: bold;
490
+ } /* Keyword.Type */
491
+ .highlight .ld {
492
+ color: #032f62;
493
+ } /* Literal.Date */
494
+ .highlight .m {
495
+ color: #005cc5;
496
+ } /* Literal.Number */
497
+ .highlight .s {
498
+ color: #032f62;
499
+ } /* Literal.String */
500
+ .highlight .na {
501
+ color: #6f42c1;
502
+ } /* Name.Attribute */
503
+ .highlight .nb {
504
+ color: #005cc5;
505
+ } /* Name.Builtin */
506
+ .highlight .nc {
507
+ color: #6f42c1;
508
+ font-weight: bold;
509
+ } /* Name.Class */
510
+ .highlight .no {
511
+ color: #005cc5;
512
+ } /* Name.Constant */
513
+ .highlight .nd {
514
+ color: #6f42c1;
515
+ font-weight: bold;
516
+ } /* Name.Decorator */
517
+ .highlight .ni {
518
+ color: #800080;
519
+ } /* Name.Entity */
520
+ .highlight .ne {
521
+ color: #990000;
522
+ font-weight: bold;
523
+ } /* Name.Exception */
524
+ .highlight .nf {
525
+ color: #6f42c1;
526
+ } /* Name.Function */
527
+ .highlight .nl {
528
+ color: #990000;
529
+ } /* Name.Label */
530
+ .highlight .nn {
531
+ color: #555555;
532
+ } /* Name.Namespace */
533
+ .highlight .nx {
534
+ color: #6f42c1;
535
+ } /* Name.Other */
536
+ .highlight .py {
537
+ color: #990000;
538
+ } /* Name.Property */
539
+ .highlight .nt {
540
+ color: #22863a;
541
+ } /* Name.Tag */
542
+ .highlight .nv {
543
+ color: #e36209;
544
+ } /* Name.Variable */
545
+ .highlight .ow {
546
+ color: #d73a49;
547
+ font-weight: bold;
548
+ } /* Operator.Word */
549
+ .highlight .w {
550
+ color: #bbbbbb;
551
+ } /* Text.Whitespace */
552
+ .highlight .mf {
553
+ color: #005cc5;
554
+ } /* Literal.Number.Float */
555
+ .highlight .mh {
556
+ color: #005cc5;
557
+ } /* Literal.Number.Hex */
558
+ .highlight .mi {
559
+ color: #005cc5;
560
+ } /* Literal.Number.Integer */
561
+ .highlight .mo {
562
+ color: #005cc5;
563
+ } /* Literal.Number.Oct */
564
+ .highlight .sb {
565
+ color: #032f62;
566
+ } /* Literal.String.Backtick */
567
+ .highlight .sc {
568
+ color: #032f62;
569
+ } /* Literal.String.Char */
570
+ .highlight .sd {
571
+ color: #032f62;
572
+ } /* Literal.String.Doc */
573
+ .highlight .s2 {
574
+ color: #032f62;
575
+ } /* Literal.String.Double */
576
+ .highlight .se {
577
+ color: #032f62;
578
+ } /* Literal.String.Escape */
579
+ .highlight .sh {
580
+ color: #032f62;
581
+ } /* Literal.String.Heredoc */
582
+ .highlight .si {
583
+ color: #032f62;
584
+ } /* Literal.String.Interpol */
585
+ .highlight .sx {
586
+ color: #032f62;
587
+ } /* Literal.String.Other */
588
+ .highlight .sr {
589
+ color: #22863a;
590
+ } /* Literal.String.Regex */
591
+ .highlight .s1 {
592
+ color: #032f62;
593
+ } /* Literal.String.Single */
594
+ .highlight .ss {
595
+ color: #032f62;
596
+ } /* Literal.String.Symbol */
597
+ .highlight .bp {
598
+ color: #005cc5;
599
+ } /* Name.Builtin.Pseudo */
600
+ .highlight .vc {
601
+ color: #e36209;
602
+ } /* Name.Variable.Class */
603
+ .highlight .vg {
604
+ color: #e36209;
605
+ } /* Name.Variable.Global */
606
+ .highlight .vi {
607
+ color: #e36209;
608
+ } /* Name.Variable.Instance */
609
+ .highlight .il {
610
+ color: #005cc5;
611
+ } /* Literal.Number.Integer.Long */
612
+
613
+ /* Additional Rouge token classes that may be used */
614
+ .highlight .token {
615
+ color: #5670a0;
616
+ }
617
+ .highlight .token.list {
618
+ color: #546e9f;
619
+ }
620
+ .highlight .token.punctuation {
621
+ color: #3e8dad;
622
+ }
623
+ .highlight .token.list.punctuation {
624
+ color: #e05b78;
625
+ }
626
+ .highlight .token.content {
627
+ padding: 0;
628
+ }
629
+
630
+ /* Nested lists in page content */
631
+ ul ul,
632
+ ol ol,
633
+ ul ol,
634
+ ol ul {
635
+ padding-left: 1.5em;
636
+ margin-top: 0.25em;
637
+ }
638
+
639
+ /* Page footer */
640
+ .page-footer {
641
+ background: #f5f5f5;
642
+ border-top: 1px solid #ddd;
643
+ padding: 1.5rem;
644
+ margin-top: 3rem;
645
+ color: #666;
646
+ font-size: 0.9em;
647
+ }
648
+
649
+ .page-footer p {
650
+ margin: 0.5em 0;
651
+ }
652
+
653
+ .page-footer a {
654
+ color: #0066cc;
655
+ text-decoration: none;
656
+ }
657
+
658
+ .page-footer a:hover {
659
+ text-decoration: underline;
660
+ }
661
+
662
+ /* Mobile responsive */
663
+ @media (max-width: 768px) {
664
+ .hamburger-menu {
665
+ display: flex;
666
+ }
667
+
668
+ .main-toc,
669
+ .sidebar {
670
+ transform: translateX(-100%);
671
+ z-index: 175;
672
+ }
673
+
674
+ .main-toc.mobile-open,
675
+ .sidebar.mobile-open {
676
+ transform: translateX(0);
677
+ }
678
+
679
+ body {
680
+ margin-left: 0;
681
+ }
682
+
683
+ .floating-toc {
684
+ left: 0;
685
+ }
686
+ }
687
+
688
+ </style></head>
689
+
690
+ <body>
691
+ <div class="floating-toc" id="floating-toc">
692
+ <div class="floating-toc-container">
693
+ <div class="floating-toc-header">
694
+ <span>Table of Contents 🔻</span>
695
+ </div>
696
+ <div class="floating-toc-content" id="floating-toc-content">
697
+ <!-- Content will be populated by JavaScript -->
698
+ </div>
699
+ </div>
700
+ </div>
701
+
702
+ <button class="hamburger-menu" id="hamburger-menu" aria-label="Toggle navigation"></button>
703
+ <div class="mobile-menu-overlay" id="mobile-menu-overlay"></div>
704
+
705
+ <nav class="main-toc"><ul><li><a href="Home.html">Home</a></li><li><a href="Getting-Started.html">Getting Started</a></li><li><a href="Installation.html">Installation</a></li><li><a href="Usage.html">Usage</a></li><li><a href="Syntax.html">Syntax</a></li><li><a href="Inline-Attribute-Lists.html">Inline Attribute Lists</a></li><li><a href="Modes.html">Modes</a></li><li><a href="Command-Line-Options.html">Command Line Options</a></li><li><a href="Multi-File-Documents.html">Multi-file Documents</a></li><li><a href="Citations.html">Citations</a></li><li><a href="Metadata-Transforms.html">Metadata Transforms</a></li><li><a href="Pandoc-Integration.html">Integrating with Pandoc</a></li><li><a href="Header-IDs.html">Header IDs</a></li><li><a href="C-API.html">C API</a></li><li><a href="Xcode-Integration.html">Xcode Integration</a></li><li><a href="Examples.html">Examples</a></li><li><a href="Plugins.html">Plugins</a></li><li><a href="Troubleshooting.html">Troubleshooting</a></li><li><a href="Credits.html">Credits</a></li></ul></nav>
706
+
707
+ <h1 id="inline-attribute-lists-ials-and-attribute-list-definitions-alds">
708
+ Inline Attribute Lists (IALs) and Attribute List Definitions (ALDs)
709
+ </h1>
710
+ <nav class="page-toc" id="page-toc-top"><ul><li><a href="#inline-attribute-lists-ials-and-attribute-list-definitions-alds">Inline Attribute Lists (IALs) and Attribute List Definitions (ALDs)</a><ul><li><a href="#overview">Overview</a></li><li><a href="#block-level-ials">Block-Level IALs</a><ul><li><a href="#paragraphs">Paragraphs</a></li><li><a href="#headings">Headings</a></li><li><a href="#lists">Lists</a></li><li><a href="#blockquotes">Blockquotes</a></li><li><a href="#tables">Tables</a></li></ul></li><li><a href="#inline-ials">Inline IALs</a><ul><li><a href="#links">Links</a></li><li><a href="#images">Images</a></li><li><a href="#emphasis-and-strong">Emphasis and Strong</a></li><li><a href="#code-spans">Code Spans</a></li></ul></li><li><a href="#attribute-syntax">Attribute Syntax</a><ul><li><a href="#1-ids">1. IDs</a></li><li><a href="#2-classes">2. Classes</a></li><li><a href="#3-key-value-pairs">3. Key-Value Pairs</a></li><li><a href="#combining-attributes">Combining Attributes</a></li></ul></li><li><a href="#attribute-list-definitions-alds">Attribute List Definitions (ALDs)</a><ul><li><a href="#defining-alds">Defining ALDs</a></li><li><a href="#ald-syntax">ALD Syntax</a></li><li><a href="#referencing-alds">Referencing ALDs</a></li><li><a href="#mixed-usage">Mixed Usage</a></li></ul></li><li><a href="#important-notes">Important Notes</a><ul><li><a href="#block-level-ial-positioning">Block-Level IAL Positioning</a></li><li><a href="#inline-ial-positioning">Inline IAL Positioning</a></li><li><a href="#multiple-elements-with-same-attributes">Multiple Elements with Same Attributes</a></li><li><a href="#nested-elements">Nested Elements</a></li></ul></li><li><a href="#examples">Examples</a><ul><li><a href="#complete-example">Complete Example</a></li><li><a href="#using-alds-for-consistent-styling">Using ALDs for Consistent Styling</a></li></ul></li><li><a href="#related">Related</a></li></ul></li></ul></nav>
711
+
712
+ <p>
713
+ Inline Attribute Lists (IALs) allow you to add HTML attributes (IDs, classes, and custom key-value pairs) to Markdown elements. Attribute List Definitions (ALDs) let you define reusable attribute sets that can be referenced multiple times.
714
+ </p>
715
+
716
+ <p>
717
+ This feature is available in <strong>Kramdown</strong> and <strong>unified</strong> modes.
718
+ </p>
719
+
720
+ <h2 id="overview">
721
+ Overview
722
+ </h2>
723
+
724
+ <p>
725
+ IALs use the syntax <code>{: attributes}</code> (Kramdown-style) or <code>{#id .class}</code> (Pandoc-style) and can be applied to:
726
+ </p>
727
+
728
+ <ul>
729
+
730
+ <li>
731
+ <strong> Block-level elements</strong>: Headings, paragraphs, lists, blockquotes, code blocks, tables
732
+ </li>
733
+
734
+ <li>
735
+ <strong> Span-level elements</strong>: Links, images, emphasis (italic), strong (bold), code spans
736
+ </li>
737
+
738
+ </ul>
739
+
740
+ <p>
741
+ Apex supports both formats:
742
+ </p>
743
+
744
+ <ul>
745
+
746
+ <li>
747
+ <strong> Kramdown-style</strong>: <code>{: #id .class key=&quot;value&quot;}</code> - requires a colon after the opening brace
748
+ </li>
749
+
750
+ <li>
751
+ <strong> Pandoc-style</strong>: <code>{#id .class key=&quot;value&quot;}</code> - no colon required
752
+ </li>
753
+
754
+ </ul>
755
+
756
+ <p>
757
+ Both formats work identically. For example, <code>{#my-id .my-class}</code> is equivalent to <code>{:#my-id .my-class}</code>.
758
+ </p>
759
+
760
+ <p>
761
+ ALDs define reusable attribute sets with the syntax <code>{🚗 attributes}</code> and can be referenced in IALs using <code>{:ref-name}</code>.
762
+ </p>
763
+
764
+ <h2 id="block-level-ials">
765
+ Block-Level IALs
766
+ </h2>
767
+
768
+ <p>
769
+ For block-level elements, IALs appear on a separate line immediately after the element (no blank line).
770
+ </p>
771
+
772
+ <h3 id="paragraphs">
773
+ Paragraphs
774
+ </h3>
775
+
776
+ <pre><code class="highlight language-markdown">This is a paragraph with an ID and classes.
777
+
778
+ {: #para-id .important .note}
779
+
780
+ This is a paragraph using Pandoc-style IAL.
781
+
782
+ {#para-id-2 .important .note}
783
+
784
+ Another paragraph with custom attributes.
785
+
786
+ {: title="Important Note" lang="en"}
787
+ </code></pre>
788
+
789
+ <p>
790
+ Output:
791
+ </p>
792
+
793
+ <pre><code class="highlight language-html"><span class="nt">&lt;p</span> <span class="na">id=</span><span class="s">"para-id"</span> <span class="na">class=</span><span class="s">"important note"</span><span class="nt">&gt;</span>This is a paragraph with an ID and classes.<span class="nt">&lt;/p&gt;</span>
794
+ <span class="nt">&lt;p</span> <span class="na">id=</span><span class="s">"para-id-2"</span> <span class="na">class=</span><span class="s">"important note"</span><span class="nt">&gt;</span>This is a paragraph using Pandoc-style IAL.<span class="nt">&lt;/p&gt;</span>
795
+ <span class="nt">&lt;p</span> <span class="na">title=</span><span class="s">"Important Note"</span> <span class="na">lang=</span><span class="s">"en"</span><span class="nt">&gt;</span>Another paragraph with custom attributes.<span class="nt">&lt;/p&gt;</span>
796
+ </code></pre>
797
+
798
+ <h3 id="headings">
799
+ Headings
800
+ </h3>
801
+
802
+ <p>
803
+ Headings can have IALs on the same line or the next line:
804
+ </p>
805
+
806
+ <p>
807
+ <strong> Same line:</strong>
808
+ </p>
809
+
810
+ <pre><code class="highlight language-markdown"><span class="gh"># Heading {: #custom-id}</span>
811
+ <span class="gu">## Another Heading {: .highlight .large}</span>
812
+ <span class="gu">## Pandoc-style Heading {#pandoc-id .highlight}</span>
813
+ </code></pre>
814
+
815
+ <p>
816
+ <strong> Next line:</strong>
817
+ </p>
818
+
819
+ <pre><code class="highlight language-markdown"><span class="gh"># Heading</span>
820
+
821
+ {: #custom-id .highlight}
822
+
823
+ <span class="gh"># Pandoc-style Heading</span>
824
+
825
+ {#pandoc-id-2 .highlight}
826
+
827
+ <span class="gu">## Another Heading</span>
828
+
829
+ {: .section-title lang="en"}
830
+ </code></pre>
831
+
832
+ <p>
833
+ Output:
834
+ </p>
835
+
836
+ <pre><code class="highlight language-html"><span class="nt">&lt;h1</span> <span class="na">id=</span><span class="s">"custom-id"</span><span class="nt">&gt;</span>Heading<span class="nt">&lt;/h1&gt;</span>
837
+ <span class="nt">&lt;h2</span> <span class="na">class=</span><span class="s">"highlight large"</span><span class="nt">&gt;</span>Another Heading<span class="nt">&lt;/h2&gt;</span>
838
+ <span class="nt">&lt;h2</span> <span class="na">id=</span><span class="s">"pandoc-id"</span> <span class="na">class=</span><span class="s">"highlight"</span><span class="nt">&gt;</span>Pandoc-style Heading<span class="nt">&lt;/h2&gt;</span>
839
+ <span class="nt">&lt;h1</span> <span class="na">id=</span><span class="s">"custom-id"</span> <span class="na">class=</span><span class="s">"highlight"</span><span class="nt">&gt;</span>Heading<span class="nt">&lt;/h1&gt;</span>
840
+ <span class="nt">&lt;h1</span> <span class="na">id=</span><span class="s">"pandoc-id-2"</span> <span class="na">class=</span><span class="s">"highlight"</span><span class="nt">&gt;</span>Pandoc-style Heading<span class="nt">&lt;/h1&gt;</span>
841
+ <span class="nt">&lt;h2</span> <span class="na">class=</span><span class="s">"section-title"</span> <span class="na">lang=</span><span class="s">"en"</span><span class="nt">&gt;</span>Another Heading<span class="nt">&lt;/h2&gt;</span>
842
+ </code></pre>
843
+
844
+ <h3 id="lists">
845
+ Lists
846
+ </h3>
847
+
848
+ <pre><code class="highlight language-markdown"><span class="p">-</span> Item 1
849
+ <span class="p">-</span> Item 2
850
+ <span class="p">-</span> Item 3
851
+
852
+ {: .unordered-list .compact}
853
+ <span class="p">
854
+ 1.</span> First
855
+ <span class="p">2.</span> Second
856
+ <span class="p">3.</span> Third
857
+
858
+ {: #ordered-list .numbered}
859
+ </code></pre>
860
+
861
+ <p>
862
+ Output:
863
+ </p>
864
+
865
+ <pre><code class="highlight language-html"><span class="nt">&lt;ul</span> <span class="na">class=</span><span class="s">"unordered-list compact"</span><span class="nt">&gt;</span>
866
+ <span class="nt">&lt;li&gt;</span>Item 1<span class="nt">&lt;/li&gt;</span>
867
+ <span class="nt">&lt;li&gt;</span>Item 2<span class="nt">&lt;/li&gt;</span>
868
+ <span class="nt">&lt;li&gt;</span>Item 3<span class="nt">&lt;/li&gt;</span>
869
+ <span class="nt">&lt;/ul&gt;</span>
870
+ <span class="nt">&lt;ol</span> <span class="na">id=</span><span class="s">"ordered-list"</span> <span class="na">class=</span><span class="s">"numbered"</span><span class="nt">&gt;</span>
871
+ <span class="nt">&lt;li&gt;</span>First<span class="nt">&lt;/li&gt;</span>
872
+ <span class="nt">&lt;li&gt;</span>Second<span class="nt">&lt;/li&gt;</span>
873
+ <span class="nt">&lt;li&gt;</span>Third<span class="nt">&lt;/li&gt;</span>
874
+ <span class="nt">&lt;/ol&gt;</span>
875
+ </code></pre>
876
+
877
+ <h3 id="blockquotes">
878
+ Blockquotes
879
+ </h3>
880
+
881
+ <pre><code class="highlight language-markdown"><span class="gt">&gt; This is a quote.</span>
882
+
883
+ {: .quote .inspirational}
884
+ <span class="gt">
885
+ &gt; Another quote with attribution.</span>
886
+ </code></pre>
887
+
888
+ <p>
889
+ Output:
890
+ </p>
891
+
892
+ <pre><code class="highlight language-html"><span class="nt">&lt;blockquote</span> <span class="na">class=</span><span class="s">"quote inspirational"</span><span class="nt">&gt;</span>
893
+ <span class="nt">&lt;p&gt;</span>This is a quote.<span class="nt">&lt;/p&gt;</span>
894
+ <span class="nt">&lt;/blockquote&gt;</span>
895
+ <span class="nt">&lt;blockquote</span> <span class="na">cite=</span><span class="s">"https://example.com"</span><span class="nt">&gt;</span>
896
+ <span class="nt">&lt;p&gt;</span>Another quote with attribution.<span class="nt">&lt;/p&gt;</span>
897
+ <span class="nt">&lt;/blockquote&gt;</span>
898
+ </code></pre>
899
+
900
+ <h3 id="tables">
901
+ Tables
902
+ </h3>
903
+
904
+ <p>
905
+ Tables can have IALs applied on a separate line after the table:
906
+ </p>
907
+
908
+ <pre><code class="highlight language-markdown">| Key | Value |
909
+ | --- | :---: |
910
+ | one | 1 |
911
+ | --- | --- |
912
+ | two | 2 |
913
+
914
+ {: #data-table .striped .bordered}
915
+ </code></pre>
916
+
917
+ <p>
918
+ Output:
919
+ </p>
920
+
921
+ <pre><code class="highlight language-html"><span class="nt">&lt;table</span> <span class="na">id=</span><span class="s">"data-table"</span> <span class="na">class=</span><span class="s">"striped bordered"</span><span class="nt">&gt;</span>
922
+ <span class="c">&lt;!-- table content --&gt;</span>
923
+ <span class="nt">&lt;/table&gt;</span>
924
+ </code></pre>
925
+
926
+ <p>
927
+ <strong> Pandoc table_attributes extension:</strong>
928
+ </p>
929
+
930
+ <p>
931
+ Apex also supports Pandoc’s <code>table_attributes</code> extension, which allows IAL attributes to be specified in table captions. When using Pandoc-style captions with the <code>: Caption</code> syntax, IAL attributes in the caption are extracted and applied to the table:
932
+ </p>
933
+
934
+ <pre><code class="highlight language-markdown">| Key | Value |
935
+ | --- | :---: |
936
+ | one | 1 |
937
+ | --- | --- |
938
+ | two | 2 |
939
+
940
+ : Key value table {#table-id .testing key="value"}
941
+ </code></pre>
942
+
943
+ <p>
944
+ This is equivalent to:
945
+ </p>
946
+
947
+ <pre><code class="highlight language-markdown">| Key | Value |
948
+ | --- | :---: |
949
+ | one | 1 |
950
+ | --- | --- |
951
+ | two | 2 |
952
+
953
+ {: #table-id .testing key="value"}
954
+ </code></pre>
955
+
956
+ <p>
957
+ Both Kramdown-style IALs (<code>{: #id .class}</code>) and Pandoc-style IALs without the colon (<code>{#id .class}</code>) are supported in table captions.
958
+ </p>
959
+
960
+ <p>
961
+ <strong> Note:</strong> The <code>: Caption</code> syntax only works when adjacent to a table to avoid conflicts with definition list syntax. See <a href="Syntax.html">Syntax</a> for more details on table captions.
962
+ </p>
963
+
964
+ <h2 id="inline-ials">
965
+ Inline IALs
966
+ </h2>
967
+
968
+ <p>
969
+ Inline IALs appear immediately after the element they apply to, within the same paragraph.
970
+ </p>
971
+
972
+ <h3 id="links">
973
+ Links
974
+ </h3>
975
+
976
+ <pre><code class="highlight language-markdown">This is a <span class="p">[</span><span class="nv">regular link</span><span class="p">](</span><span class="sx">https://example.com</span><span class="p">)</span> without attributes.
977
+
978
+ Here's a <span class="p">[</span><span class="nv">styled link</span><span class="p">](</span><span class="sx">https://example.com</span><span class="p">)</span>{:.button} with a button class.
979
+
980
+ Here's a <span class="p">[</span><span class="nv">Pandoc-style link</span><span class="p">](</span><span class="sx">https://example.com</span><span class="p">)</span>{#link-id .button} with attributes.
981
+
982
+ You can have <span class="p">[</span><span class="nv">multiple links</span><span class="p">](</span><span class="sx">https://example.com</span><span class="p">)</span>{:.link-primary} with <span class="p">[</span><span class="nv">different classes</span><span class="p">](</span><span class="sx">https://example.com</span><span class="p">)</span>{:.link-secondary} in the same paragraph.
983
+
984
+ A link with <span class="p">[</span><span class="nv">custom attributes</span><span class="p">](</span><span class="sx">https://example.com</span><span class="p">)</span>{:rel="nofollow" title="External Link"}.
985
+ </code></pre>
986
+
987
+ <p>
988
+ Output:
989
+ </p>
990
+
991
+ <pre><code class="highlight language-html"><span class="nt">&lt;p&gt;</span>This is a <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"https://example.com"</span><span class="nt">&gt;</span>regular link<span class="nt">&lt;/a&gt;</span> without attributes.<span class="nt">&lt;/p&gt;</span>
992
+ <span class="nt">&lt;p&gt;</span>Here's a <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"https://example.com"</span> <span class="na">class=</span><span class="s">"button"</span><span class="nt">&gt;</span>styled link<span class="nt">&lt;/a&gt;</span> with a button class.<span class="nt">&lt;/p&gt;</span>
993
+ <span class="nt">&lt;p&gt;</span>Here's a <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"https://example.com"</span> <span class="na">id=</span><span class="s">"link-id"</span> <span class="na">class=</span><span class="s">"button"</span><span class="nt">&gt;</span>Pandoc-style link<span class="nt">&lt;/a&gt;</span> with attributes.<span class="nt">&lt;/p&gt;</span>
994
+ <span class="nt">&lt;p&gt;</span>You can have <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"https://example.com"</span> <span class="na">class=</span><span class="s">"link-primary"</span><span class="nt">&gt;</span>multiple links<span class="nt">&lt;/a&gt;</span> with <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"https://example.com"</span> <span class="na">class=</span><span class="s">"link-secondary"</span><span class="nt">&gt;</span>different classes<span class="nt">&lt;/a&gt;</span> in the same paragraph.<span class="nt">&lt;/p&gt;</span>
995
+ <span class="nt">&lt;p&gt;</span>A link with <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"https://example.com"</span> <span class="na">rel=</span><span class="s">"nofollow"</span> <span class="na">title=</span><span class="s">"External Link"</span><span class="nt">&gt;</span>custom attributes<span class="nt">&lt;/a&gt;</span>.<span class="nt">&lt;/p&gt;</span>
996
+ </code></pre>
997
+
998
+ <h3 id="images">
999
+ Images
1000
+ </h3>
1001
+
1002
+ <pre><code class="highlight language-markdown"><span class="p">![</span><span class="nv">Regular image</span><span class="p">](</span><span class="sx">image.png</span><span class="p">)</span>
1003
+
1004
+ <span class="p">![</span><span class="nv">Styled image</span><span class="p">](</span><span class="sx">logo.png</span><span class="p">)</span>
1005
+
1006
+ <span class="p">![</span><span class="nv">Image with ID</span><span class="p">](</span><span class="sx">icon.png</span><span class="p">)</span>
1007
+
1008
+ <span class="p">![</span><span class="nv">Image with title</span><span class="p">](</span><span class="sx">photo.jpg</span><span class="p">)</span>
1009
+ </code></pre>
1010
+
1011
+ <p>
1012
+ Output:
1013
+ </p>
1014
+
1015
+ <pre><code class="highlight language-html"><span class="nt">&lt;p&gt;&lt;img</span> <span class="na">src=</span><span class="s">"image.png"</span> <span class="na">alt=</span><span class="s">"Regular image"</span> <span class="nt">/&gt;&lt;/p&gt;</span>
1016
+ <span class="nt">&lt;p&gt;&lt;img</span> <span class="na">src=</span><span class="s">"logo.png"</span> <span class="na">alt=</span><span class="s">"Styled image"</span> <span class="na">class=</span><span class="s">"logo centered"</span> <span class="nt">/&gt;&lt;/p&gt;</span>
1017
+ <span class="nt">&lt;p&gt;&lt;img</span> <span class="na">src=</span><span class="s">"icon.png"</span> <span class="na">alt=</span><span class="s">"Image with ID"</span> <span class="na">id=</span><span class="s">"site-icon"</span> <span class="na">class=</span><span class="s">"icon"</span> <span class="nt">/&gt;&lt;/p&gt;</span>
1018
+ <span class="nt">&lt;p&gt;&lt;img</span> <span class="na">src=</span><span class="s">"photo.jpg"</span> <span class="na">alt=</span><span class="s">"Image with title"</span> <span class="na">title=</span><span class="s">"Photo Title"</span> <span class="na">alt=</span><span class="s">"Photo description"</span> <span class="nt">/&gt;&lt;/p&gt;</span>
1019
+ </code></pre>
1020
+
1021
+ <h3 id="emphasis-and-strong">
1022
+ Emphasis and Strong
1023
+ </h3>
1024
+
1025
+ <pre><code class="highlight language-markdown">This paragraph has <span class="gs">**bold text**</span>{:.bold-style} with a custom class and <span class="ge">*italic text*</span>{:.italic-style} with another class.
1026
+
1027
+ You can combine <span class="gs">**bold**</span>{:.bold} and <span class="ge">*italic*</span>{:.italic} in the same paragraph with different styles.
1028
+
1029
+ Nested <span class="ge">**</span>bold with <span class="ge">*italic*</span>{:.nested-italic} inside<span class="ge">**</span>{:.bold-wrapper} works too.
1030
+ </code></pre>
1031
+
1032
+ <p>
1033
+ Output:
1034
+ </p>
1035
+
1036
+ <pre><code class="highlight language-html"><span class="nt">&lt;p&gt;</span>This paragraph has <span class="nt">&lt;strong</span> <span class="na">class=</span><span class="s">"bold-style"</span><span class="nt">&gt;</span>bold text<span class="nt">&lt;/strong&gt;</span> with a custom class and <span class="nt">&lt;em</span> <span class="na">class=</span><span class="s">"italic-style"</span><span class="nt">&gt;</span>italic text<span class="nt">&lt;/em&gt;</span> with another class.<span class="nt">&lt;/p&gt;</span>
1037
+ <span class="nt">&lt;p&gt;</span>You can combine <span class="nt">&lt;strong</span> <span class="na">class=</span><span class="s">"bold"</span><span class="nt">&gt;</span>bold<span class="nt">&lt;/strong&gt;</span> and <span class="nt">&lt;em</span> <span class="na">class=</span><span class="s">"italic"</span><span class="nt">&gt;</span>italic<span class="nt">&lt;/em&gt;</span> in the same paragraph with different styles.<span class="nt">&lt;/p&gt;</span>
1038
+ <span class="nt">&lt;p&gt;</span>Nested <span class="nt">&lt;strong</span> <span class="na">class=</span><span class="s">"bold-wrapper"</span><span class="nt">&gt;</span>bold with <span class="nt">&lt;em</span> <span class="na">class=</span><span class="s">"nested-italic"</span><span class="nt">&gt;</span>italic<span class="nt">&lt;/em&gt;</span> inside<span class="nt">&lt;/strong&gt;</span> works too.<span class="nt">&lt;/p&gt;</span>
1039
+ </code></pre>
1040
+
1041
+ <h3 id="code-spans">
1042
+ Code Spans
1043
+ </h3>
1044
+
1045
+ <pre><code class="highlight language-markdown">Use <span class="sb">`inline code`</span>{:.code-inline} for code snippets with styling.
1046
+
1047
+ You can have multiple <span class="sb">`code spans`</span>{:.code-1} and <span class="sb">`more code`</span>{:.code-2} with different classes.
1048
+ </code></pre>
1049
+
1050
+ <p>
1051
+ Output:
1052
+ </p>
1053
+
1054
+ <pre><code class="highlight language-html"><span class="nt">&lt;p&gt;</span>Use <span class="nt">&lt;code</span> <span class="na">class=</span><span class="s">"code-inline"</span><span class="nt">&gt;</span>inline code<span class="nt">&lt;/code&gt;</span> for code snippets with styling.<span class="nt">&lt;/p&gt;</span>
1055
+ <span class="nt">&lt;p&gt;</span>You can have multiple <span class="nt">&lt;code</span> <span class="na">class=</span><span class="s">"code-1"</span><span class="nt">&gt;</span>code spans<span class="nt">&lt;/code&gt;</span> and <span class="nt">&lt;code</span> <span class="na">class=</span><span class="s">"code-2"</span><span class="nt">&gt;</span>more code<span class="nt">&lt;/code&gt;</span> with different classes.<span class="nt">&lt;/p&gt;</span>
1056
+ </code></pre>
1057
+
1058
+ <h2 id="attribute-syntax">
1059
+ Attribute Syntax
1060
+ </h2>
1061
+
1062
+ <p>
1063
+ IALs support three types of attributes:
1064
+ </p>
1065
+
1066
+ <h3 id="1-ids">
1067
+ 1. IDs
1068
+ </h3>
1069
+
1070
+ <p>
1071
+ Use <code>#</code> followed by the ID name:
1072
+ </p>
1073
+
1074
+ <pre><code class="highlight language-markdown"><span class="gh"># Heading {: #section-1}</span>
1075
+ </code></pre>
1076
+
1077
+ <p>
1078
+ Output: <code>&lt;h1 id=&quot;section-1&quot;&gt;Heading&lt;/h1&gt;</code>
1079
+ </p>
1080
+
1081
+ <h3 id="2-classes">
1082
+ 2. Classes
1083
+ </h3>
1084
+
1085
+ <p>
1086
+ Use <code>.</code> followed by the class name. Multiple classes can be specified:
1087
+ </p>
1088
+
1089
+ <pre><code class="highlight language-markdown">Paragraph.
1090
+
1091
+ {: .important .note .highlight}
1092
+ </code></pre>
1093
+
1094
+ <p>
1095
+ Output: <code>&lt;p class=&quot;important note highlight&quot;&gt;Paragraph.&lt;/p&gt;</code>
1096
+ </p>
1097
+
1098
+ <p>
1099
+ <strong> Note:</strong> Multiple <code>.class</code> specifiers are equivalent to a single <code>class</code> attribute with space-separated values.
1100
+ </p>
1101
+
1102
+ <h3 id="3-key-value-pairs">
1103
+ 3. Key-Value Pairs
1104
+ </h3>
1105
+
1106
+ <p>
1107
+ Use <code>key=&quot;value&quot;</code> or <code>key='value'</code> for custom attributes. Values can be quoted (single or double quotes) or unquoted:
1108
+ </p>
1109
+
1110
+ <pre><code class="highlight language-markdown">Paragraph.
1111
+
1112
+ {: title="Important Note" lang="en" data-id="123"}
1113
+
1114
+ Link with attributes.
1115
+ <span class="p">[</span><span class="nv">Click here</span><span class="p">](</span><span class="sx">url</span><span class="p">)</span>{:rel="nofollow" target="_blank"}
1116
+ </code></pre>
1117
+
1118
+ <p>
1119
+ Output:
1120
+ </p>
1121
+
1122
+ <pre><code class="highlight language-html"><span class="nt">&lt;p</span> <span class="na">title=</span><span class="s">"Important Note"</span> <span class="na">lang=</span><span class="s">"en"</span> <span class="na">data-id=</span><span class="s">"123"</span><span class="nt">&gt;</span>Paragraph.<span class="nt">&lt;/p&gt;</span>
1123
+ <span class="nt">&lt;p&gt;</span>Link with attributes.
1124
+ <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"url"</span> <span class="na">rel=</span><span class="s">"nofollow"</span> <span class="na">target=</span><span class="s">"_blank"</span><span class="nt">&gt;</span>Click here<span class="nt">&lt;/a&gt;&lt;/p&gt;</span>
1125
+ </code></pre>
1126
+
1127
+ <p>
1128
+ <strong> Quoted values:</strong> Use quotes when values contain spaces or special characters:
1129
+ </p>
1130
+
1131
+ <pre><code class="highlight language-markdown">
1132
+ {: title="This is a title with spaces" lang="en-US"}
1133
+ </code></pre>
1134
+
1135
+ <p>
1136
+ <strong> Unquoted values:</strong> Simple values without spaces can be unquoted:
1137
+ </p>
1138
+
1139
+ <pre><code class="highlight language-markdown">
1140
+ {: lang=en data-visible=true}
1141
+ </code></pre>
1142
+
1143
+ <p>
1144
+ <strong> Escaping quotes:</strong> Inside quoted values, escape quotes with backslash:
1145
+ </p>
1146
+
1147
+ <pre><code class="highlight language-markdown">
1148
+ {: title="He said <span class="se">\"</span>Hello<span class="se">\"</span>"}
1149
+ </code></pre>
1150
+
1151
+ <h3 id="combining-attributes">
1152
+ Combining Attributes
1153
+ </h3>
1154
+
1155
+ <p>
1156
+ All three types can be combined in a single IAL:
1157
+ </p>
1158
+
1159
+ <pre><code class="highlight language-markdown"><span class="gh"># Heading</span>
1160
+
1161
+ {: #section-1 .important .highlight title="Section Title" lang="en"}
1162
+ </code></pre>
1163
+
1164
+ <p>
1165
+ Output: <code>&lt;h1 id=&quot;section-1&quot; class=&quot;important highlight&quot; title=&quot;Section Title&quot; lang=&quot;en&quot;&gt;Heading&lt;/h1&gt;</code>
1166
+ </p>
1167
+
1168
+ <h2 id="attribute-list-definitions-alds">
1169
+ Attribute List Definitions (ALDs)
1170
+ </h2>
1171
+
1172
+ <p>
1173
+ ALDs let you define reusable attribute sets that can be referenced multiple times. This is useful for maintaining consistent styling across a document.
1174
+ </p>
1175
+
1176
+ <h3 id="defining-alds">
1177
+ Defining ALDs
1178
+ </h3>
1179
+
1180
+ <p>
1181
+ ALDs use the syntax <code>{🚗 attributes}</code> and can appear anywhere in your document (though typically at the end for organization):
1182
+ </p>
1183
+
1184
+ <pre><code class="highlight language-markdown"><span class="gh"># Header 1</span>
1185
+
1186
+ {:header-style}
1187
+
1188
+ <span class="gh"># Header 2</span>
1189
+
1190
+ {:header-style}
1191
+
1192
+ <span class="gh"># Header 3</span>
1193
+
1194
+ {:header-style}
1195
+
1196
+ </code></pre>
1197
+
1198
+ <p>
1199
+ Output:
1200
+ </p>
1201
+
1202
+ <pre><code class="highlight language-html"><span class="nt">&lt;h1</span> <span class="na">id=</span><span class="s">"section-title"</span> <span class="na">class=</span><span class="s">"large bold"</span> <span class="na">lang=</span><span class="s">"en"</span><span class="nt">&gt;</span>Header 1<span class="nt">&lt;/h1&gt;</span>
1203
+ <span class="nt">&lt;h1</span> <span class="na">id=</span><span class="s">"section-title"</span> <span class="na">class=</span><span class="s">"large bold"</span> <span class="na">lang=</span><span class="s">"en"</span><span class="nt">&gt;</span>Header 2<span class="nt">&lt;/h1&gt;</span>
1204
+ <span class="nt">&lt;h1</span> <span class="na">id=</span><span class="s">"section-title"</span> <span class="na">class=</span><span class="s">"large bold"</span> <span class="na">lang=</span><span class="s">"en"</span><span class="nt">&gt;</span>Header 3<span class="nt">&lt;/h1&gt;</span>
1205
+ </code></pre>
1206
+
1207
+ <h3 id="ald-syntax">
1208
+ ALD Syntax
1209
+ </h3>
1210
+
1211
+ <p>
1212
+ ALD definitions follow the same attribute syntax as IALs:
1213
+ </p>
1214
+
1215
+ <pre lang="markdown"><code></code></pre>
1216
+
1217
+ <h3 id="referencing-alds">
1218
+ Referencing ALDs
1219
+ </h3>
1220
+
1221
+ <p>
1222
+ Reference an ALD in an IAL using just the reference name:
1223
+ </p>
1224
+
1225
+ <pre><code class="highlight language-markdown"><span class="gh"># Heading</span>
1226
+
1227
+ {:my-style}
1228
+
1229
+ Paragraph.
1230
+
1231
+ {:my-style}
1232
+ </code></pre>
1233
+
1234
+ <p>
1235
+ If the ALD <code>{💪 ...}</code> is defined, both elements will receive those attributes.
1236
+ </p>
1237
+
1238
+ <h3 id="mixed-usage">
1239
+ Mixed Usage
1240
+ </h3>
1241
+
1242
+ <p>
1243
+ You can mix ALD references with additional attributes in the same IAL. The additional attributes override or extend the ALD:
1244
+ </p>
1245
+
1246
+ <pre><code class="highlight language-markdown">
1247
+ <span class="gh"># Heading 1</span>
1248
+
1249
+ {:base-style}
1250
+
1251
+ <span class="gh"># Heading 2</span>
1252
+
1253
+ {:base-style .class3}
1254
+
1255
+ <span class="gh"># Heading 3</span>
1256
+
1257
+ {:base-style #override-id}
1258
+
1259
+ <span class="gh"># Heading 4</span>
1260
+
1261
+ {:base-style .class3 rel="nofollow"}
1262
+ </code></pre>
1263
+
1264
+ <p>
1265
+ Output:
1266
+ </p>
1267
+
1268
+ <pre><code class="highlight language-html"><span class="nt">&lt;h1</span> <span class="na">id=</span><span class="s">"main"</span> <span class="na">class=</span><span class="s">"class1 class2"</span><span class="nt">&gt;</span>Heading 1<span class="nt">&lt;/h1&gt;</span>
1269
+ <span class="nt">&lt;h1</span> <span class="na">id=</span><span class="s">"main"</span> <span class="na">class=</span><span class="s">"class1 class2 class3"</span><span class="nt">&gt;</span>Heading 2<span class="nt">&lt;/h1&gt;</span>
1270
+ <span class="nt">&lt;h1</span> <span class="na">id=</span><span class="s">"override-id"</span> <span class="na">class=</span><span class="s">"class1 class2"</span><span class="nt">&gt;</span>Heading 3<span class="nt">&lt;/h1&gt;</span>
1271
+ <span class="nt">&lt;h1</span> <span class="na">id=</span><span class="s">"main"</span> <span class="na">class=</span><span class="s">"class1 class2 class3"</span> <span class="na">rel=</span><span class="s">"nofollow"</span><span class="nt">&gt;</span>Heading 4<span class="nt">&lt;/h1&gt;</span>
1272
+ </code></pre>
1273
+
1274
+ <p>
1275
+ <strong> Behavior:</strong>
1276
+ </p>
1277
+
1278
+ <ul>
1279
+
1280
+ <li>
1281
+ <strong> Classes</strong>: Additional classes are appended to the ALD classes
1282
+ </li>
1283
+
1284
+ <li>
1285
+ <strong> IDs</strong>: If an ID is specified in the IAL, it overrides the ALD’s ID
1286
+ </li>
1287
+
1288
+ <li>
1289
+ <strong> Key-value attributes</strong>: If a key exists in both ALD and IAL, the IAL value overrides the ALD value
1290
+ </li>
1291
+
1292
+ </ul>
1293
+
1294
+ <h2 id="important-notes">
1295
+ Important Notes
1296
+ </h2>
1297
+
1298
+ <h3 id="block-level-ial-positioning">
1299
+ Block-Level IAL Positioning
1300
+ </h3>
1301
+
1302
+ <p>
1303
+ For block-level elements, the IAL <strong>must</strong> appear immediately after the element with <strong>no blank line</strong> between them:
1304
+ </p>
1305
+
1306
+ <p>
1307
+ <strong> Correct:</strong>
1308
+ </p>
1309
+
1310
+ <pre><code class="highlight language-markdown">Paragraph text.
1311
+
1312
+ {: .class}
1313
+ </code></pre>
1314
+
1315
+ <p>
1316
+ <strong> Incorrect:</strong>
1317
+ </p>
1318
+
1319
+ <pre><code class="highlight language-markdown">Paragraph text.
1320
+
1321
+ {: .class}
1322
+ </code></pre>
1323
+
1324
+ <p>
1325
+ The blank line will cause the IAL to be treated as a separate paragraph.
1326
+ </p>
1327
+
1328
+ <h3 id="inline-ial-positioning">
1329
+ Inline IAL Positioning
1330
+ </h3>
1331
+
1332
+ <p>
1333
+ For inline elements, the IAL must appear immediately after the element, with optional whitespace:
1334
+ </p>
1335
+
1336
+ <pre><code class="highlight language-markdown"><span class="p">[</span><span class="nv">link</span><span class="p">](</span><span class="sx">url</span><span class="p">)</span>{:.class} text after
1337
+ <span class="gs">**bold**</span>{:.bold-style} more text
1338
+ </code></pre>
1339
+
1340
+ <h3 id="multiple-elements-with-same-attributes">
1341
+ Multiple Elements with Same Attributes
1342
+ </h3>
1343
+
1344
+ <p>
1345
+ When multiple links share the same URL, IALs are correctly matched using element indexing:
1346
+ </p>
1347
+
1348
+ <pre><code class="highlight language-markdown">Here's a <span class="p">[</span><span class="nv">regular link</span><span class="p">](</span><span class="sx">https://example.com</span><span class="p">)</span> and <span class="p">[</span><span class="nv">another link</span><span class="p">](</span><span class="sx">https://example.com</span><span class="p">)</span>{:.button}.
1349
+ </code></pre>
1350
+
1351
+ <p>
1352
+ Both links point to the same URL, but only the second one receives the <code>button</code> class.
1353
+ </p>
1354
+
1355
+ <h3 id="nested-elements">
1356
+ Nested Elements
1357
+ </h3>
1358
+
1359
+ <p>
1360
+ IALs work with nested inline elements:
1361
+ </p>
1362
+
1363
+ <pre><code class="highlight language-markdown"><span class="ge">**</span>Bold text with <span class="ge">*italic*</span>{:.nested} inside<span class="ge">**</span>{:.wrapper}
1364
+ </code></pre>
1365
+
1366
+ <p>
1367
+ The italic element gets the <code>nested</code> class, and the bold element gets the <code>wrapper</code> class.
1368
+ </p>
1369
+
1370
+ <h2 id="examples">
1371
+ Examples
1372
+ </h2>
1373
+
1374
+ <h3 id="complete-example">
1375
+ Complete Example
1376
+ </h3>
1377
+
1378
+ <pre><code class="highlight language-markdown"><span class="gh"># Main Title</span>
1379
+
1380
+ {: #main-title .page-title}
1381
+
1382
+ <span class="gu">## Section 1</span>
1383
+
1384
+ {:section-heading}
1385
+
1386
+ This paragraph has <span class="p">[</span><span class="nv">a link</span><span class="p">](</span><span class="sx">https://example.com</span><span class="p">)</span>{:.external-link} with styling.
1387
+
1388
+ Another paragraph with <span class="gs">**bold text**</span>{:.highlight}.
1389
+
1390
+ <span class="gu">## Section 2</span>
1391
+
1392
+ {:section-heading}
1393
+
1394
+ More content here.
1395
+
1396
+ </code></pre>
1397
+
1398
+ <p>
1399
+ Output:
1400
+ </p>
1401
+
1402
+ <pre><code class="highlight language-html"><span class="nt">&lt;h1</span> <span class="na">id=</span><span class="s">"main-title"</span> <span class="na">class=</span><span class="s">"page-title"</span><span class="nt">&gt;</span>Main Title<span class="nt">&lt;/h1&gt;</span>
1403
+ <span class="nt">&lt;h2</span> <span class="na">class=</span><span class="s">"section important"</span> <span class="na">lang=</span><span class="s">"en"</span><span class="nt">&gt;</span>Section 1<span class="nt">&lt;/h2&gt;</span>
1404
+ <span class="nt">&lt;p&gt;</span>This paragraph has <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"https://example.com"</span> <span class="na">class=</span><span class="s">"external-link"</span><span class="nt">&gt;</span>a link<span class="nt">&lt;/a&gt;</span> with styling.<span class="nt">&lt;/p&gt;</span>
1405
+ <span class="nt">&lt;p&gt;</span>Another paragraph with <span class="nt">&lt;strong</span> <span class="na">class=</span><span class="s">"highlight"</span><span class="nt">&gt;</span>bold text<span class="nt">&lt;/strong&gt;</span>.<span class="nt">&lt;/p&gt;</span>
1406
+ <span class="nt">&lt;h2</span> <span class="na">class=</span><span class="s">"section important"</span> <span class="na">lang=</span><span class="s">"en"</span><span class="nt">&gt;</span>Section 2<span class="nt">&lt;/h2&gt;</span>
1407
+ <span class="nt">&lt;p&gt;</span>More content here.<span class="nt">&lt;/p&gt;</span>
1408
+ </code></pre>
1409
+
1410
+ <h3 id="using-alds-for-consistent-styling">
1411
+ Using ALDs for Consistent Styling
1412
+ </h3>
1413
+
1414
+ <pre><code class="highlight language-markdown"><span class="gh"># Introduction</span>
1415
+
1416
+ {:intro}
1417
+
1418
+ <span class="gu">## Overview</span>
1419
+
1420
+ {:intro}
1421
+
1422
+ <span class="gu">## Details</span>
1423
+
1424
+ {:intro}
1425
+
1426
+ <span class="gh"># Conclusion</span>
1427
+
1428
+ {:conclusion}
1429
+
1430
+ <span class="gu">## Summary</span>
1431
+
1432
+ {:conclusion}
1433
+
1434
+ </code></pre>
1435
+
1436
+ <p>
1437
+ This allows you to maintain consistent styling across multiple elements by defining the attributes once and referencing them multiple times.
1438
+ </p>
1439
+
1440
+ <h2 id="related">
1441
+ Related
1442
+ </h2>
1443
+
1444
+ <ul>
1445
+
1446
+ <li>
1447
+ <a href="Syntax.html"> Syntax</a> - Complete syntax reference
1448
+ </li>
1449
+
1450
+ <li>
1451
+ <a href="Modes.html"> Modes</a> - Understanding processor modes (IALs available in Kramdown and unified modes)
1452
+ </li>
1453
+
1454
+ </ul>
1455
+
1456
+ <script>
1457
+ // Hamburger menu functionality
1458
+ (function() {
1459
+ function initHamburgerMenu() {
1460
+ var hamburger = document.getElementById('hamburger-menu');
1461
+ var sidebar = document.querySelector('.main-toc, .sidebar');
1462
+ var overlay = document.getElementById('mobile-menu-overlay');
1463
+
1464
+ if (!hamburger || !sidebar) return;
1465
+
1466
+ function toggleMenu() {
1467
+ var isOpen = sidebar.classList.contains('mobile-open');
1468
+ if (isOpen) {
1469
+ sidebar.classList.remove('mobile-open');
1470
+ hamburger.classList.remove('active');
1471
+ if (overlay) overlay.classList.remove('active');
1472
+ } else {
1473
+ sidebar.classList.add('mobile-open');
1474
+ hamburger.classList.add('active');
1475
+ if (overlay) overlay.classList.add('active');
1476
+ }
1477
+ }
1478
+
1479
+ hamburger.addEventListener('click', function(e) {
1480
+ e.stopPropagation();
1481
+ toggleMenu();
1482
+ });
1483
+
1484
+ if (overlay) {
1485
+ overlay.addEventListener('click', function() {
1486
+ toggleMenu();
1487
+ });
1488
+ }
1489
+
1490
+ // Close menu when clicking on a sidebar link (mobile only)
1491
+ if (window.innerWidth <= 768) {
1492
+ var sidebarLinks = sidebar.querySelectorAll('a');
1493
+ sidebarLinks.forEach(function(link) {
1494
+ link.addEventListener('click', function() {
1495
+ setTimeout(function() {
1496
+ sidebar.classList.remove('mobile-open');
1497
+ hamburger.classList.remove('active');
1498
+ if (overlay) overlay.classList.remove('active');
1499
+ }, 100);
1500
+ });
1501
+ });
1502
+ }
1503
+
1504
+ // Close menu on window resize if going to desktop
1505
+ window.addEventListener('resize', function() {
1506
+ if (window.innerWidth > 768) {
1507
+ sidebar.classList.remove('mobile-open');
1508
+ hamburger.classList.remove('active');
1509
+ if (overlay) overlay.classList.remove('active');
1510
+ }
1511
+ });
1512
+ }
1513
+
1514
+ // Initialize when DOM is ready
1515
+ if (document.readyState === 'loading') {
1516
+ document.addEventListener('DOMContentLoaded', initHamburgerMenu);
1517
+ } else {
1518
+ initHamburgerMenu();
1519
+ }
1520
+ })();
1521
+
1522
+ </script>
1523
+ <script>
1524
+ (function() {
1525
+ // Clone the page TOC for floating TOC
1526
+ function initFloatingTOC() {
1527
+ var pageTOC = document.getElementById('page-toc-top');
1528
+ var floatingTOCContent = document.getElementById('floating-toc-content');
1529
+ var floatingTOC = document.getElementById('floating-toc');
1530
+
1531
+ if (!pageTOC || !floatingTOCContent || !floatingTOC) return;
1532
+
1533
+ // Clone the TOC structure
1534
+ var tocClone = pageTOC.cloneNode(true);
1535
+ tocClone.id = 'floating-toc-clone';
1536
+ floatingTOCContent.appendChild(tocClone);
1537
+
1538
+ // Update all links to use smooth scrolling
1539
+ var allTOCLinks = document.querySelectorAll('.page-toc a, .floating-toc-content a');
1540
+ allTOCLinks.forEach(function(link) {
1541
+ link.addEventListener('click', function(e) {
1542
+ var href = this.getAttribute('href');
1543
+ if (href && href.startsWith('#')) {
1544
+ e.preventDefault();
1545
+ var targetId = href.substring(1);
1546
+ var targetElement = document.getElementById(targetId);
1547
+ if (targetElement) {
1548
+ var offset = 20; // Offset from top
1549
+
1550
+ // Function to calculate absolute position from document top
1551
+ function getAbsoluteTop(element) {
1552
+ var top = 0;
1553
+ while (element) {
1554
+ top += element.offsetTop;
1555
+ element = element.offsetParent;
1556
+ }
1557
+ return top;
1558
+ }
1559
+
1560
+ var absoluteTop = getAbsoluteTop(targetElement);
1561
+ var scrollTop = window.pageYOffset || document.documentElement.scrollTop;
1562
+ var offsetPosition = absoluteTop - offset;
1563
+
1564
+ // Only scroll if we're not already at the target position
1565
+ if (Math.abs(scrollTop - offsetPosition) > 10) {
1566
+ window.scrollTo({
1567
+ top: Math.max(0, offsetPosition),
1568
+ behavior: 'smooth'
1569
+ });
1570
+ }
1571
+
1572
+ // Update URL hash without triggering scroll
1573
+ if (history.pushState) {
1574
+ history.pushState(null, null, href);
1575
+ }
1576
+ }
1577
+ }
1578
+ });
1579
+ });
1580
+
1581
+ // Handle scroll to show/hide floating TOC
1582
+ var tocTop = pageTOC.getBoundingClientRect().top + window.pageYOffset;
1583
+ var tocBottom = tocTop + pageTOC.offsetHeight;
1584
+
1585
+ function updateFloatingTOC() {
1586
+ var scrollY = window.pageYOffset || document.documentElement.scrollTop;
1587
+
1588
+ if (scrollY > tocBottom) {
1589
+ floatingTOC.classList.add('visible');
1590
+ } else {
1591
+ floatingTOC.classList.remove('visible');
1592
+ }
1593
+ }
1594
+
1595
+ // Throttle scroll events
1596
+ var ticking = false;
1597
+ window.addEventListener('scroll', function() {
1598
+ if (!ticking) {
1599
+ window.requestAnimationFrame(function() {
1600
+ updateFloatingTOC();
1601
+ ticking = false;
1602
+ });
1603
+ ticking = true;
1604
+ }
1605
+ });
1606
+
1607
+ // Initial check
1608
+ updateFloatingTOC();
1609
+ }
1610
+
1611
+ // Initialize when DOM is ready
1612
+ if (document.readyState === 'loading') {
1613
+ document.addEventListener('DOMContentLoaded', initFloatingTOC);
1614
+ } else {
1615
+ initFloatingTOC();
1616
+ }
1617
+ })();
1618
+ </script>
1619
+ <footer class="page-footer"><p>Copyright 2025 Brett Terpstra, All Rights Reserved | MIT License</p></footer></body>
1620
+
1621
+ </html>
1622
+