apex-ruby 1.0.17 → 1.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +17 -3
- data/ext/apex_ext/apex_ext.c +260 -91
- data/ext/apex_ext/apex_src/CHANGELOG.md +440 -0
- data/ext/apex_ext/apex_src/CMakeLists.txt +15 -1
- data/ext/apex_ext/apex_src/Formula/apex.rb +7 -2
- data/ext/apex_ext/apex_src/Package.swift +15 -4
- data/ext/apex_ext/apex_src/README.md +94 -35
- data/ext/apex_ext/apex_src/VERSION +1 -1
- data/ext/apex_ext/apex_src/apex-debug.log +4 -0
- data/ext/apex_ext/apex_src/apex.code-workspace +38 -0
- data/ext/apex_ext/apex_src/apex.taskpaper +12 -0
- data/ext/apex_ext/apex_src/apex_deflist_debug.log +25 -0
- data/ext/apex_ext/apex_src/buildnotes.md +1435 -0
- data/ext/apex_ext/apex_src/cli/main.c +262 -33
- data/ext/apex_ext/apex_src/debug.log +7 -0
- data/ext/apex_ext/apex_src/docs/CITATIONS_EXAMPLES.md +274 -0
- data/ext/apex_ext/apex_src/docs/CITATIONS_IMPLEMENTATION_PLAN.md +749 -0
- data/ext/apex_ext/apex_src/docs/CITATIONS_PLAN.md +744 -0
- data/ext/apex_ext/apex_src/docs/INDEX_IMPLEMENTATION_ANALYSIS.md +382 -0
- data/ext/apex_ext/apex_src/docs/plans/2025-02-27-man-page-output-implementation.md +351 -0
- data/ext/apex_ext/apex_src/docs/superpowers/plans/2026-07-12-toc-output-format.md +745 -0
- data/ext/apex_ext/apex_src/docs/superpowers/plans/2026-07-18-bear-image-attributes.md +829 -0
- data/ext/apex_ext/apex_src/docs/superpowers/plans/2026-07-19-apex-node-npm.md +1148 -0
- data/ext/apex_ext/apex_src/docs/superpowers/specs/2026-07-12-toc-output-format-design.md +161 -0
- data/ext/apex_ext/apex_src/docs/superpowers/specs/2026-07-18-bear-image-attributes-design.md +184 -0
- data/ext/apex_ext/apex_src/docs/superpowers/specs/2026-07-19-apex-node-npm-design.md +211 -0
- data/ext/apex_ext/apex_src/documentation/app-settings-table.md +67 -0
- data/ext/apex_ext/apex_src/documentation/app-transformed/Citations.md +340 -0
- data/ext/apex_ext/apex_src/documentation/app-transformed/Credits.md +11 -0
- data/ext/apex_ext/apex_src/documentation/app-transformed/Header-IDs.md +234 -0
- data/ext/apex_ext/apex_src/documentation/app-transformed/Inline-Attribute-Lists.md +516 -0
- data/ext/apex_ext/apex_src/documentation/app-transformed/Metadata-Transforms.md +461 -0
- data/ext/apex_ext/apex_src/documentation/app-transformed/Modes.md +193 -0
- data/ext/apex_ext/apex_src/documentation/app-transformed/Multi-File-Documents.md +201 -0
- data/ext/apex_ext/apex_src/documentation/app-transformed/Plugins.md +678 -0
- data/ext/apex_ext/apex_src/documentation/app-transformed/Syntax.md +1367 -0
- data/ext/apex_ext/apex_src/documentation/docsets/Apex Command Line Options.cheatsheet.txt +6 -0
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/C-API.html +774 -300
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Callouts.html +1194 -0
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Citations.html +416 -216
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Command-Line-Options.html +3544 -1094
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Configuration.html +371 -97
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Credits.html +153 -23
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Examples.html +358 -124
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Filters.html +1656 -0
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Generating-Man-Pages.html +1226 -0
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Getting-Started.html +201 -56
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Header-IDs.html +279 -109
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Home.html +200 -53
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Indices.html +2327 -0
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Inline-Attribute-Lists.html +690 -271
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Installation.html +201 -55
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Limitations-and-Roadmap.html +238 -68
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Metadata-Transforms.html +421 -221
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Modes.html +340 -78
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Multi-File-Documents.html +251 -86
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Multi-Format-Images.html +1362 -0
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Pandoc-Integration.html +277 -90
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Plugins.html +673 -346
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Quarto-Mode.html +1405 -0
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Rendering-Markdown-In-Terminal.html +1902 -0
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Syntax.html +1939 -1698
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Tables.html +1781 -0
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Troubleshooting.html +315 -140
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Usage.html +307 -113
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Using-Apex-with-Jekyll.html +1132 -0
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Writing-Tests.html +1754 -0
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/Documents/Xcode-Integration.html +872 -376
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/docSet.dsidx +0 -0
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/optimizedIndex.dsidx +0 -0
- data/ext/apex_ext/apex_src/documentation/html/apex-app-docs.html +8746 -0
- data/ext/apex_ext/apex_src/documentation/shared_styles.css +20 -15
- data/ext/apex_ext/apex_src/documentation/transform_for_app.md +55 -0
- data/ext/apex_ext/apex_src/escaping-repro.md +103 -0
- data/ext/apex_ext/apex_src/examples/quick-actions/Markdown to RTF.workflow/Contents/Info.plist +8 -0
- data/ext/apex_ext/apex_src/examples/quick-actions/Markdown to RTF.workflow/Contents/QuickLook/Preview.png +0 -0
- data/ext/apex_ext/apex_src/examples/quick-actions/Markdown to RTF.workflow/Contents/document.wflow +547 -0
- data/ext/apex_ext/apex_src/examples/quick-actions/Markdown-to-RTF.workflow.zip +0 -0
- data/ext/apex_ext/apex_src/examples/quick-actions/README.md +33 -0
- data/ext/apex_ext/apex_src/include/apex/apex.h +92 -6
- data/ext/apex_ext/apex_src/include/apex/ast_rtf.h +23 -0
- data/ext/apex_ext/apex_src/include/apex/ast_terminal.h +6 -0
- data/ext/apex_ext/apex_src/include/apex/module.modulemap +5 -0
- data/ext/apex_ext/apex_src/include/apex/plugins.h +105 -0
- data/ext/apex_ext/apex_src/include/apexc.h +1 -0
- data/ext/apex_ext/apex_src/man/apex.1 +82 -78
- data/ext/apex_ext/apex_src/man/apex.1.md +81 -4
- data/ext/apex_ext/apex_src/objc/Apex.swift +73 -0
- data/ext/apex_ext/apex_src/objc/ApexPlugins.swift +79 -0
- data/ext/apex_ext/apex_src/objc/NSString+Apex.h +83 -5
- data/ext/apex_ext/apex_src/objc/NSString+Apex.m +244 -1
- data/ext/apex_ext/apex_src/objc/NSString+ApexPlugins.h +76 -0
- data/ext/apex_ext/apex_src/objc/NSString+ApexPlugins.m +169 -0
- data/ext/apex_ext/apex_src/output.html +87 -0
- data/ext/apex_ext/apex_src/plans/quarto-mode.md +442 -0
- data/ext/apex_ext/apex_src/src/_README.md +85 -32
- data/ext/apex_ext/apex_src/src/apex.c +770 -200
- data/ext/apex_ext/apex_src/src/ast_rtf.c +848 -0
- data/ext/apex_ext/apex_src/src/ast_terminal.c +184 -7
- data/ext/apex_ext/apex_src/src/extensions/abbreviations.c +10 -3
- data/ext/apex_ext/apex_src/src/extensions/advanced_tables.c +7 -11
- data/ext/apex_ext/apex_src/src/extensions/bear_image_attrs.c +467 -0
- data/ext/apex_ext/apex_src/src/extensions/bear_image_attrs.h +27 -0
- data/ext/apex_ext/apex_src/src/extensions/callouts.c +400 -4
- data/ext/apex_ext/apex_src/src/extensions/callouts.h +15 -5
- data/ext/apex_ext/apex_src/src/extensions/citations.c +26 -5
- data/ext/apex_ext/apex_src/src/extensions/code_fence_attrs.c +632 -0
- data/ext/apex_ext/apex_src/src/extensions/code_fence_attrs.h +22 -0
- data/ext/apex_ext/apex_src/src/extensions/concordance.c +632 -0
- data/ext/apex_ext/apex_src/src/extensions/definition_list.c +129 -15
- data/ext/apex_ext/apex_src/src/extensions/grid_tables.c +1050 -121
- data/ext/apex_ext/apex_src/src/extensions/html_markdown.c +569 -16
- data/ext/apex_ext/apex_src/src/extensions/ial.c +502 -52
- data/ext/apex_ext/apex_src/src/extensions/ial.h +2 -1
- data/ext/apex_ext/apex_src/src/extensions/includes.c +532 -33
- data/ext/apex_ext/apex_src/src/extensions/includes.h +7 -1
- data/ext/apex_ext/apex_src/src/extensions/index.c +1427 -140
- data/ext/apex_ext/apex_src/src/extensions/index.h +28 -0
- data/ext/apex_ext/apex_src/src/extensions/metadata.c +200 -161
- data/ext/apex_ext/apex_src/src/extensions/quarto_diagrams.c +251 -0
- data/ext/apex_ext/apex_src/src/extensions/quarto_diagrams.h +22 -0
- data/ext/apex_ext/apex_src/src/extensions/quarto_lists.c +624 -0
- data/ext/apex_ext/apex_src/src/extensions/quarto_lists.h +35 -0
- data/ext/apex_ext/apex_src/src/extensions/quarto_polish.c +264 -0
- data/ext/apex_ext/apex_src/src/extensions/quarto_polish.h +23 -0
- data/ext/apex_ext/apex_src/src/extensions/quarto_shortcodes.c +307 -0
- data/ext/apex_ext/apex_src/src/extensions/quarto_shortcodes.h +21 -0
- data/ext/apex_ext/apex_src/src/extensions/raw_content.c +351 -0
- data/ext/apex_ext/apex_src/src/extensions/raw_content.h +20 -0
- data/ext/apex_ext/apex_src/src/extensions/relaxed_tables.c +117 -3
- data/ext/apex_ext/apex_src/src/extensions/special_markers.c +53 -0
- data/ext/apex_ext/apex_src/src/extensions/syntax_highlight.c +23 -1
- data/ext/apex_ext/apex_src/src/extensions/table_html_postprocess.c +83 -92
- data/ext/apex_ext/apex_src/src/extensions/toc.c +446 -25
- data/ext/apex_ext/apex_src/src/extensions/toc.h +26 -1
- data/ext/apex_ext/apex_src/src/extensions/wiki_links.c +28 -0
- data/ext/apex_ext/apex_src/src/html_renderer.c +387 -17
- data/ext/apex_ext/apex_src/src/plugin_catalog.c +517 -0
- data/ext/apex_ext/apex_src/src/plugins_remote.c +88 -14
- data/ext/apex_ext/apex_src/src/plugins_remote.h +34 -0
- data/ext/apex_ext/apex_src/src/pretty_html.c +6 -1
- data/ext/apex_ext/apex_src/tests/fixtures/comprehensive_test.md +21 -0
- data/ext/apex_ext/apex_src/tests/fixtures/images/bear_image_attributes.md +10 -0
- data/ext/apex_ext/apex_src/tests/fixtures/includes/sections.md +19 -0
- data/ext/apex_ext/apex_src/tests/fixtures/includes/sections.txt +11 -0
- data/ext/apex_ext/apex_src/tests/fixtures/minimal_pb.md +2 -0
- data/ext/apex_ext/apex_src/tests/fixtures/obsidian-callouts.md +46 -0
- data/ext/apex_ext/apex_src/tests/fixtures/pagebreak_html_repro.md +5 -0
- data/ext/apex_ext/apex_src/tests/fixtures/python-callouts.md +47 -0
- data/ext/apex_ext/apex_src/tests/fixtures/quarto/callouts.md +3 -0
- data/ext/apex_ext/apex_src/tests/fixtures/quarto/code-attrs.md +3 -0
- data/ext/apex_ext/apex_src/tests/fixtures/quarto/diagrams.md +8 -0
- data/ext/apex_ext/apex_src/tests/fixtures/quarto/lists.md +19 -0
- data/ext/apex_ext/apex_src/tests/fixtures/quarto/raw-content.md +5 -0
- data/ext/apex_ext/apex_src/tests/fixtures/quarto/shortcodes.md +7 -0
- data/ext/apex_ext/apex_src/tests/fixtures/quarto/smoke.md +81 -0
- data/ext/apex_ext/apex_src/tests/fixtures/quarto/spans.md +5 -0
- data/ext/apex_ext/apex_src/tests/fixtures/quarto-callouts.md +47 -0
- data/ext/apex_ext/apex_src/tests/fixtures/speed.md +192 -0
- data/ext/apex_ext/apex_src/tests/fixtures/tables/grid-tables.md +37 -0
- data/ext/apex_ext/apex_src/tests/paginate_cli_test.sh +16 -0
- data/ext/apex_ext/apex_src/tests/test_bear_image_attrs.c +301 -0
- data/ext/apex_ext/apex_src/tests/test_concordance.tsv +4 -0
- data/ext/apex_ext/apex_src/tests/test_escaping_repro.c +82 -0
- data/ext/apex_ext/apex_src/tests/test_extensions.c +821 -1
- data/ext/apex_ext/apex_src/tests/test_ial.c +7 -0
- data/ext/apex_ext/apex_src/tests/test_marked_integration.c +25 -0
- data/ext/apex_ext/apex_src/tests/test_metadata.c +129 -0
- data/ext/apex_ext/apex_src/tests/test_output.c +568 -2
- data/ext/apex_ext/apex_src/tests/test_runner.c +11 -0
- data/ext/apex_ext/apex_src/tests/test_tables.c +420 -0
- data/ext/apex_ext/apex_src/vendor/cmark-gfm/CMakeLists.txt +1 -1
- data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/autolink.c +77 -1
- data/ext/apex_ext/apex_src/vendor/cmark-gfm/extensions/table.c +135 -5
- data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/blocks.c +56 -1
- data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/config.h +38 -0
- data/ext/apex_ext/apex_src/vendor/cmark-gfm/src/main.c +1 -1
- data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/__pycache__/cmark.cpython-314.pyc +0 -0
- data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/__pycache__/normalize.cpython-314.pyc +0 -0
- data/ext/apex_ext/apex_src/vendor/cmark-gfm/test/extensions.txt +69 -0
- data/ext/apex_ext/apex_src/xcode_build/CMakeScripts/ReRunCMake.make +74 -0
- data/ext/apex_ext/apex_src/xcode_build/CTestTestfile.cmake +22 -0
- data/ext/apex_ext/apex_src/xcode_build/Debug/Apex.framework/Versions/A/Apex +0 -0
- data/ext/apex_ext/apex_src/xcode_build/Debug/Apex.framework/Versions/A/Resources/Info.plist +44 -0
- data/ext/apex_ext/apex_src/xcode_build/Debug/Apex.framework/Versions/A/_CodeSignature/CodeResources +128 -0
- data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/project.pbxproj +5118 -0
- data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
- data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/project.xcworkspace/xcuserdata/ttscoff.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/project.xcworkspace/xcuserdata/ttscoff.xcuserdatad/WorkspaceSettings.xcsettings +8 -0
- data/ext/apex_ext/apex_src/xcode_build/apex.xcodeproj/xcuserdata/ttscoff.xcuserdatad/xcschemes/xcschememanagement.plist +99 -0
- data/ext/apex_ext/apex_src/xcode_build/cmake_install.cmake +452 -0
- data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/CMakeScripts/ReRunCMake.make +52 -0
- data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/cmake_install.cmake +55 -0
- data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/cmark-gfm.xcodeproj/project.pbxproj +2455 -0
- data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/cmark-gfm.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +8 -0
- data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/extensions/cmake_install.cmake +171 -0
- data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/man/cmake_install.cmake +55 -0
- data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/cmake_install.cmake +220 -0
- data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/cmark-gfm_export.h +43 -0
- data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/cmark-gfm_version.h +7 -0
- data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/config.h +76 -0
- data/ext/apex_ext/apex_src/xcode_build/vendor/cmark-gfm/src/libcmark-gfm.pc +10 -0
- data/ext/apex_ext/extconf.rb +35 -0
- data/lib/apex/version.rb +2 -2
- metadata +117 -2
- data/ext/apex_ext/apex_src/documentation/docsets/Apex.docset/Contents/Resources/tempOptimizedIndex.dsidx +0 -0
|
@@ -2,6 +2,415 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to Apex will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.1.20] - 2026-09-05
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- **Metadata file string ownership** keeps paths, titles, themes, and stylesheet values valid after `apex_options_apply_meta_file` returns
|
|
10
|
+
|
|
11
|
+
## [1.1.19] - 2026-09-05
|
|
12
|
+
|
|
13
|
+
### New
|
|
14
|
+
|
|
15
|
+
- **Metadata file API** lets embedding hosts load and apply CLI-compatible YAML, Pandoc, or MultiMarkdown metadata files to `apex_options`
|
|
16
|
+
|
|
17
|
+
## [1.1.18] - 2026-09-05
|
|
18
|
+
|
|
19
|
+
### New
|
|
20
|
+
|
|
21
|
+
- **Quoted heading overrides** (`{^"term"}` and `[visible]{^"override"}`) so standalone marks and custom index headings work without falling through to superscript
|
|
22
|
+
- **Underscore emphasis in TextIndex headings** renders as `<em>` in the index and sorts as plain text
|
|
23
|
+
- *** and ** wildcards** expand the preceding heading (stripping emphasis; `**` also lowercases)
|
|
24
|
+
- **Prefix wildcards** (`*^` / `*^-`) reuse an earlier matching heading path
|
|
25
|
+
- **See and see-also cross-references** (`|target`, `|+target`, hierarchical `parent>"child"`) with see-type marks omitting locators
|
|
26
|
+
- **Inbound cross-references** (`@` / `@+`) attach see/see-also refs onto the target entry
|
|
27
|
+
- **Aliases** (`#name` after a path, usable in headings and cross-refs) plus **unreferenced aliases** (`##name`) that define without a locator
|
|
28
|
+
- **Hierarchical TextIndex paths** (`"Parent">"Child"`) as nested index entries
|
|
29
|
+
- **`--concordance FILE`** loads TextIndex concordance TSV files and auto-inserts `[match]{^...}` marks before index processing (enables indices; repeatable)
|
|
30
|
+
- **Processing toggles** (`{^-}` / `{^+}`) to leave TextIndex marks literal in selected regions
|
|
31
|
+
|
|
32
|
+
### Improved
|
|
33
|
+
|
|
34
|
+
- **Duplicate headings merge into one entry** with multiple locators (TextIndex and mmark)
|
|
35
|
+
- **Homebrew installs man pages** (`apex.1`, `apex-config.5`, `apex-plugins.7`) from the release archive
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
|
|
39
|
+
- **`[phrase]{^}` strips square brackets** from visible text while indexing the phrase
|
|
40
|
+
- **Bare `word{^}` indexes only the adjacent word**, not a multi-word run of preceding text
|
|
41
|
+
|
|
42
|
+
## [1.1.17] - 2026-09-05
|
|
43
|
+
|
|
44
|
+
### New
|
|
45
|
+
|
|
46
|
+
- **Quoted heading overrides** (`{^"term"}` and `[visible]{^"override"}`) so standalone marks and custom index headings work without falling through to superscript
|
|
47
|
+
- **Underscore emphasis in TextIndex headings** renders as `<em>` in the index and sorts as plain text
|
|
48
|
+
- *** and ** wildcards** expand the preceding heading (stripping emphasis; `**` also lowercases)
|
|
49
|
+
- **Prefix wildcards** (`*^` / `*^-`) reuse an earlier matching heading path
|
|
50
|
+
- **See and see-also cross-references** (`|target`, `|+target`, hierarchical `parent>"child"`) with see-type marks omitting locators
|
|
51
|
+
- **Inbound cross-references** (`@` / `@+`) attach see/see-also refs onto the target entry
|
|
52
|
+
- **Aliases** (`#name` after a path, usable in headings and cross-refs) plus **unreferenced aliases** (`##name`) that define without a locator
|
|
53
|
+
- **Hierarchical TextIndex paths** (`"Parent">"Child"`) as nested index entries
|
|
54
|
+
- **`--concordance FILE`** loads TextIndex concordance TSV files and auto-inserts `[match]{^...}` marks before index processing (enables indices; repeatable)
|
|
55
|
+
- **Processing toggles** (`{^-}` / `{^+}`) to leave TextIndex marks literal in selected regions
|
|
56
|
+
- **Duplicate headings merge into one entry** with multiple locators (TextIndex and mmark)
|
|
57
|
+
- **Homebrew installs man pages** (`apex.1`, `apex-config.5`, `apex-plugins.7`) from the release archive
|
|
58
|
+
- **`[phrase]{^}` strips square brackets** from visible text while indexing the phrase
|
|
59
|
+
- **Bare `word{^}` indexes only the adjacent word**, not a multi-word run of preceding text
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
|
|
63
|
+
- **Spaced pipes (`| |`) stay blank cells** even when a later row uses consecutive pipes (`|||||`) for colspan
|
|
64
|
+
- **Colspan only from consecutive pipes** (`||` / `|||`) or bare `<<`, not from whitespace-only cells
|
|
65
|
+
- **Indent/blank columns keep alignment** when a full-width colspan row follows (Hazel-style tables)
|
|
66
|
+
|
|
67
|
+
## [1.1.16] - 2026-08-14
|
|
68
|
+
|
|
69
|
+
## [1.1.15] - 2026-08-07
|
|
70
|
+
|
|
71
|
+
### Fixed
|
|
72
|
+
|
|
73
|
+
- **Link IAL attributes** (e.g. {.js-lightbox}) are preserved when a raw HTML <a> appears earlier in the document.
|
|
74
|
+
|
|
75
|
+
## [1.1.14] - 2026-08-07
|
|
76
|
+
|
|
77
|
+
### Fixed
|
|
78
|
+
|
|
79
|
+
- **Link IAL attributes** (e.g. `{.js-lightbox}`) are preserved when a raw HTML `<a>` appears earlier in the document.
|
|
80
|
+
- **RTF remote images** show a hyperlinked alt label (or "image" when alt is empty) instead of dumping raw URLs.
|
|
81
|
+
- **-t rtf** writes Rich Text Format from the CLI (also `-o file.rtf`).
|
|
82
|
+
- **APEX_OUTPUT_RTF** / **apex_cmark_to_rtf()** return RTF from the C API.
|
|
83
|
+
- **RTF writer** covers headings, emphasis, links, lists (including tasks), code, quotes, tables, images, footnotes, definition lists, strike/sup/sub, and best-effort callouts/HTML.
|
|
84
|
+
- **ObjC/Swift apexRTF** and **apexAttributedString** (RTF preferred, HTML fallback) for AppKit/UIKit.
|
|
85
|
+
- Additional docset pages
|
|
86
|
+
- **RTF local images** embed as PNG/JPEG picts by default without needing --embed-images.
|
|
87
|
+
- **Link IAL attributes** (e.g. {.js-lightbox}) are preserved when a raw HTML <a> appears earlier in the document.
|
|
88
|
+
|
|
89
|
+
## [1.1.13] - 2026-08-03
|
|
90
|
+
|
|
91
|
+
### Changed
|
|
92
|
+
|
|
93
|
+
- **RTF remote images** show a hyperlinked alt label (or "image" when alt is empty) instead of dumping raw URLs.
|
|
94
|
+
- **-t rtf** writes Rich Text Format from the CLI (also `-o file.rtf`).
|
|
95
|
+
- **APEX_OUTPUT_RTF** / **apex_cmark_to_rtf()** return RTF from the C API.
|
|
96
|
+
- **RTF writer** covers headings, emphasis, links, lists (including tasks), code, quotes, tables, images, footnotes, definition lists, strike/sup/sub, and best-effort callouts/HTML.
|
|
97
|
+
- **ObjC/Swift apexRTF** and **apexAttributedString** (RTF preferred, HTML fallback) for AppKit/UIKit.
|
|
98
|
+
- Additional docset pages
|
|
99
|
+
- **RTF local images** embed as PNG/JPEG picts by default without needing --embed-images.
|
|
100
|
+
|
|
101
|
+
### New
|
|
102
|
+
|
|
103
|
+
- **Node npm binding design** documenting @apexmarkdown/apex native distribution, camelCase options, and v1 platform scope.
|
|
104
|
+
- **Node npm implementation plan** covering CMake binding, complete options mapping, and platform prebuilds.
|
|
105
|
+
- **Autolinking** scales linearly on large documents instead of slowing quadratically.
|
|
106
|
+
|
|
107
|
+
## [1.1.12] - 2026-07-19
|
|
108
|
+
|
|
109
|
+
### New
|
|
110
|
+
|
|
111
|
+
- **Bear image attributes** Apply safe JSON metadata while preserving its comment.
|
|
112
|
+
- **Reference metadata** Apply attributes to every matching image.
|
|
113
|
+
- **Per-image reference attributes** Override shared metadata on one image.
|
|
114
|
+
|
|
115
|
+
### Fixed
|
|
116
|
+
|
|
117
|
+
- **Bear image metadata parser** releases prior results when an output struct is reused, so early parse failures no longer leak or retain stale attributes
|
|
118
|
+
- **Bear image attributes** no longer apply in Kramdown, which only enters the image preprocessor for URL encoding.
|
|
119
|
+
- **Reference metadata** only applies when the Bear comment directly follows the definition URL, title, or attributes.
|
|
120
|
+
- **Definition comments** keep their original line ending so following blocks are not glued to the comment.
|
|
121
|
+
- **Bear titles** override quoted definition titles instead of being shadowed.
|
|
122
|
+
|
|
123
|
+
## [1.1.11] - 2026-07-14
|
|
124
|
+
|
|
125
|
+
### Improved
|
|
126
|
+
|
|
127
|
+
- Undelimited MMD metadata keys may only contain letters, digits, spaces, hyphens, and underscores; punctuation in the key rejects the line as ordinary text
|
|
128
|
+
- A single candidate metadata line longer than 100 characters is treated as prose rather than a lone MMD key/value pair
|
|
129
|
+
|
|
130
|
+
### Fixed
|
|
131
|
+
|
|
132
|
+
- Undelimited MultiMarkdown metadata is only recognized at the very start of a file; a leading blank line or any content before the first key/value pair (including headings) disables it
|
|
133
|
+
- Prose paragraphs with a colon after an H1 are no longer mistaken for MMD metadata and stripped from the output
|
|
134
|
+
|
|
135
|
+
## [1.1.9] - 2026-07-14
|
|
136
|
+
|
|
137
|
+
### Fixed
|
|
138
|
+
|
|
139
|
+
- Undelimited MultiMarkdown metadata is only recognized at the very start of a file; a leading blank line or any content before the first key/value pair (including headings) disables it
|
|
140
|
+
- Prose paragraphs with a colon after an H1 are no longer mistaken for MMD metadata and stripped from the output
|
|
141
|
+
|
|
142
|
+
### Improved
|
|
143
|
+
|
|
144
|
+
- Undelimited MMD metadata keys may only contain letters, digits, spaces, hyphens, and underscores; punctuation in the key rejects the line as ordinary text
|
|
145
|
+
- A single candidate metadata line longer than 100 characters is treated as prose rather than a lone MMD key/value pair
|
|
146
|
+
|
|
147
|
+
## [1.1.5] - 2026-07-06
|
|
148
|
+
|
|
149
|
+
### Fixed
|
|
150
|
+
|
|
151
|
+
- Buffered definition-list term text before a fenced code block is no longer discarded when the preprocessor closes the list for the fence
|
|
152
|
+
- Images and reference link definitions immediately after a blockquote line without a blank line are no longer swallowed into the blockquote by CommonMark lazy continuation
|
|
153
|
+
- Reference-style images like ![][id] following a blockquote render outside the blockquote with the reference resolved correctly
|
|
154
|
+
|
|
155
|
+
## [1.1.4] - 2026-06-25
|
|
156
|
+
|
|
157
|
+
### Changed
|
|
158
|
+
|
|
159
|
+
- Homebrew formula bumped to 1.1.3
|
|
160
|
+
|
|
161
|
+
### New
|
|
162
|
+
|
|
163
|
+
- --paginate-symbols renders images as chafa ANSI art compatible with less -R when paging terminal output
|
|
164
|
+
- --no-paginate disables terminal pagination, overriding -p/--paginate and paginate settings from config or metadata
|
|
165
|
+
- Paginate: symbols metadata enables pager-friendly terminal images (chafa -f symbols) alongside normal pagination
|
|
166
|
+
- APEX_DEBUG_TERMINAL environment variable logs terminal image viewer selection, exec commands, and syntax highlighter invocations to stderr
|
|
167
|
+
|
|
168
|
+
### Improved
|
|
169
|
+
|
|
170
|
+
- Terminal image tools use terminal-aware chafa formats (iterm, kitty, symbols) with 256- or 16-color levels matching terminal256 vs terminal
|
|
171
|
+
- --width wrapping preserves OSC, DCS, and Kitty graphics escape sequences instead of breaking inline image output
|
|
172
|
+
|
|
173
|
+
### Fixed
|
|
174
|
+
|
|
175
|
+
- Imgcat is only used in iTerm2 so inline images no longer appear as raw binary garbage in Cursor and other non-iTerm terminals
|
|
176
|
+
- Apex automatically skips the pager when inline terminal graphics are present, since less -R and most pagers only support ANSI color
|
|
177
|
+
|
|
178
|
+
## [1.1.3] - 2026-06-24
|
|
179
|
+
|
|
180
|
+
### Changed
|
|
181
|
+
|
|
182
|
+
- Quarto mode enables callouts and image captions, disables wiki links, marked extensions, py callouts, and index generation
|
|
183
|
+
|
|
184
|
+
### New
|
|
185
|
+
|
|
186
|
+
- Add APEX_MODE_QUARTO and --mode quarto / mode: quarto metadata for Quarto-compatible processing with unified-family defaults
|
|
187
|
+
- Add apex_mode_is_unified_family() and apex_mode_is_kramdown_or_unified_family() helpers to share unified/quarto code paths
|
|
188
|
+
- Add enable_quarto_extensions flag for future Pandoc/Quarto preprocessors
|
|
189
|
+
- Images with {fig-alt="..."} use markdown alt text as figure caption and fig-alt as accessible img alt attribute
|
|
190
|
+
- Add .smallcaps, .underline, and span.mark CSS in quarto standalone output
|
|
191
|
+
- Add quarto mode test suite and smoke fixtures (callouts, spans, fig-alt, fenced divs)
|
|
192
|
+
- Quarto mode preprocesses Pandoc/Quarto raw content: fenced ```{=html} blocks and inline `content`{=html} passthrough HTML when unsafe is enabled; non-html formats are wrapped in <!-- raw format=... --> comments
|
|
193
|
+
- Add raw content examples to quarto smoke fixture and quarto mode test suite
|
|
194
|
+
- Quarto mode supports Pandoc list continuation markers: standalone (@) lines are stripped and split ordered lists merge when only blank lines interrupt them; interrupted lists keep intervening content and continue numbering with start attribute
|
|
195
|
+
- Quarto mode supports roman list markers (i), ii), I), etc.) with lower-roman and upper-roman list-style-type in HTML output
|
|
196
|
+
- Quarto mode converts Pandoc line blocks (lines starting with |) to div.line-block with preserved spacing
|
|
197
|
+
- Add list extension tests and smoke fixture examples for (@), roman lists, and line blocks
|
|
198
|
+
- Quarto mode supports labeled example list markers such as (@good) with labels stripped from output
|
|
199
|
+
- Quarto mode preprocesses Pandoc/Quarto fenced code block attributes ({.python filename="run.py" linenos=true}): normalizes to plain language fences and preserves filename, linenos, and other keys as data-* attributes on the rendered pre element
|
|
200
|
+
- Per-block linenos=true on fenced code blocks enables line numbers during external syntax highlighting even when global --code-line-numbers is off
|
|
201
|
+
- Add code fence attribute tests and smoke fixture example
|
|
202
|
+
- Quarto mode preprocesses {mermaid}, {dot}, and {graphviz} fenced blocks into raw pre elements with matching diagram classes (requires unsafe)
|
|
203
|
+
- Standalone Quarto output auto-injects mermaid.js when mermaid diagrams are present and no mermaid script is already configured
|
|
204
|
+
- Add quarto-diagrams metadata key, diagram tests, and smoke fixture examples
|
|
205
|
+
- Quarto mode converts {{< pagebreak >}} shortcodes to page breaks in HTML output (raw HTML when unsafe, Leanpub marker otherwise)
|
|
206
|
+
- Quarto mode converts {{< kbd ... >}} and {{% kbd ... %}} shortcodes to {% kbd %} liquid tags for use with the kbd plugin
|
|
207
|
+
- Quarto mode converts {{< include path >}} shortcodes to <<[path]> Marked file include syntax
|
|
208
|
+
- Add enable_quarto_shortcodes option (enabled by default in --mode quarto) and quarto-shortcodes metadata key to toggle the shortcode preprocessor
|
|
209
|
+
- Unknown Quarto shortcodes are left unchanged; set APEX_VERBOSE=1 to log warnings for unrecognized shortcode names
|
|
210
|
+
- Wrap Quarto cross-ref tokens (@fig-id, @sec-id, @tbl-id, @eq-id) in span.quarto-xref in HTML output
|
|
211
|
+
- Add per-feature Quarto metadata toggles (quarto-raw, quarto-list-continuation, quarto-line-blocks, quarto-roman-lists, quarto-code-attrs, quarto-strict-lists, quarto-xrefs, quarto-extensions)
|
|
212
|
+
- Add optional quarto-strict-lists preprocessor for Pandoc strict blank-line-before-list behavior
|
|
213
|
+
- Add .hidden and .quarto-xref rules to standalone default CSS
|
|
214
|
+
- Split Quarto test fixtures by topic and add wiki Quarto-Mode documentation
|
|
215
|
+
|
|
216
|
+
### Improved
|
|
217
|
+
|
|
218
|
+
- CLI --mode quarto restores quarto extension flags after global/project config metadata merge
|
|
219
|
+
|
|
220
|
+
### Fixed
|
|
221
|
+
|
|
222
|
+
- Bracketed span IAL class attributes now emit valid HTML (class="..." instead of class="...")
|
|
223
|
+
- Quarto mode treats (@) and (@label) as Pandoc example_lists list markers (line-start markers with item text), not as standalone list-continuation lines between numbered items
|
|
224
|
+
- Example lists interrupted by paragraphs continue document-wide numbering with ol start on resumed lists
|
|
225
|
+
- When quarto-xrefs is enabled, bare @fig-/@sec-/@tbl-/@eq- tokens are no longer parsed as author-in-text citations (bracketed [@key] citations unchanged)
|
|
226
|
+
|
|
227
|
+
## [1.1.2] - 2026-06-23
|
|
228
|
+
|
|
229
|
+
### New
|
|
230
|
+
|
|
231
|
+
- Public C API (apex/plugins.h) to fetch the plugin directory, list installed plugins, and install or uninstall plugins programmatically.
|
|
232
|
+
- ApexPluginManager Swift API and ApexPluginCatalog Objective-C wrappers for building plugin picker UIs in Xcode apps.
|
|
233
|
+
- EnablePlugins option in ApexOptions and the NSString options dictionary to turn on external plugin processing during conversion.
|
|
234
|
+
|
|
235
|
+
## [1.1.1] - 2026-06-21
|
|
236
|
+
|
|
237
|
+
### Changed
|
|
238
|
+
|
|
239
|
+
- Version bumped to 1.1.0.
|
|
240
|
+
|
|
241
|
+
### New
|
|
242
|
+
|
|
243
|
+
- Pandoc grid table syntax via --grid-tables / --enable-grid-tables (opt-in; converts +---+ grids to tables before parsing).
|
|
244
|
+
- Enable_grid_tables API option (default off; requires enable_tables).
|
|
245
|
+
- --no-grid-tables explicitly disables Pandoc grid table preprocessing (grid tables remain off by default in unified mode).
|
|
246
|
+
- Grid-tables / grid_tables metadata key enables or disables Pandoc grid tables per document.
|
|
247
|
+
|
|
248
|
+
### Improved
|
|
249
|
+
|
|
250
|
+
- Grid tables support colspan rows, nested grids inside cells, multiline list content in cells, and HTML output for tables with partial in-cell separators.
|
|
251
|
+
- Embedded nested grids inside grid table cells convert to HTML tables so they display inside markdown="1" cells (pipe tables are not parsed there).
|
|
252
|
+
- Headerless single-row grid tables emit a valid pipe-table header row instead of a lone delimiter line.
|
|
253
|
+
|
|
254
|
+
### Fixed
|
|
255
|
+
|
|
256
|
+
- Reference-style links in markdown="1" HTML blocks (callouts, blockquotes, divs, etc.) now resolve definitions from the full document instead of rendering as literal text.
|
|
257
|
+
- Reference footnotes [^id] in markdown="1" blocks now resolve definitions from the full document and render footnote refs and a footnotes section inside the block.
|
|
258
|
+
- Markdown="1" blocks with footnotes no longer render as empty elements when parsed HTML exceeds the initial output buffer.
|
|
259
|
+
- Grid tables no longer treat every row with fewer pipe cells than columns as a full-row colspan (e.g. Property | Earth headers now render as separate cells with correct colspan, not one merged cell).
|
|
260
|
+
- Colspan rows with nested grids no longer leak raw pipe or grid syntax as paragraphs after the table; nested grids inside colspan cells render as HTML tables.
|
|
261
|
+
- Grid tables with in-row partial separators (+---+ inside a row) now parse Pandoc-style layouts with rowspan/colspan (e.g. Temperature / 1961-1990 spanning rows with min/mean/min data).
|
|
262
|
+
- Multiline grid table cells (lists, multiple lines) now render markdown correctly via HTML cells instead of literal text with <br> tags.
|
|
263
|
+
- Lines starting with "+" alone (e.g. list items) are no longer mistaken for grid tables; only "+---" / "+===" border rows start a grid block.
|
|
264
|
+
- Invalid or unconvertible grid blocks now preserve the original source lines instead of silently dropping content.
|
|
265
|
+
|
|
266
|
+
## [1.0.15] - 2026-06-11
|
|
267
|
+
|
|
268
|
+
### Fixed
|
|
269
|
+
|
|
270
|
+
- Reference-style links in markdown="1" HTML blocks (callouts, blockquotes, divs, etc.) now resolve link definitions from the full document instead of rendering as literal text.
|
|
271
|
+
|
|
272
|
+
## [1.0.14] - 2026-06-09
|
|
273
|
+
|
|
274
|
+
### Fixed
|
|
275
|
+
|
|
276
|
+
- Special markers (<!--BREAK-->, <!--PAUSE:N-->, {::pagebreak /}, {index}, and ^ end-of-block) are no longer converted inside fenced code blocks, indented code blocks, or inline code spans.
|
|
277
|
+
- Backslash-escaped MultiMarkdown TOC markers like \{\{TOC\}\} are no longer expanded into a table of contents after markdown strips the escape backslashes.
|
|
278
|
+
- Kramdown {:toc} markers inside fenced or indented code blocks are no longer converted to <!--TOC--> during IAL preprocessing.
|
|
279
|
+
|
|
280
|
+
## [1.0.13] - 2026-05-06
|
|
281
|
+
|
|
282
|
+
### New
|
|
283
|
+
|
|
284
|
+
- Add --py-callouts and --quarto-callouts CLI toggles to enable Python/markdown-callouts and Quarto callout parsing only when explicitly requested.
|
|
285
|
+
- Support Python callouts in both !!! type "Title" blocks and NOTE: label style, including collapsed >? NOTE: syntax when --py-callouts is enabled.
|
|
286
|
+
- Support Quarto callout fences (::: {.callout-*}) as callouts behind --quarto-callouts.
|
|
287
|
+
|
|
288
|
+
### Improved
|
|
289
|
+
|
|
290
|
+
- Fenced code examples with pipelines now render as code without unexpected table artifacts in highlighted HTML and markdown output.
|
|
291
|
+
- Preserve normal fenced div behavior for non-callout ::: blocks while Quarto callouts are enabled.
|
|
292
|
+
- Add dedicated fixtures and expanded tests for Obsidian, Python, and Quarto callout formats to prevent regressions.
|
|
293
|
+
|
|
294
|
+
### Fixed
|
|
295
|
+
|
|
296
|
+
- Relaxed table processing no longer injects ---|---|---| separator rows inside fenced code blocks that contain pipe-heavy shell commands.
|
|
297
|
+
- Remove leading empty paragraph artifacts from converted Quarto callout content blocks.
|
|
298
|
+
|
|
299
|
+
## [1.0.12] - 2026-04-20
|
|
300
|
+
|
|
301
|
+
### Improved
|
|
302
|
+
|
|
303
|
+
- Pre-parse plugin transforms now apply to the final selected include content (including section/address-filtered text) instead of rewriting source files before section matching.
|
|
304
|
+
|
|
305
|
+
### Fixed
|
|
306
|
+
|
|
307
|
+
- Section-targeted transclusions now extract the requested section before pre-parse plugins run, so ![[file#Section]] and other include syntaxes return the correct section content.
|
|
308
|
+
|
|
309
|
+
## [1.0.11] - 2026-04-20
|
|
310
|
+
|
|
311
|
+
### Changed
|
|
312
|
+
|
|
313
|
+
- Homebrew installs now point to Apex 1.0.10 with the updated macOS release artifact checksum.
|
|
314
|
+
|
|
315
|
+
### Improved
|
|
316
|
+
|
|
317
|
+
- Included file content now runs through pre-parse plugins before section slicing, address extraction, and nested include processing so plugin transformations apply consistently to transclusions.
|
|
318
|
+
|
|
319
|
+
### Fixed
|
|
320
|
+
|
|
321
|
+
- Section-targeted includes now fall back to including the full source document when the requested section heading does not exist.
|
|
322
|
+
- Obsidian ![[file#section]] and MultiMarkdown {{file#section}} now behave consistently when section names are missing or mistyped.
|
|
323
|
+
|
|
324
|
+
## [1.0.10] - 2026-04-20
|
|
325
|
+
|
|
326
|
+
### Changed
|
|
327
|
+
|
|
328
|
+
- Homebrew installs now point to Apex 1.0.9 with the updated macOS release artifact checksum.
|
|
329
|
+
|
|
330
|
+
### New
|
|
331
|
+
|
|
332
|
+
- Supports Obsidian embed transclusion syntax ![[file]] and ![[file#Section]] with section extraction.
|
|
333
|
+
- Section-targeted includes now work consistently across Marked, MultiMarkdown, and iA Writer include syntaxes.
|
|
334
|
+
|
|
335
|
+
### Fixed
|
|
336
|
+
|
|
337
|
+
- Obsidian embeds now respect --wikilink-extension for extensionless targets and fall back to .md when the configured extension file does not exist.
|
|
338
|
+
- Wiki link parsing no longer rewrites ![[...]] embeds into !<a ...> output.
|
|
339
|
+
|
|
340
|
+
## [1.0.9] - 2026-04-19
|
|
341
|
+
|
|
342
|
+
### Changed
|
|
343
|
+
|
|
344
|
+
- Homebrew installs now point to Apex 1.0.8 with the updated macOS release artifact checksum.
|
|
345
|
+
|
|
346
|
+
### Fixed
|
|
347
|
+
|
|
348
|
+
- Picture generation now preserves image attributes like loading, width, and height on fallback img tags when using avif/webp with retina variants.
|
|
349
|
+
|
|
350
|
+
## [1.0.8] - 2026-04-19
|
|
351
|
+
|
|
352
|
+
### Changed
|
|
353
|
+
|
|
354
|
+
- Homebrew users now install Apex v1.0.7 from the release tarball.
|
|
355
|
+
|
|
356
|
+
### Fixed
|
|
357
|
+
|
|
358
|
+
- Autolinking no longer rewrites image density filenames like text-basic@2x.jpg into mailto links.
|
|
359
|
+
- Autolinking now ignores content inside HTML tags and attributes such as href and srcset values.
|
|
360
|
+
|
|
361
|
+
## [1.0.7] - 2026-04-15
|
|
362
|
+
|
|
363
|
+
### New
|
|
364
|
+
|
|
365
|
+
- Tests for CommonMark !\[ (non-image), false .
|
|
370
|
+
|
|
371
|
+
## [1.0.6] - 2026-04-02
|
|
372
|
+
|
|
373
|
+
### Changed
|
|
374
|
+
|
|
375
|
+
- Update Homebrew formula to Apex 1.0.5 and refresh the macOS release checksum.
|
|
376
|
+
|
|
377
|
+
### Fixed
|
|
378
|
+
|
|
379
|
+
- Keep synthetic nested ordered sublists tight in unified mode so first-level list items do not get unwanted paragraph wrappers.
|
|
380
|
+
- Preserve intentionally loose list rendering when users add explicit blank lines before nested ordered sublists.
|
|
381
|
+
- Prevent <<[file] includes from consuming following [ref]: and [^id]: lines as include address specs.
|
|
382
|
+
- Stop definition lines after included CSV tables from being misread as table captions.
|
|
383
|
+
|
|
384
|
+
## [1.0.5] - 2026-04-01
|
|
385
|
+
|
|
386
|
+
### Changed
|
|
387
|
+
|
|
388
|
+
- Update Homebrew formula to Apex 1.0.4 and refresh the macOS release checksum.
|
|
389
|
+
|
|
390
|
+
### Improved
|
|
391
|
+
|
|
392
|
+
- Strengthen public module exports so Swift and ObjC module consumers can resolve markdown and man serializer APIs consistently across build environments.
|
|
393
|
+
- Fix compiler warnings
|
|
394
|
+
- Tighten [Caption] detection so caption parsing only triggers when the paragraph contains standalone caption content.
|
|
395
|
+
- Restrict backward caption lookup to the nearest valid caption context so distant captions cannot be reused.
|
|
396
|
+
- Normalize TOC nesting relative to the selected minimum heading level so depth filtering produces stable structure.
|
|
397
|
+
- Normalize TOC labels by trimming and collapsing whitespace so generated links stay clean.
|
|
398
|
+
|
|
399
|
+
### Fixed
|
|
400
|
+
|
|
401
|
+
- Render indented numeric sublists as nested ordered lists in unified mode instead of flattening them into parent list item text.
|
|
402
|
+
- Correct alpha lists with nested sublists so continuation items render as proper list items instead of plain text.
|
|
403
|
+
- Remove leaked [apex-alpha-list:lower] markers from rendered HTML when alpha lists contain nested sublists.
|
|
404
|
+
- Prevent "$40" and similar currency amounts from being parsed as inline math delimiters.
|
|
405
|
+
- Restore Swift package and release-check builds that failed after merge due to missing markdown/man serializer type and function declarations.
|
|
406
|
+
- Render {{TOC}} markers in MultiMarkdown mode so table of contents placeholders are expanded instead of being left as literal text.
|
|
407
|
+
- Prevent footnote definitions like [^1]: ... from being treated as table captions.
|
|
408
|
+
- Prevent footnote and link definition lines like [ref]: ... from being treated as table captions.
|
|
409
|
+
- Stop inclusion-table captions from leaking onto other nearby tables that do not define their own caption.
|
|
410
|
+
- Make {{TOC:2}} render matching headings instead of an empty TOC.
|
|
411
|
+
- Keep same-level headings as siblings in range TOCs like {{TOC:2-6}}.
|
|
412
|
+
- Remove extra indentation whitespace that appeared inside TOC link text in pretty HTML output.
|
|
413
|
+
|
|
5
414
|
## [1.0.4] - 2026-03-31
|
|
6
415
|
|
|
7
416
|
### Fixed
|
|
@@ -2802,6 +3211,37 @@ Based on [cmark-gfm](https://github.com/github/cmark-gfm) by GitHub
|
|
|
2802
3211
|
|
|
2803
3212
|
Developed for [Marked](https://marked2app.com) by Brett Terpstra
|
|
2804
3213
|
|
|
3214
|
+
[1.1.20]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.20
|
|
3215
|
+
[1.1.19]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.19
|
|
3216
|
+
[1.1.18]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.18
|
|
3217
|
+
[1.1.17]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.17
|
|
3218
|
+
[1.1.16]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.16
|
|
3219
|
+
[1.1.15]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.15
|
|
3220
|
+
[1.1.14]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.14
|
|
3221
|
+
[1.1.13]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.13
|
|
3222
|
+
[1.1.12]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.12
|
|
3223
|
+
[1.1.11]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.11
|
|
3224
|
+
[1.1.10]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.10
|
|
3225
|
+
[1.1.9]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.9
|
|
3226
|
+
[1.1.8]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.8
|
|
3227
|
+
[1.1.7]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.7
|
|
3228
|
+
[1.1.6]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.6
|
|
3229
|
+
[1.1.5]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.5
|
|
3230
|
+
[1.1.4]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.4
|
|
3231
|
+
[1.1.3]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.3
|
|
3232
|
+
[1.1.2]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.2
|
|
3233
|
+
[1.1.1]: https://github.com/ApexMarkdown/apex/releases/tag/v1.1.1
|
|
3234
|
+
[1.0.15]: https://github.com/ApexMarkdown/apex/releases/tag/v1.0.15
|
|
3235
|
+
[1.0.14]: https://github.com/ApexMarkdown/apex/releases/tag/v1.0.14
|
|
3236
|
+
[1.0.13]: https://github.com/ApexMarkdown/apex/releases/tag/v1.0.13
|
|
3237
|
+
[1.0.12]: https://github.com/ApexMarkdown/apex/releases/tag/v1.0.12
|
|
3238
|
+
[1.0.11]: https://github.com/ApexMarkdown/apex/releases/tag/v1.0.11
|
|
3239
|
+
[1.0.10]: https://github.com/ApexMarkdown/apex/releases/tag/v1.0.10
|
|
3240
|
+
[1.0.9]: https://github.com/ApexMarkdown/apex/releases/tag/v1.0.9
|
|
3241
|
+
[1.0.8]: https://github.com/ApexMarkdown/apex/releases/tag/v1.0.8
|
|
3242
|
+
[1.0.7]: https://github.com/ApexMarkdown/apex/releases/tag/v1.0.7
|
|
3243
|
+
[1.0.6]: https://github.com/ApexMarkdown/apex/releases/tag/v1.0.6
|
|
3244
|
+
[1.0.5]: https://github.com/ApexMarkdown/apex/releases/tag/v1.0.5
|
|
2805
3245
|
[1.0.4]: https://github.com/ApexMarkdown/apex/releases/tag/v1.0.4
|
|
2806
3246
|
[1.0.3]: https://github.com/ApexMarkdown/apex/releases/tag/v1.0.3
|
|
2807
3247
|
[1.0.2]: https://github.com/ApexMarkdown/apex/releases/tag/v1.0.2
|
|
@@ -6,7 +6,7 @@ if(POLICY CMP0000)
|
|
|
6
6
|
endif()
|
|
7
7
|
set(CMAKE_POLICY_VERSION_MINIMUM 3.5 CACHE STRING "Minimum CMake policy version" FORCE)
|
|
8
8
|
|
|
9
|
-
project(apex VERSION 1.
|
|
9
|
+
project(apex VERSION 1.1.20 LANGUAGES C)
|
|
10
10
|
|
|
11
11
|
# Set C standard
|
|
12
12
|
set(CMAKE_C_STANDARD 99)
|
|
@@ -93,6 +93,7 @@ endif()
|
|
|
93
93
|
# Include directories
|
|
94
94
|
include_directories(
|
|
95
95
|
${CMAKE_SOURCE_DIR}/include
|
|
96
|
+
${CMAKE_SOURCE_DIR}/src
|
|
96
97
|
${CMAKE_SOURCE_DIR}/vendor/cmark-gfm/src
|
|
97
98
|
${CMAKE_SOURCE_DIR}/vendor/cmark-gfm/extensions
|
|
98
99
|
${CMAKE_BINARY_DIR}/vendor/cmark-gfm/src # For generated headers
|
|
@@ -112,16 +113,24 @@ set(APEX_LIB_SOURCES
|
|
|
112
113
|
src/ast_markdown.c
|
|
113
114
|
src/ast_terminal.c
|
|
114
115
|
src/ast_man.c
|
|
116
|
+
src/ast_rtf.c
|
|
115
117
|
src/filters_ast.c
|
|
116
118
|
src/plugins_env.c
|
|
117
119
|
src/plugins.c
|
|
118
120
|
src/plugins_remote.c
|
|
121
|
+
src/plugin_catalog.c
|
|
119
122
|
src/html_renderer.c
|
|
120
123
|
src/extensions/metadata.c
|
|
121
124
|
src/extensions/wiki_links.c
|
|
122
125
|
src/extensions/math.c
|
|
123
126
|
src/extensions/critic.c
|
|
124
127
|
src/extensions/callouts.c
|
|
128
|
+
src/extensions/raw_content.c
|
|
129
|
+
src/extensions/code_fence_attrs.c
|
|
130
|
+
src/extensions/quarto_diagrams.c
|
|
131
|
+
src/extensions/quarto_shortcodes.c
|
|
132
|
+
src/extensions/quarto_polish.c
|
|
133
|
+
src/extensions/quarto_lists.c
|
|
125
134
|
src/extensions/includes.c
|
|
126
135
|
src/extensions/inline_tables.c
|
|
127
136
|
src/extensions/toc.c
|
|
@@ -129,6 +138,7 @@ set(APEX_LIB_SOURCES
|
|
|
129
138
|
src/extensions/emoji.c
|
|
130
139
|
src/extensions/special_markers.c
|
|
131
140
|
src/extensions/ial.c
|
|
141
|
+
src/extensions/bear_image_attrs.c
|
|
132
142
|
src/extensions/definition_list.c
|
|
133
143
|
src/extensions/advanced_footnotes.c
|
|
134
144
|
src/extensions/advanced_tables.c
|
|
@@ -141,8 +151,10 @@ set(APEX_LIB_SOURCES
|
|
|
141
151
|
src/extensions/sup_sub.c
|
|
142
152
|
src/extensions/header_ids.c
|
|
143
153
|
src/extensions/relaxed_tables.c
|
|
154
|
+
src/extensions/grid_tables.c
|
|
144
155
|
src/extensions/citations.c
|
|
145
156
|
src/extensions/index.c
|
|
157
|
+
src/extensions/concordance.c
|
|
146
158
|
src/extensions/syntax_highlight.c
|
|
147
159
|
src/pretty_html.c
|
|
148
160
|
)
|
|
@@ -345,11 +357,13 @@ add_executable(apex_test_runner
|
|
|
345
357
|
tests/test_links.c
|
|
346
358
|
tests/test_tables.c
|
|
347
359
|
tests/test_ial.c
|
|
360
|
+
tests/test_bear_image_attrs.c
|
|
348
361
|
tests/test_extensions.c
|
|
349
362
|
tests/test_output.c
|
|
350
363
|
tests/test_marked_integration.c
|
|
351
364
|
tests/test_syntax_highlight.c
|
|
352
365
|
tests/test_plugins.c
|
|
366
|
+
tests/test_escaping_repro.c
|
|
353
367
|
)
|
|
354
368
|
target_link_libraries(apex_test_runner apex_static)
|
|
355
369
|
target_compile_definitions(apex_test_runner PRIVATE TEST_FIXTURES_DIR="${CMAKE_SOURCE_DIR}/tests/fixtures/includes")
|
|
@@ -7,18 +7,21 @@
|
|
|
7
7
|
class Apex < Formula
|
|
8
8
|
desc "Unified Markdown processor supporting CommonMark, GFM, MultiMarkdown, and Kramdown"
|
|
9
9
|
homepage "https://github.com/ApexMarkdown/apex"
|
|
10
|
-
version "1.
|
|
10
|
+
version "1.1.18"
|
|
11
11
|
license "MIT"
|
|
12
12
|
|
|
13
13
|
depends_on "libyaml"
|
|
14
14
|
|
|
15
15
|
on_macos do
|
|
16
16
|
url "https://github.com/ApexMarkdown/apex/releases/download/v#{version}/apex-#{version}-macos-universal.tar.gz"
|
|
17
|
-
sha256 "
|
|
17
|
+
sha256 "3fa568b1a71deea8398516f91dc6dba37ceecf586b51f295a710aacca7242c38"
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def install
|
|
21
21
|
bin.install "apex"
|
|
22
|
+
man1.install "apex.1" if File.exist?("apex.1")
|
|
23
|
+
man5.install "apex-config.5" if File.exist?("apex-config.5")
|
|
24
|
+
man7.install "apex-plugins.7" if File.exist?("apex-plugins.7")
|
|
22
25
|
# Fix libyaml path to point to Homebrew's libyaml
|
|
23
26
|
# This handles both Apple Silicon (/opt/homebrew) and Intel (/usr/local) installations
|
|
24
27
|
libyaml_path = "#{HOMEBREW_PREFIX}/lib/libyaml-0.2.dylib"
|
|
@@ -34,5 +37,7 @@ class Apex < Formula
|
|
|
34
37
|
(testpath / "test.md").write("# Hello World\n")
|
|
35
38
|
assert_match "<h1 id=\"hello-world\">Hello World</h1>", shell_output("#{bin}/apex test.md")
|
|
36
39
|
assert_match version.to_s, shell_output("#{bin}/apex --version", 2)
|
|
40
|
+
# Assert once the release tarball includes man pages (bundled by make release-*)
|
|
41
|
+
assert_path_exists man1/"apex.1" if (buildpath/"apex.1").exist?
|
|
37
42
|
end
|
|
38
43
|
end
|
|
@@ -102,17 +102,25 @@ let package = Package(
|
|
|
102
102
|
"src/ast_markdown.c",
|
|
103
103
|
"src/ast_terminal.c",
|
|
104
104
|
"src/ast_man.c",
|
|
105
|
+
"src/ast_rtf.c",
|
|
105
106
|
"src/filters_ast.c",
|
|
106
107
|
"src/ast_json.c",
|
|
107
108
|
"src/plugins_env.c",
|
|
108
109
|
"src/plugins.c",
|
|
109
110
|
"src/plugins_remote.c",
|
|
111
|
+
"src/plugin_catalog.c",
|
|
110
112
|
"src/html_renderer.c",
|
|
111
113
|
"src/extensions/metadata.c",
|
|
112
114
|
"src/extensions/wiki_links.c",
|
|
113
115
|
"src/extensions/math.c",
|
|
114
116
|
"src/extensions/critic.c",
|
|
115
117
|
"src/extensions/callouts.c",
|
|
118
|
+
"src/extensions/raw_content.c",
|
|
119
|
+
"src/extensions/code_fence_attrs.c",
|
|
120
|
+
"src/extensions/quarto_diagrams.c",
|
|
121
|
+
"src/extensions/quarto_shortcodes.c",
|
|
122
|
+
"src/extensions/quarto_polish.c",
|
|
123
|
+
"src/extensions/quarto_lists.c",
|
|
116
124
|
"src/extensions/includes.c",
|
|
117
125
|
"src/extensions/inline_tables.c",
|
|
118
126
|
"src/extensions/toc.c",
|
|
@@ -120,6 +128,7 @@ let package = Package(
|
|
|
120
128
|
"src/extensions/emoji.c",
|
|
121
129
|
"src/extensions/special_markers.c",
|
|
122
130
|
"src/extensions/ial.c",
|
|
131
|
+
"src/extensions/bear_image_attrs.c",
|
|
123
132
|
"src/extensions/definition_list.c",
|
|
124
133
|
"src/extensions/advanced_footnotes.c",
|
|
125
134
|
"src/extensions/advanced_tables.c",
|
|
@@ -132,8 +141,10 @@ let package = Package(
|
|
|
132
141
|
"src/extensions/sup_sub.c",
|
|
133
142
|
"src/extensions/header_ids.c",
|
|
134
143
|
"src/extensions/relaxed_tables.c",
|
|
144
|
+
"src/extensions/grid_tables.c",
|
|
135
145
|
"src/extensions/citations.c",
|
|
136
146
|
"src/extensions/index.c",
|
|
147
|
+
"src/extensions/concordance.c",
|
|
137
148
|
"src/extensions/syntax_highlight.c",
|
|
138
149
|
"src/pretty_html.c",
|
|
139
150
|
"src/buffer.c",
|
|
@@ -156,8 +167,8 @@ let package = Package(
|
|
|
156
167
|
name: "ApexObjC",
|
|
157
168
|
dependencies: ["ApexC"],
|
|
158
169
|
path: "objc",
|
|
159
|
-
exclude: ["Apex.swift"],
|
|
160
|
-
sources: ["NSString+Apex.m"],
|
|
170
|
+
exclude: ["Apex.swift", "ApexPlugins.swift"],
|
|
171
|
+
sources: ["NSString+Apex.m", "NSString+ApexPlugins.m"],
|
|
161
172
|
publicHeadersPath: ".",
|
|
162
173
|
cSettings: [
|
|
163
174
|
.headerSearchPath("../include"),
|
|
@@ -169,8 +180,8 @@ let package = Package(
|
|
|
169
180
|
name: "Apex",
|
|
170
181
|
dependencies: ["ApexObjC", "ApexC"],
|
|
171
182
|
path: "objc",
|
|
172
|
-
exclude: ["NSString+Apex.m", "NSString+Apex.h"
|
|
173
|
-
sources: ["Apex.swift"],
|
|
183
|
+
exclude: ["NSString+Apex.m", "NSString+Apex.h", "NSString+ApexPlugins.m", "NSString+ApexPlugins.h"],
|
|
184
|
+
sources: ["Apex.swift", "ApexPlugins.swift"],
|
|
174
185
|
publicHeadersPath: ".",
|
|
175
186
|
swiftSettings: [
|
|
176
187
|
.define("APEX_HAVE_LIBYAML"), // Always enabled when bundled
|