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
|
@@ -5,8 +5,97 @@
|
|
|
5
5
|
|
|
6
6
|
<meta charset="UTF-8">
|
|
7
7
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
8
|
-
<meta name="generator" content="Apex
|
|
8
|
+
<meta name="generator" content="Apex 1.1.12">
|
|
9
9
|
<title>Document</title>
|
|
10
|
+
<style>
|
|
11
|
+
/* GitHub-style syntax highlighting for Pygments and Skylighting */
|
|
12
|
+
/* Don't apply background to wrapper when code highlighting is enabled - let default styles handle it */
|
|
13
|
+
.code-highlighted .highlight, .code-highlighted .sourceCode { background: inherit; border-radius: 6px; padding: 16px; overflow-x: auto; }
|
|
14
|
+
.highlight pre, .sourceCode pre { margin: 0; padding: 0; background: transparent; }
|
|
15
|
+
.highlight code, .sourceCode code { font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace; font-size: 12px; line-height: 1.45; }
|
|
16
|
+
/* Pygments classes */
|
|
17
|
+
.highlight .k { color: #d73a49; font-weight: 600; } /* Keyword */
|
|
18
|
+
.highlight .kt { color: #d73a49; } /* Keyword.Type */
|
|
19
|
+
.highlight .kd { color: #d73a49; font-weight: 600; } /* Keyword.Declaration */
|
|
20
|
+
.highlight .kn { color: #d73a49; } /* Keyword.Namespace */
|
|
21
|
+
.highlight .kp { color: #d73a49; } /* Keyword.Pseudo */
|
|
22
|
+
.highlight .kr { color: #d73a49; font-weight: 600; } /* Keyword.Reserved */
|
|
23
|
+
.highlight .n { color: #6f42c1; } /* Name */
|
|
24
|
+
.highlight .na { color: #6f42c1; } /* Name.Attribute */
|
|
25
|
+
.highlight .nc { color: #6f42c1; font-weight: 600; } /* Name.Class */
|
|
26
|
+
.highlight .no { color: #005cc5; } /* Name.Constant */
|
|
27
|
+
.highlight .nd { color: #6f42c1; font-weight: 600; } /* Name.Decorator */
|
|
28
|
+
.highlight .ni { color: #800080; } /* Name.Entity */
|
|
29
|
+
.highlight .ne { color: #990000; font-weight: 600; } /* Name.Exception */
|
|
30
|
+
.highlight .nf { color: #6f42c1; font-weight: 600; } /* Name.Function */
|
|
31
|
+
.highlight .nl { color: #6f42c1; } /* Name.Label */
|
|
32
|
+
.highlight .nn { color: #555; } /* Name.Namespace */
|
|
33
|
+
.highlight .nt { color: #22863a; } /* Name.Tag */
|
|
34
|
+
.highlight .nv { color: #e36209; } /* Name.Variable */
|
|
35
|
+
.highlight .s { color: #032f62; } /* String */
|
|
36
|
+
.highlight .sb { color: #032f62; } /* String.Backtick */
|
|
37
|
+
.highlight .sc { color: #032f62; } /* String.Char */
|
|
38
|
+
.highlight .sd { color: #032f62; } /* String.Doc */
|
|
39
|
+
.highlight .s2 { color: #032f62; } /* String.Double */
|
|
40
|
+
.highlight .se { color: #032f62; } /* String.Escape */
|
|
41
|
+
.highlight .sh { color: #032f62; } /* String.Heredoc */
|
|
42
|
+
.highlight .si { color: #032f62; } /* String.Interpol */
|
|
43
|
+
.highlight .sx { color: #032f62; } /* String.Other */
|
|
44
|
+
.highlight .sr { color: #032f62; } /* String.Regex */
|
|
45
|
+
.highlight .s1 { color: #032f62; } /* String.Single */
|
|
46
|
+
.highlight .ss { color: #032f62; } /* String.Symbol */
|
|
47
|
+
.highlight .c { color: #6a737d; font-style: italic; } /* Comment */
|
|
48
|
+
.highlight .c1 { color: #6a737d; font-style: italic; } /* Comment.Single */
|
|
49
|
+
.highlight .cm { color: #6a737d; font-style: italic; } /* Comment.Multiline */
|
|
50
|
+
.highlight .cp { color: #6a737d; font-weight: 600; } /* Comment.Preproc */
|
|
51
|
+
.highlight .cs { color: #6a737d; font-weight: 600; font-style: italic; } /* Comment.Special */
|
|
52
|
+
.highlight .m { color: #005cc5; } /* Literal.Number */
|
|
53
|
+
.highlight .mb { color: #005cc5; } /* Literal.Number.Bin */
|
|
54
|
+
.highlight .mf { color: #005cc5; } /* Literal.Number.Float */
|
|
55
|
+
.highlight .mh { color: #005cc5; } /* Literal.Number.Hex */
|
|
56
|
+
.highlight .mi { color: #005cc5; } /* Literal.Number.Integer */
|
|
57
|
+
.highlight .il { color: #005cc5; } /* Literal.Number.Integer.Long */
|
|
58
|
+
.highlight .mo { color: #005cc5; } /* Literal.Number.Oct */
|
|
59
|
+
.highlight .o { color: #d73a49; } /* Operator */
|
|
60
|
+
.highlight .ow { color: #d73a49; } /* Operator.Word */
|
|
61
|
+
.highlight .p { color: #24292e; } /* Punctuation */
|
|
62
|
+
.highlight .w { color: #e1e4e8; } /* Text.Whitespace */
|
|
63
|
+
/* Skylighting classes */
|
|
64
|
+
.sourceCode .kw { color: #d73a49; font-weight: 600; } /* Keyword */
|
|
65
|
+
.sourceCode .dt { color: #6f42c1; } /* DataType */
|
|
66
|
+
.sourceCode .dv { color: #005cc5; } /* DecVal */
|
|
67
|
+
.sourceCode .bn { color: #005cc5; } /* BaseN */
|
|
68
|
+
.sourceCode .fl { color: #005cc5; } /* Float */
|
|
69
|
+
.sourceCode .ch { color: #032f62; } /* Char */
|
|
70
|
+
.sourceCode .st { color: #032f62; } /* String */
|
|
71
|
+
.sourceCode .co { color: #6a737d; font-style: italic; } /* Comment */
|
|
72
|
+
.sourceCode .ot { color: #22863a; } /* Other */
|
|
73
|
+
.sourceCode .al { color: #e36209; font-weight: 600; } /* Alert */
|
|
74
|
+
.sourceCode .fu { color: #6f42c1; font-weight: 600; } /* Function */
|
|
75
|
+
.sourceCode .re { color: #032f62; } /* RegionMarker */
|
|
76
|
+
.sourceCode .er { color: #d73a49; font-weight: 600; } /* Error */
|
|
77
|
+
.sourceCode .cf { color: #d73a49; font-weight: 600; } /* ControlFlow */
|
|
78
|
+
.sourceCode .op { color: #d73a49; } /* Operator */
|
|
79
|
+
.sourceCode .pp { color: #6a737d; } /* Preprocessor */
|
|
80
|
+
.sourceCode .at { color: #005cc5; } /* Attribute */
|
|
81
|
+
.sourceCode .do { color: #6a737d; font-style: italic; } /* Documentation */
|
|
82
|
+
.sourceCode .an { color: #6a737d; font-weight: 600; } /* Annotation */
|
|
83
|
+
.sourceCode .cv { color: #6a737d; font-weight: 600; font-style: italic; } /* CommentVar */
|
|
84
|
+
.sourceCode .in { color: #6a737d; } /* Information */
|
|
85
|
+
.sourceCode .wa { color: #e36209; font-weight: 600; } /* Warning */
|
|
86
|
+
.sourceCode .im { color: #d73a49; } /* Import */
|
|
87
|
+
.sourceCode .bu { color: #005cc5; } /* BuiltIn */
|
|
88
|
+
.sourceCode .ex { color: #6f42c1; } /* Extension */
|
|
89
|
+
.sourceCode .va { color: #e36209; } /* Variable */
|
|
90
|
+
.sourceCode .ss { color: #032f62; } /* SpecialString */
|
|
91
|
+
.sourceCode .sc { color: #032f62; } /* SpecialChar */
|
|
92
|
+
.sourceCode .vs { color: #032f62; } /* VerbatimString */
|
|
93
|
+
.sourceCode .il { color: #005cc5; } /* Special */
|
|
94
|
+
/* Line numbers (Skylighting) */
|
|
95
|
+
.sourceCode.numberSource .sourceCode { counter-reset: line; }
|
|
96
|
+
.sourceCode.numberSource .sourceCode > span { position: relative; left: -4em; counter-increment: line; }
|
|
97
|
+
.sourceCode.numberSource .sourceCode > span > a:first-child::before { content: counter(line); position: relative; left: -1em; text-align: right; vertical-align: baseline; border: none; display: inline-block; min-width: 1em; padding-right: 0.5em; color: #aaa; }
|
|
98
|
+
</style>
|
|
10
99
|
<style>
|
|
11
100
|
body {
|
|
12
101
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
@@ -35,10 +124,52 @@
|
|
|
35
124
|
ins { background: #d4fcbc; text-decoration: none; }
|
|
36
125
|
del { background: #fbb6c2; text-decoration: line-through; }
|
|
37
126
|
mark { background: #fff3cd; }
|
|
127
|
+
.smallcaps { font-variant: small-caps; }
|
|
128
|
+
.underline { text-decoration: underline; }
|
|
129
|
+
span.mark { background: #fff3cd; }
|
|
130
|
+
.hidden { display: none; }
|
|
131
|
+
.quarto-xref { font-variant: normal; }
|
|
38
132
|
.critic.comment { background: #e7e7e7; color: #666; font-style: italic; }
|
|
133
|
+
.mkhashtag { color: #666; }
|
|
134
|
+
.mkstyledtag {
|
|
135
|
+
display: inline-block;
|
|
136
|
+
background: #e0e0e0;
|
|
137
|
+
padding: 3px 9px;
|
|
138
|
+
border-radius: 20px;
|
|
139
|
+
font-size: 0.9em;
|
|
140
|
+
line-height: 1.4;
|
|
141
|
+
color: #333;
|
|
142
|
+
margin: 0 2px;
|
|
143
|
+
}
|
|
39
144
|
</style>
|
|
145
|
+
<meta name="paginate" content="symbols"/>
|
|
146
|
+
<meta name="highlight-language-only" content="true"/>
|
|
147
|
+
<meta name="code-line-numbers" content="false"/>
|
|
148
|
+
<meta name="code-highlight" content="pygments"/>
|
|
149
|
+
<meta name="sup-sub" content="true"/>
|
|
150
|
+
<meta name="relaxed-tables" content="true"/>
|
|
151
|
+
<meta name="includes" content="true"/>
|
|
152
|
+
<meta name="autolink" content="true"/>
|
|
153
|
+
<meta name="pretty" content="false"/>
|
|
154
|
+
<meta name="standalone" content="false"/>
|
|
155
|
+
<meta name="mode" content="unified"/>
|
|
156
|
+
<meta name="markdown-in-html" content="true"/>
|
|
157
|
+
<meta name="image-captions" content="true"/>
|
|
158
|
+
<meta name="wikilink-extension" content="html"/>
|
|
159
|
+
<meta name="wikilink-space" content="hyphen"/>
|
|
160
|
+
<meta name="wikilinks" content="true"/>
|
|
161
|
+
<meta name="widont" content="true"/>
|
|
162
|
+
<meta name="plugins" content="true"/>
|
|
163
|
+
<meta name="id-format" content="gfm"/>
|
|
164
|
+
|
|
40
165
|
<style>
|
|
41
|
-
|
|
166
|
+
:root {
|
|
167
|
+
/* border-box width of the fixed sidebar; body offset includes a small gap */
|
|
168
|
+
--sidebar-width: 250px;
|
|
169
|
+
--sidebar-offset: 270px;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* Base styles — override Apex standalone centering (max-width + margin: auto) */
|
|
42
173
|
body {
|
|
43
174
|
-webkit-font-smoothing: antialiased;
|
|
44
175
|
-moz-osx-font-smoothing: grayscale;
|
|
@@ -48,6 +179,11 @@ body {
|
|
|
48
179
|
line-height: 1.65;
|
|
49
180
|
color: #1e293b;
|
|
50
181
|
background-color: #fff;
|
|
182
|
+
max-width: none;
|
|
183
|
+
width: auto;
|
|
184
|
+
margin: 2rem 2rem 2rem var(--sidebar-offset);
|
|
185
|
+
padding: 0 1rem;
|
|
186
|
+
box-sizing: border-box;
|
|
51
187
|
}
|
|
52
188
|
|
|
53
189
|
/* Sidebar / Main TOC - wider on larger screens */
|
|
@@ -56,9 +192,10 @@ body {
|
|
|
56
192
|
position: fixed;
|
|
57
193
|
left: 0;
|
|
58
194
|
top: 0;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
195
|
+
box-sizing: border-box;
|
|
196
|
+
width: var(--sidebar-width);
|
|
197
|
+
min-width: var(--sidebar-width);
|
|
198
|
+
max-width: var(--sidebar-width);
|
|
62
199
|
height: 100vh;
|
|
63
200
|
overflow-y: auto;
|
|
64
201
|
background: #1e293b;
|
|
@@ -67,7 +204,6 @@ body {
|
|
|
67
204
|
padding: 24px 20px 130px;
|
|
68
205
|
font-size: 14px;
|
|
69
206
|
z-index: 100;
|
|
70
|
-
margin-right: 1rem;
|
|
71
207
|
box-shadow: 4px 0 24px rgba(0, 0, 0, 0.08);
|
|
72
208
|
transition: transform 0.3s ease;
|
|
73
209
|
}
|
|
@@ -116,11 +252,6 @@ body {
|
|
|
116
252
|
font-weight: 500;
|
|
117
253
|
}
|
|
118
254
|
|
|
119
|
-
/* Body margin for sidebar */
|
|
120
|
-
body {
|
|
121
|
-
margin-left: 270px;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
255
|
/* Hamburger menu button */
|
|
125
256
|
.hamburger-menu {
|
|
126
257
|
display: none;
|
|
@@ -136,6 +267,7 @@ body {
|
|
|
136
267
|
color: rgba(255, 255, 255, 0.9);
|
|
137
268
|
font-size: 20px;
|
|
138
269
|
line-height: 1;
|
|
270
|
+
box-sizing: border-box;
|
|
139
271
|
width: 44px;
|
|
140
272
|
height: 44px;
|
|
141
273
|
align-items: center;
|
|
@@ -153,9 +285,7 @@ body {
|
|
|
153
285
|
|
|
154
286
|
/* Move hamburger to the right of the sidebar when menu is open */
|
|
155
287
|
.hamburger-menu.active {
|
|
156
|
-
left: calc(
|
|
157
|
-
250px + 12px
|
|
158
|
-
); /* Position just to the right of sidebar (max-width 250px + 12px padding) */
|
|
288
|
+
left: calc(var(--sidebar-width) + 12px);
|
|
159
289
|
}
|
|
160
290
|
|
|
161
291
|
.hamburger-menu.active {
|
|
@@ -251,7 +381,7 @@ body {
|
|
|
251
381
|
.floating-toc {
|
|
252
382
|
position: fixed;
|
|
253
383
|
top: 0;
|
|
254
|
-
left:
|
|
384
|
+
left: var(--sidebar-offset);
|
|
255
385
|
right: 0;
|
|
256
386
|
z-index: 50;
|
|
257
387
|
opacity: 0;
|
|
@@ -677,7 +807,7 @@ ol ul {
|
|
|
677
807
|
}
|
|
678
808
|
|
|
679
809
|
body {
|
|
680
|
-
margin
|
|
810
|
+
margin: 2rem 1rem;
|
|
681
811
|
}
|
|
682
812
|
|
|
683
813
|
.floating-toc {
|
|
@@ -687,7 +817,7 @@ ol ul {
|
|
|
687
817
|
|
|
688
818
|
</style></head>
|
|
689
819
|
|
|
690
|
-
<body>
|
|
820
|
+
<body class="code-highlighted">
|
|
691
821
|
<div class="floating-toc" id="floating-toc">
|
|
692
822
|
<div class="floating-toc-container">
|
|
693
823
|
<div class="floating-toc-header">
|
|
@@ -702,23 +832,23 @@ ol ul {
|
|
|
702
832
|
<button class="hamburger-menu" id="hamburger-menu" aria-label="Toggle navigation"></button>
|
|
703
833
|
<div class="mobile-menu-overlay" id="mobile-menu-overlay"></div>
|
|
704
834
|
|
|
705
|
-
<nav class="main-toc"><ul><li><a href="Home.html">Home</a></li><li><a href="Getting-Started.html">Getting Started</a></li><li><a href="Installation.html">Installation</a></li><li><a href="Usage.html">Usage</a></li><li><a href="Syntax.html">Syntax</a></li><li><a href="Inline-Attribute-Lists.html">Inline Attribute Lists</a></li><li><a href="Modes.html">Modes</a></li><li><a href="Command-Line-Options.html">Command Line Options</a></li><li><a href="Multi-File-Documents.html">Multi-file Documents</a></li><li><a href="Citations.html">Citations</a></li><li><a href="Metadata-Transforms.html">Metadata Transforms</a></li><li><a href="Pandoc-Integration.html">Integrating with Pandoc</a></li><li><a href="Header-IDs.html">Header IDs</a></li><li><a href="C-API.html">C API</a></li><li><a href="Xcode-Integration.html">Xcode Integration</a></li><li><a href="Examples.html">Examples</a></li><li><a href="Plugins.html">Plugins</a></li><li><a href="Troubleshooting.html">Troubleshooting</a></li><li><a href="Credits.html">Credits</a></li></ul></nav>
|
|
835
|
+
<nav class="main-toc"><ul><li><a href="Home.html">Home</a></li><li><a href="Getting-Started.html">Getting Started</a></li><li><a href="Installation.html">Installation</a></li><li><a href="Usage.html">Usage</a></li><li><a href="Syntax.html">Syntax</a></li><li><a href="Callouts.html">Callouts</a></li><li><a href="Tables.html">Tables</a></li><li><a href="Inline-Attribute-Lists.html">Inline Attribute Lists</a></li><li><a href="Modes.html">Modes</a></li><li><a href="Quarto-Mode.html">Quarto Mode</a></li><li><a href="Command-Line-Options.html">Command Line Options</a></li><li><a href="Rendering-Markdown-In-Terminal.html">Rendering Markdown in the Terminal</a></li><li><a href="Generating-Man-Pages.html">Generating Man Pages</a></li><li><a href="Multi-File-Documents.html">Multi-file Documents</a></li><li><a href="Citations.html">Citations</a></li><li><a href="Indices.html">Indices</a></li><li><a href="Metadata-Transforms.html">Metadata Transforms</a></li><li><a href="Pandoc-Integration.html">Integrating with Pandoc</a></li><li><a href="Using-Apex-with-Jekyll.html">Using Apex with Jekyll</a></li><li><a href="Header-IDs.html">Header IDs</a></li><li><a href="C-API.html">C API</a></li><li><a href="Writing-Tests.html">Writing Tests</a></li><li><a href="Xcode-Integration.html">Xcode Integration</a></li><li><a href="Examples.html">Examples</a></li><li><a href="Plugins.html">Plugins</a></li><li><a href="Filters.html">Filters</a></li><li><a href="Troubleshooting.html">Troubleshooting</a></li><li><a href="Credits.html">Credits</a></li></ul></nav>
|
|
706
836
|
|
|
707
837
|
<h1 id="xcode-integration">
|
|
708
838
|
Xcode Integration
|
|
709
839
|
</h1>
|
|
710
|
-
<nav class="page-toc" id="page-toc-top"><ul><li><a href="#xcode-integration">Xcode Integration</a><ul><li><a href="#production-readiness">Production
|
|
840
|
+
<nav class="page-toc" id="page-toc-top"><ul><li><a href="#xcode-integration">Xcode Integration</a><ul><li><a href="#production-readiness">Production Readiness</a></li><li><a href="#swift-package-manager-spm-recommended">Swift Package Manager (SPM) - Recommended</a><ul><li><a href="#adding-apex-via-spm">Adding Apex via SPM</a></li><li><a href="#using-apex-in-your-code">Using Apex in Your Code</a></li><li><a href="#platform-support">Platform Support</a></li><li><a href="#spm-benefits">SPM Benefits</a></li></ul></li><li><a href="#framework-build-alternative">Framework Build (Alternative)</a></li><li><a href="#adding-to-xcode-project">Adding to Xcode Project</a><ul><li><a href="#method-1-swift-package-manager-recommended">Method 1: Swift Package Manager (Recommended)</a></li><li><a href="#method-2-framework-reference">Method 2: Framework Reference</a></li><li><a href="#method-3-cmake-integration">Method 3: CMake Integration</a></li></ul></li><li><a href="#objective-c-wrapper">Objective-C Wrapper</a><ul><li><a href="#basic-usage">Basic Usage</a></li><li><a href="#api">API</a></li><li><a href="#table-of-contents-outline-data">Table of Contents (outline data)</a></li><li><a href="#convenience-methods">Convenience Methods</a><ul><li><a href="#standalone-html-documents">Standalone HTML Documents</a></li><li><a href="#pretty-printed-html">Pretty-Printed HTML</a></li><li><a href="#dictionary-based-options">Dictionary-Based Options</a></li><li><a href="#swift-friendly-convenience-method">Swift-Friendly Convenience Method</a></li><li><a href="#instance-methods">Instance Methods</a></li></ul></li></ul></li><li><a href="#mode-constants">Mode Constants</a></li><li><a href="#direct-c-api-usage">Direct C API Usage</a></li><li><a href="#integration-example">Integration Example</a><ul><li><a href="#adding-to-marked">Adding to Marked</a></li></ul></li><li><a href="#build-settings">Build Settings</a><ul><li><a href="#header-search-paths">Header Search Paths</a></li><li><a href="#framework-search-paths">Framework Search Paths</a></li><li><a href="#other-linker-flags">Other Linker Flags</a></li><li><a href="#swift-api-support">Swift API Support</a></li></ul></li><li><a href="#swift-integration">Swift Integration</a><ul><li><a href="#idiomatic-swift-api-recommended">Idiomatic Swift API (Recommended)</a></li><li><a href="#apexmode-enum">ApexMode Enum</a></li><li><a href="#apexoptions-struct">ApexOptions Struct</a></li><li><a href="#apexoptions-vs-apexoptions">ApexOptions vs apex_options</a></li><li><a href="#objective-c-bridge-alternative">Objective-C Bridge (Alternative)</a></li></ul></li><li><a href="#plugin-catalog-and-installation">Plugin Catalog and Installation</a><ul><li><a href="#swift-api-recommended">Swift API (recommended)</a></li><li><a href="#objective-c-api">Objective-C API</a></li><li><a href="#c-api">C API</a></li></ul></li><li><a href="#troubleshooting">Troubleshooting</a><ul><li><a href="#swift-package-manager-issues">Swift Package Manager Issues</a></li><li><a href="#framework-not-found">Framework Not Found</a></li><li><a href="#linker-errors">Linker Errors</a></li><li><a href="#runtime-errors">Runtime Errors</a></li></ul></li><li><a href="#performance">Performance</a></li><li><a href="#module-map">Module Map</a></li><li><a href="#comparison-of-integration-methods">Comparison of Integration Methods</a></li><li><a href="#related">Related</a></li></ul></li><li><a href="#index-section">Index</a></li></ul></nav>
|
|
711
841
|
|
|
712
842
|
<p>
|
|
713
843
|
This guide covers integrating Apex into Xcode projects for macOS and iOS applications.
|
|
714
844
|
</p>
|
|
715
845
|
|
|
716
846
|
<h2 id="production-readiness">
|
|
717
|
-
Production
|
|
847
|
+
Production Readiness
|
|
718
848
|
</h2>
|
|
719
849
|
|
|
720
850
|
<p>
|
|
721
|
-
<strong>
|
|
851
|
+
<strong>Important:</strong> Apex is currently in a pre-1.0 development stage. The API and implementation are still evolving, and breaking changes may occur between versions. Apex should only be used for testing and development purposes at this time.
|
|
722
852
|
</p>
|
|
723
853
|
|
|
724
854
|
<p>
|
|
@@ -728,15 +858,15 @@ ol ul {
|
|
|
728
858
|
<ul>
|
|
729
859
|
|
|
730
860
|
<li>
|
|
731
|
-
<strong>
|
|
861
|
+
<strong>Major versions</strong> (1.0, 2.0, etc.) may include breaking API changes
|
|
732
862
|
</li>
|
|
733
863
|
|
|
734
864
|
<li>
|
|
735
|
-
<strong>
|
|
865
|
+
<strong>Minor versions</strong> (1.1, 1.2, etc.) will add new features while maintaining backward compatibility
|
|
736
866
|
</li>
|
|
737
867
|
|
|
738
868
|
<li>
|
|
739
|
-
<strong>
|
|
869
|
+
<strong>Patch versions</strong> (1.0.1, 1.0.2, etc.) will only include bug fixes and will maintain full backward compatibility
|
|
740
870
|
</li>
|
|
741
871
|
|
|
742
872
|
</ul>
|
|
@@ -746,7 +876,7 @@ ol ul {
|
|
|
746
876
|
</p>
|
|
747
877
|
|
|
748
878
|
<h2 id="swift-package-manager-spm-recommended">
|
|
749
|
-
Swift Package Manager (SPM)
|
|
879
|
+
Swift Package Manager (SPM) - Recommended
|
|
750
880
|
</h2>
|
|
751
881
|
|
|
752
882
|
<p>
|
|
@@ -754,7 +884,7 @@ ol ul {
|
|
|
754
884
|
</p>
|
|
755
885
|
|
|
756
886
|
<h3 id="adding-apex-via-spm">
|
|
757
|
-
Adding Apex
|
|
887
|
+
Adding Apex via SPM
|
|
758
888
|
</h3>
|
|
759
889
|
|
|
760
890
|
<ol>
|
|
@@ -798,47 +928,49 @@ ol ul {
|
|
|
798
928
|
</ol>
|
|
799
929
|
|
|
800
930
|
<h3 id="using-apex-in-your-code">
|
|
801
|
-
Using Apex in
|
|
931
|
+
Using Apex in Your Code
|
|
802
932
|
</h3>
|
|
803
933
|
|
|
804
934
|
<p>
|
|
805
935
|
Once added via SPM, simply import and use:
|
|
806
936
|
</p>
|
|
807
937
|
|
|
808
|
-
<
|
|
938
|
+
<div class="highlight">
|
|
939
|
+
<pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Apex</span>
|
|
809
940
|
|
|
810
|
-
|
|
811
|
-
<span class="
|
|
812
|
-
<span class="
|
|
941
|
+
<span class="c1">// Basic usage</span>
|
|
942
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">markdown</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s">"# Hello World"</span>
|
|
943
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">html</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">()</span>
|
|
813
944
|
|
|
814
|
-
|
|
815
|
-
<span class="
|
|
945
|
+
<span class="c1">// With mode</span>
|
|
946
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">html2</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">gfm</span><span class="p">)</span>
|
|
816
947
|
|
|
817
|
-
|
|
818
|
-
<span class="
|
|
819
|
-
<span class="n">options</span><span class="
|
|
820
|
-
<span class="n">options</span><span class="
|
|
821
|
-
<span class="
|
|
822
|
-
</
|
|
948
|
+
<span class="c1">// With options</span>
|
|
949
|
+
<span class="kd">var</span><span class="w"> </span><span class="nv">options</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">ApexOptions</span><span class="p">()</span>
|
|
950
|
+
<span class="n">options</span><span class="p">.</span><span class="n">pretty</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
|
|
951
|
+
<span class="n">options</span><span class="p">.</span><span class="n">generateHeaderIDs</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
|
|
952
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">html3</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">,</span><span class="w"> </span><span class="n">options</span><span class="p">:</span><span class="w"> </span><span class="n">options</span><span class="p">)</span>
|
|
953
|
+
</pre>
|
|
954
|
+
</div>
|
|
823
955
|
|
|
824
956
|
<h3 id="platform-support">
|
|
825
|
-
Platform
|
|
957
|
+
Platform Support
|
|
826
958
|
</h3>
|
|
827
959
|
|
|
828
960
|
<ul>
|
|
829
961
|
|
|
830
962
|
<li>
|
|
831
|
-
<strong>
|
|
963
|
+
<strong>macOS</strong>: 10.13+ (High Sierra)
|
|
832
964
|
</li>
|
|
833
965
|
|
|
834
966
|
<li>
|
|
835
|
-
<strong>
|
|
967
|
+
<strong>iOS</strong>: 11.0+
|
|
836
968
|
</li>
|
|
837
969
|
|
|
838
970
|
</ul>
|
|
839
971
|
|
|
840
972
|
<h3 id="spm-benefits">
|
|
841
|
-
SPM
|
|
973
|
+
SPM Benefits
|
|
842
974
|
</h3>
|
|
843
975
|
|
|
844
976
|
<ul>
|
|
@@ -866,29 +998,31 @@ ol ul {
|
|
|
866
998
|
</ul>
|
|
867
999
|
|
|
868
1000
|
<h2 id="framework-build-alternative">
|
|
869
|
-
Framework Build
|
|
1001
|
+
Framework Build (Alternative)
|
|
870
1002
|
</h2>
|
|
871
1003
|
|
|
872
1004
|
<p>
|
|
873
1005
|
Apex can also be built as a framework for manual integration:
|
|
874
1006
|
</p>
|
|
875
1007
|
|
|
876
|
-
<
|
|
877
|
-
<span class="nb">
|
|
878
|
-
|
|
1008
|
+
<div class="highlight">
|
|
1009
|
+
<pre><span></span><span class="nb">cd</span><span class="w"> </span>apex
|
|
1010
|
+
mkdir<span class="w"> </span>build<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="nb">cd</span><span class="w"> </span>build
|
|
1011
|
+
cmake<span class="w"> </span>-DBUILD_FRAMEWORK<span class="o">=</span>ON<span class="w"> </span>..
|
|
879
1012
|
make
|
|
880
|
-
</
|
|
1013
|
+
</pre>
|
|
1014
|
+
</div>
|
|
881
1015
|
|
|
882
1016
|
<p>
|
|
883
1017
|
The framework will be at <code>build/Apex.framework</code>.
|
|
884
1018
|
</p>
|
|
885
1019
|
|
|
886
1020
|
<h2 id="adding-to-xcode-project">
|
|
887
|
-
Adding to Xcode
|
|
1021
|
+
Adding to Xcode Project
|
|
888
1022
|
</h2>
|
|
889
1023
|
|
|
890
1024
|
<h3 id="method-1-swift-package-manager-recommended">
|
|
891
|
-
Method 1: Swift Package Manager
|
|
1025
|
+
Method 1: Swift Package Manager (Recommended)
|
|
892
1026
|
</h3>
|
|
893
1027
|
|
|
894
1028
|
<p>
|
|
@@ -896,7 +1030,7 @@ make
|
|
|
896
1030
|
</p>
|
|
897
1031
|
|
|
898
1032
|
<h3 id="method-2-framework-reference">
|
|
899
|
-
Method 2: Framework
|
|
1033
|
+
Method 2: Framework Reference
|
|
900
1034
|
</h3>
|
|
901
1035
|
|
|
902
1036
|
<ol>
|
|
@@ -916,19 +1050,21 @@ make
|
|
|
916
1050
|
</ol>
|
|
917
1051
|
|
|
918
1052
|
<h3 id="method-3-cmake-integration">
|
|
919
|
-
Method 3: CMake
|
|
1053
|
+
Method 3: CMake Integration
|
|
920
1054
|
</h3>
|
|
921
1055
|
|
|
922
1056
|
<p>
|
|
923
1057
|
If your project uses CMake:
|
|
924
1058
|
</p>
|
|
925
1059
|
|
|
926
|
-
<
|
|
927
|
-
<span class="nb">
|
|
928
|
-
</
|
|
1060
|
+
<div class="highlight">
|
|
1061
|
+
<pre><span></span><span class="nb">add_subdirectory</span><span class="p">(</span><span class="s">apex</span><span class="p">)</span>
|
|
1062
|
+
<span class="nb">target_link_libraries</span><span class="p">(</span><span class="s">your_app</span><span class="w"> </span><span class="s">Apex</span><span class="p">)</span>
|
|
1063
|
+
</pre>
|
|
1064
|
+
</div>
|
|
929
1065
|
|
|
930
1066
|
<h2 id="objective-c-wrapper">
|
|
931
|
-
Objective-C
|
|
1067
|
+
Objective-C Wrapper
|
|
932
1068
|
</h2>
|
|
933
1069
|
|
|
934
1070
|
<p>
|
|
@@ -936,7 +1072,7 @@ make
|
|
|
936
1072
|
</p>
|
|
937
1073
|
|
|
938
1074
|
<p>
|
|
939
|
-
<strong>
|
|
1075
|
+
<strong>Files:</strong>
|
|
940
1076
|
</p>
|
|
941
1077
|
|
|
942
1078
|
<ul>
|
|
@@ -952,76 +1088,89 @@ make
|
|
|
952
1088
|
</ul>
|
|
953
1089
|
|
|
954
1090
|
<h3 id="basic-usage">
|
|
955
|
-
Basic
|
|
1091
|
+
Basic Usage
|
|
956
1092
|
</h3>
|
|
957
1093
|
|
|
958
|
-
<
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
<span class="
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
<span class="
|
|
965
|
-
<span class="
|
|
966
|
-
<span class="
|
|
967
|
-
<span class="
|
|
968
|
-
<span class="
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
<span class="
|
|
972
|
-
<span class="
|
|
973
|
-
</
|
|
1094
|
+
<div class="highlight">
|
|
1095
|
+
<pre><span></span><span class="cp">#import "NSString+Apex.h"</span>
|
|
1096
|
+
|
|
1097
|
+
<span class="c1">// Convert with default unified mode</span>
|
|
1098
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="p">];</span>
|
|
1099
|
+
|
|
1100
|
+
<span class="c1">// Convert with specific mode using constants (recommended)</span>
|
|
1101
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">gfmHtml</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="n">ApexModeGFM</span><span class="p">];</span>
|
|
1102
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">mmdHtml</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="n">ApexModeMultiMarkdown</span><span class="p">];</span>
|
|
1103
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">kramdownHtml</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="n">ApexModeKramdown</span><span class="p">];</span>
|
|
1104
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">commonmarkHtml</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="n">ApexModeCommonmark</span><span class="p">];</span>
|
|
1105
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">unifiedHtml</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="n">ApexModeUnified</span><span class="p">];</span>
|
|
1106
|
+
|
|
1107
|
+
<span class="c1">// String literals also work (for backward compatibility)</span>
|
|
1108
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">gfmHtml2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="s">@"gfm"</span><span class="p">];</span>
|
|
1109
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">mmdHtml2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdownText</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="s">@"multimarkdown"</span><span class="p">];</span>
|
|
1110
|
+
</pre>
|
|
1111
|
+
</div>
|
|
974
1112
|
|
|
975
1113
|
<h3 id="api">
|
|
976
1114
|
API
|
|
977
1115
|
</h3>
|
|
978
1116
|
|
|
979
|
-
<
|
|
980
|
-
<span
|
|
981
|
-
<span class="k">extern</span>
|
|
982
|
-
<span class="k">extern</span>
|
|
983
|
-
<span class="k">extern</span>
|
|
984
|
-
<span class="k">extern</span>
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
<span class="
|
|
990
|
-
<span class="
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
<span class="
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
<span class="
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
<span class="
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
<span class="
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
<span class="
|
|
1018
|
-
<span class="
|
|
1117
|
+
<div class="highlight">
|
|
1118
|
+
<pre><span></span><span class="c1">// Mode constants</span>
|
|
1119
|
+
<span class="k">extern</span><span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">ApexModeCommonmark</span><span class="p">;</span>
|
|
1120
|
+
<span class="k">extern</span><span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">ApexModeGFM</span><span class="p">;</span>
|
|
1121
|
+
<span class="k">extern</span><span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">ApexModeMultiMarkdown</span><span class="p">;</span>
|
|
1122
|
+
<span class="k">extern</span><span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">ApexModeKramdown</span><span class="p">;</span>
|
|
1123
|
+
<span class="k">extern</span><span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">ApexModeUnified</span><span class="p">;</span>
|
|
1124
|
+
|
|
1125
|
+
<span class="k">@interface</span> <span class="bp">NSString</span> <span class="nl">(Apex)</span>
|
|
1126
|
+
|
|
1127
|
+
<span class="c1">// Basic conversion methods</span>
|
|
1128
|
+
<span class="p">+</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span><span class="p">;</span>
|
|
1129
|
+
<span class="p">+</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span><span class="w"> </span><span class="nf">mode:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span><span class="p">;</span>
|
|
1130
|
+
|
|
1131
|
+
<span class="c1">// Standalone HTML document generation</span>
|
|
1132
|
+
<span class="p">+</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span>
|
|
1133
|
+
<span class="w"> </span><span class="nl">mode</span><span class="p">:(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
|
|
1134
|
+
<span class="w"> </span><span class="nl">standalone</span><span class="p">:(</span><span class="kt">BOOL</span><span class="p">)</span><span class="nv">standalone</span>
|
|
1135
|
+
<span class="w"> </span><span class="nl">stylesheet</span><span class="p">:(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">_Nullable</span><span class="p">)</span><span class="nv">stylesheetPath</span>
|
|
1136
|
+
<span class="w"> </span><span class="nl">title</span><span class="p">:(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">_Nullable</span><span class="p">)</span><span class="nv">title</span><span class="p">;</span>
|
|
1137
|
+
|
|
1138
|
+
<span class="c1">// Pretty-printed HTML output</span>
|
|
1139
|
+
<span class="p">+</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span>
|
|
1140
|
+
<span class="w"> </span><span class="nl">mode</span><span class="p">:(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
|
|
1141
|
+
<span class="w"> </span><span class="nl">pretty</span><span class="p">:(</span><span class="kt">BOOL</span><span class="p">)</span><span class="nv">pretty</span><span class="p">;</span>
|
|
1142
|
+
|
|
1143
|
+
<span class="c1">// Dictionary-based options configuration</span>
|
|
1144
|
+
<span class="p">+</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span>
|
|
1145
|
+
<span class="w"> </span><span class="nl">mode</span><span class="p">:(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
|
|
1146
|
+
<span class="w"> </span><span class="nl">options</span><span class="p">:(</span><span class="bp">NSDictionary</span><span class="o"><</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">id</span><span class="o">></span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">_Nullable</span><span class="p">)</span><span class="nv">options</span><span class="p">;</span>
|
|
1147
|
+
|
|
1148
|
+
<span class="c1">// Swift-friendly convenience method with common options</span>
|
|
1149
|
+
<span class="p">+</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">convertWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span>
|
|
1150
|
+
<span class="w"> </span><span class="nl">mode</span><span class="p">:(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
|
|
1151
|
+
<span class="w"> </span><span class="nl">generateHeaderIDs</span><span class="p">:(</span><span class="kt">BOOL</span><span class="p">)</span><span class="nv">generateHeaderIDs</span>
|
|
1152
|
+
<span class="w"> </span><span class="nl">hardBreaks</span><span class="p">:(</span><span class="kt">BOOL</span><span class="p">)</span><span class="nv">hardBreaks</span>
|
|
1153
|
+
<span class="w"> </span><span class="nl">pretty</span><span class="p">:(</span><span class="kt">BOOL</span><span class="p">)</span><span class="nv">pretty</span><span class="p">;</span>
|
|
1154
|
+
|
|
1155
|
+
<span class="c1">// Instance methods for convenient usage</span>
|
|
1156
|
+
<span class="p">-</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">apexHTML</span><span class="p">;</span>
|
|
1157
|
+
<span class="p">-</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">apexHTMLWithMode:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span><span class="p">;</span>
|
|
1158
|
+
|
|
1159
|
+
<span class="c1">// Structured table of contents (flat outline entries)</span>
|
|
1160
|
+
<span class="p">+</span> <span class="p">(</span><span class="bp">NSArray</span><span class="o"><</span><span class="bp">NSDictionary</span><span class="o"><</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">id</span><span class="o">></span><span class="w"> </span><span class="o">*></span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">tableOfContentsWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span><span class="p">;</span>
|
|
1161
|
+
<span class="p">+</span> <span class="p">(</span><span class="bp">NSArray</span><span class="o"><</span><span class="bp">NSDictionary</span><span class="o"><</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">id</span><span class="o">></span><span class="w"> </span><span class="o">*></span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">tableOfContentsWithApex:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span>
|
|
1162
|
+
<span class="w"> </span><span class="nl">mode</span><span class="p">:(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
|
|
1163
|
+
<span class="w"> </span><span class="nl">options</span><span class="p">:(</span><span class="bp">NSDictionary</span><span class="o"><</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">id</span><span class="o">></span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">_Nullable</span><span class="p">)</span><span class="nv">options</span><span class="p">;</span>
|
|
1164
|
+
<span class="p">-</span> <span class="p">(</span><span class="bp">NSArray</span><span class="o"><</span><span class="bp">NSDictionary</span><span class="o"><</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">id</span><span class="o">></span><span class="w"> </span><span class="o">*></span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">apexTableOfContents</span><span class="p">;</span>
|
|
1165
|
+
<span class="p">-</span> <span class="p">(</span><span class="bp">NSArray</span><span class="o"><</span><span class="bp">NSDictionary</span><span class="o"><</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">id</span><span class="o">></span><span class="w"> </span><span class="o">*></span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">apexTableOfContentsWithMode:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">mode</span>
|
|
1166
|
+
<span class="w"> </span><span class="nl">options</span><span class="p">:(</span><span class="bp">NSDictionary</span><span class="o"><</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">id</span><span class="o">></span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">_Nullable</span><span class="p">)</span><span class="nv">options</span><span class="p">;</span>
|
|
1019
1167
|
|
|
1020
1168
|
<span class="k">@end</span>
|
|
1021
|
-
</
|
|
1169
|
+
</pre>
|
|
1170
|
+
</div>
|
|
1022
1171
|
|
|
1023
1172
|
<p>
|
|
1024
|
-
<strong>
|
|
1173
|
+
<strong>Parameters:</strong>
|
|
1025
1174
|
</p>
|
|
1026
1175
|
|
|
1027
1176
|
<ul>
|
|
@@ -1061,15 +1210,142 @@ make
|
|
|
1061
1210
|
</ul>
|
|
1062
1211
|
|
|
1063
1212
|
<p>
|
|
1064
|
-
<strong>
|
|
1213
|
+
<strong>Returns:</strong> HTML string (autoreleased)
|
|
1214
|
+
</p>
|
|
1215
|
+
|
|
1216
|
+
<p>
|
|
1217
|
+
<strong>Note:</strong> Using the <code>ApexMode*</code> constants is recommended to avoid typos and provides autocomplete support in Xcode. String literals are still supported for backward compatibility.
|
|
1218
|
+
</p>
|
|
1219
|
+
|
|
1220
|
+
<h3 id="table-of-contents-outline-data">
|
|
1221
|
+
Table of Contents (outline data)
|
|
1222
|
+
</h3>
|
|
1223
|
+
|
|
1224
|
+
<p>
|
|
1225
|
+
For collapsible section UIs, use the structured TOC helpers instead of parsing HTML. Each entry is a dictionary:
|
|
1226
|
+
</p>
|
|
1227
|
+
|
|
1228
|
+
<table>
|
|
1229
|
+
|
|
1230
|
+
<thead>
|
|
1231
|
+
|
|
1232
|
+
<tr>
|
|
1233
|
+
|
|
1234
|
+
<th>
|
|
1235
|
+
Key
|
|
1236
|
+
</th>
|
|
1237
|
+
|
|
1238
|
+
<th>
|
|
1239
|
+
Type
|
|
1240
|
+
</th>
|
|
1241
|
+
|
|
1242
|
+
<th>
|
|
1243
|
+
Meaning
|
|
1244
|
+
</th>
|
|
1245
|
+
|
|
1246
|
+
</tr>
|
|
1247
|
+
|
|
1248
|
+
</thead>
|
|
1249
|
+
|
|
1250
|
+
<tbody>
|
|
1251
|
+
|
|
1252
|
+
<tr>
|
|
1253
|
+
|
|
1254
|
+
<td>
|
|
1255
|
+
<code>level</code>
|
|
1256
|
+
</td>
|
|
1257
|
+
|
|
1258
|
+
<td>
|
|
1259
|
+
<code>NSNumber</code>
|
|
1260
|
+
</td>
|
|
1261
|
+
|
|
1262
|
+
<td>
|
|
1263
|
+
Heading level 1–6
|
|
1264
|
+
</td>
|
|
1265
|
+
|
|
1266
|
+
</tr>
|
|
1267
|
+
<tr>
|
|
1268
|
+
|
|
1269
|
+
<td>
|
|
1270
|
+
<code>text</code>
|
|
1271
|
+
</td>
|
|
1272
|
+
|
|
1273
|
+
<td>
|
|
1274
|
+
<code>NSString</code>
|
|
1275
|
+
</td>
|
|
1276
|
+
|
|
1277
|
+
<td>
|
|
1278
|
+
Display title
|
|
1279
|
+
</td>
|
|
1280
|
+
|
|
1281
|
+
</tr>
|
|
1282
|
+
<tr>
|
|
1283
|
+
|
|
1284
|
+
<td>
|
|
1285
|
+
<code>id</code>
|
|
1286
|
+
</td>
|
|
1287
|
+
|
|
1288
|
+
<td>
|
|
1289
|
+
<code>NSString</code>
|
|
1290
|
+
</td>
|
|
1291
|
+
|
|
1292
|
+
<td>
|
|
1293
|
+
Fragment id (same rules as <code>--id-format</code> / manual IDs)
|
|
1294
|
+
</td>
|
|
1295
|
+
|
|
1296
|
+
</tr>
|
|
1297
|
+
</tbody>
|
|
1298
|
+
|
|
1299
|
+
</table>
|
|
1300
|
+
|
|
1301
|
+
<p>
|
|
1302
|
+
Optional <code>options</code> keys for TOC extraction:
|
|
1065
1303
|
</p>
|
|
1066
1304
|
|
|
1305
|
+
<ul>
|
|
1306
|
+
|
|
1307
|
+
<li>
|
|
1308
|
+
<code>idFormat</code> — <code>@"gfm"</code>, <code>@"mmd"</code>, or <code>@"kramdown"</code>
|
|
1309
|
+
</li>
|
|
1310
|
+
|
|
1311
|
+
<li>
|
|
1312
|
+
<code>tocMinMax</code> — <code>@"2,4"</code> or <code>@[@2, @4]</code> (default depth is 1–3)
|
|
1313
|
+
</li>
|
|
1314
|
+
|
|
1315
|
+
</ul>
|
|
1316
|
+
|
|
1317
|
+
<div class="highlight">
|
|
1318
|
+
<pre><span></span><span class="bp">NSArray</span><span class="w"> </span><span class="o">*</span><span class="n">entries</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">tableOfContentsWithApex</span><span class="o">:</span><span class="n">markdown</span>
|
|
1319
|
+
<span class="w"> </span><span class="nl">mode</span><span class="p">:</span><span class="n">ApexModeUnified</span>
|
|
1320
|
+
<span class="w"> </span><span class="nl">options</span><span class="p">:</span><span class="l">@{</span><span class="w"> </span><span class="s">@"tocMinMax"</span><span class="o">:</span><span class="w"> </span><span class="s">@"1,4"</span><span class="w"> </span><span class="l">}</span><span class="p">];</span>
|
|
1321
|
+
|
|
1322
|
+
<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="bp">NSDictionary</span><span class="w"> </span><span class="o">*</span><span class="n">entry</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">entries</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
|
1323
|
+
<span class="w"> </span><span class="n">NSLog</span><span class="p">(</span><span class="s">@"h%@ %@ (#%@)"</span><span class="p">,</span><span class="w"> </span><span class="n">entry</span><span class="p">[</span><span class="s">@"level"</span><span class="p">],</span><span class="w"> </span><span class="n">entry</span><span class="p">[</span><span class="s">@"text"</span><span class="p">],</span><span class="w"> </span><span class="n">entry</span><span class="p">[</span><span class="s">@"id"</span><span class="p">]);</span>
|
|
1324
|
+
<span class="p">}</span>
|
|
1325
|
+
</pre>
|
|
1326
|
+
</div>
|
|
1327
|
+
|
|
1328
|
+
<div class="highlight">
|
|
1329
|
+
<pre><span></span><span class="kd">let</span><span class="w"> </span><span class="nv">entries</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexTableOfContents</span><span class="p">()</span>
|
|
1330
|
+
<span class="c1">// or:</span>
|
|
1331
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">entries</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="bp">NSString</span><span class="p">.</span><span class="n">tableOfContents</span><span class="p">(</span>
|
|
1332
|
+
<span class="w"> </span><span class="n">withApex</span><span class="p">:</span><span class="w"> </span><span class="n">markdown</span><span class="p">,</span>
|
|
1333
|
+
<span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="n">ApexModeUnified</span><span class="p">,</span>
|
|
1334
|
+
<span class="w"> </span><span class="n">options</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s">"tocMinMax"</span><span class="p">:</span><span class="w"> </span><span class="s">"1,4"</span><span class="p">,</span><span class="w"> </span><span class="s">"idFormat"</span><span class="p">:</span><span class="w"> </span><span class="s">"gfm"</span><span class="p">]</span>
|
|
1335
|
+
<span class="p">)</span>
|
|
1336
|
+
|
|
1337
|
+
<span class="c1">// Build nested outline rows from flat levels:</span>
|
|
1338
|
+
<span class="c1">// - deeper level => child of previous open section</span>
|
|
1339
|
+
<span class="c1">// - shallower/equal level => close sections until the parent fits</span>
|
|
1340
|
+
</pre>
|
|
1341
|
+
</div>
|
|
1342
|
+
|
|
1067
1343
|
<p>
|
|
1068
|
-
|
|
1344
|
+
Headings marked <code>{:.no_toc}</code> are omitted. See <a href="C-API#structured-toc-entries">C API</a> for the underlying <code>apex_markdown_to_toc_entries</code> function and <a href="Command-Line-Options.html">Command Line Options</a> for <code>-t toc</code>.
|
|
1069
1345
|
</p>
|
|
1070
1346
|
|
|
1071
1347
|
<h3 id="convenience-methods">
|
|
1072
|
-
Convenience
|
|
1348
|
+
Convenience Methods
|
|
1073
1349
|
</h3>
|
|
1074
1350
|
|
|
1075
1351
|
<p>
|
|
@@ -1077,70 +1353,76 @@ make
|
|
|
1077
1353
|
</p>
|
|
1078
1354
|
|
|
1079
1355
|
<h4 id="standalone-html-documents">
|
|
1080
|
-
Standalone HTML
|
|
1356
|
+
Standalone HTML Documents
|
|
1081
1357
|
</h4>
|
|
1082
1358
|
|
|
1083
1359
|
<p>
|
|
1084
1360
|
Generate complete HTML5 documents with stylesheet and title:
|
|
1085
1361
|
</p>
|
|
1086
1362
|
|
|
1087
|
-
<
|
|
1088
|
-
<
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
<span class="
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
</
|
|
1363
|
+
<div class="highlight">
|
|
1364
|
+
<pre><span></span><span class="c1">// Generate standalone HTML document</span>
|
|
1365
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdown</span>
|
|
1366
|
+
<span class="w"> </span><span class="nl">mode</span><span class="p">:</span><span class="n">ApexModeUnified</span>
|
|
1367
|
+
<span class="w"> </span><span class="nl">standalone</span><span class="p">:</span><span class="nb">YES</span>
|
|
1368
|
+
<span class="w"> </span><span class="nl">stylesheet</span><span class="p">:</span><span class="s">@"style.css"</span>
|
|
1369
|
+
<span class="w"> </span><span class="nl">title</span><span class="p">:</span><span class="s">@"My Document"</span><span class="p">];</span>
|
|
1370
|
+
|
|
1371
|
+
<span class="c1">// Without stylesheet or title</span>
|
|
1372
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">html2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdown</span>
|
|
1373
|
+
<span class="w"> </span><span class="nl">mode</span><span class="p">:</span><span class="n">ApexModeGFM</span>
|
|
1374
|
+
<span class="w"> </span><span class="nl">standalone</span><span class="p">:</span><span class="nb">YES</span>
|
|
1375
|
+
<span class="w"> </span><span class="nl">stylesheet</span><span class="p">:</span><span class="nb">nil</span>
|
|
1376
|
+
<span class="w"> </span><span class="nl">title</span><span class="p">:</span><span class="nb">nil</span><span class="p">];</span>
|
|
1377
|
+
</pre>
|
|
1378
|
+
</div>
|
|
1101
1379
|
|
|
1102
|
-
<h4 id="pretty-printed-html">
|
|
1103
|
-
Pretty-Printed
|
|
1380
|
+
<h4 Key id="pretty-printed-html">
|
|
1381
|
+
Pretty-Printed HTML
|
|
1104
1382
|
</h4>
|
|
1105
1383
|
|
|
1106
1384
|
<p>
|
|
1107
1385
|
Generate formatted HTML with indentation:
|
|
1108
1386
|
</p>
|
|
1109
1387
|
|
|
1110
|
-
<
|
|
1111
|
-
<
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
</
|
|
1388
|
+
<div class="highlight">
|
|
1389
|
+
<pre><span></span><span class="c1">// Pretty-print HTML output</span>
|
|
1390
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdown</span>
|
|
1391
|
+
<span class="w"> </span><span class="nl">mode</span><span class="p">:</span><span class="n">ApexModeUnified</span>
|
|
1392
|
+
<span class="w"> </span><span class="nl">pretty</span><span class="p">:</span><span class="nb">YES</span><span class="p">];</span>
|
|
1393
|
+
</pre>
|
|
1394
|
+
</div>
|
|
1115
1395
|
|
|
1116
|
-
<h4 id="dictionary-based-options">
|
|
1117
|
-
Dictionary-Based
|
|
1396
|
+
<h4 Type id="dictionary-based-options">
|
|
1397
|
+
Dictionary-Based Options
|
|
1118
1398
|
</h4>
|
|
1119
1399
|
|
|
1120
1400
|
<p>
|
|
1121
1401
|
Configure multiple options at once using a dictionary:
|
|
1122
1402
|
</p>
|
|
1123
1403
|
|
|
1124
|
-
<
|
|
1125
|
-
<span
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
<span class="
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
</
|
|
1404
|
+
<div class="highlight">
|
|
1405
|
+
<pre><span></span><span class="c1">// Configure multiple options</span>
|
|
1406
|
+
<span class="bp">NSDictionary</span><span class="w"> </span><span class="o">*</span><span class="n">options</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="l">@{</span>
|
|
1407
|
+
<span class="w"> </span><span class="s">@"pretty"</span><span class="o">:</span><span class="w"> </span><span class="m">@YES</span><span class="p">,</span>
|
|
1408
|
+
<span class="w"> </span><span class="s">@"standalone"</span><span class="o">:</span><span class="w"> </span><span class="m">@YES</span><span class="p">,</span>
|
|
1409
|
+
<span class="w"> </span><span class="s">@"stylesheet"</span><span class="o">:</span><span class="w"> </span><span class="s">@"style.css"</span><span class="p">,</span>
|
|
1410
|
+
<span class="w"> </span><span class="s">@"title"</span><span class="o">:</span><span class="w"> </span><span class="s">@"My Document"</span><span class="p">,</span>
|
|
1411
|
+
<span class="w"> </span><span class="s">@"hardBreaks"</span><span class="o">:</span><span class="w"> </span><span class="m">@YES</span><span class="p">,</span>
|
|
1412
|
+
<span class="w"> </span><span class="s">@"generateHeaderIDs"</span><span class="o">:</span><span class="w"> </span><span class="m">@YES</span><span class="p">,</span>
|
|
1413
|
+
<span class="w"> </span><span class="s">@"headerAnchors"</span><span class="o">:</span><span class="w"> </span><span class="m">@NO</span><span class="p">,</span>
|
|
1414
|
+
<span class="w"> </span><span class="s">@"obfuscateEmails"</span><span class="o">:</span><span class="w"> </span><span class="m">@YES</span><span class="p">,</span>
|
|
1415
|
+
<span class="w"> </span><span class="s">@"embedImages"</span><span class="o">:</span><span class="w"> </span><span class="m">@NO</span>
|
|
1416
|
+
<span class="l">}</span><span class="p">;</span>
|
|
1417
|
+
|
|
1418
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdown</span>
|
|
1419
|
+
<span class="w"> </span><span class="nl">mode</span><span class="p">:</span><span class="n">ApexModeUnified</span>
|
|
1420
|
+
<span class="w"> </span><span class="nl">options</span><span class="p">:</span><span class="n">options</span><span class="p">];</span>
|
|
1421
|
+
</pre>
|
|
1422
|
+
</div>
|
|
1141
1423
|
|
|
1142
1424
|
<p>
|
|
1143
|
-
<strong>
|
|
1425
|
+
<strong>Supported dictionary keys:</strong>
|
|
1144
1426
|
</p>
|
|
1145
1427
|
|
|
1146
1428
|
<ul>
|
|
@@ -1185,124 +1467,138 @@ make
|
|
|
1185
1467
|
<code>@"embedImages"</code> - NSNumber (BOOL): Embed local images as base64 data URLs
|
|
1186
1468
|
</li>
|
|
1187
1469
|
|
|
1470
|
+
<li>
|
|
1471
|
+
<code>@"enablePlugins"</code> - NSNumber (BOOL): Enable external plugin processing during conversion
|
|
1472
|
+
</li>
|
|
1473
|
+
|
|
1188
1474
|
</ul>
|
|
1189
1475
|
|
|
1190
|
-
<h4 id="swift-friendly-convenience-method">
|
|
1191
|
-
Swift-Friendly Convenience
|
|
1476
|
+
<h4 Meaning id="swift-friendly-convenience-method">
|
|
1477
|
+
Swift-Friendly Convenience Method
|
|
1192
1478
|
</h4>
|
|
1193
1479
|
|
|
1194
1480
|
<p>
|
|
1195
1481
|
Combine common options in a single method call (ideal for Swift):
|
|
1196
1482
|
</p>
|
|
1197
1483
|
|
|
1198
|
-
<
|
|
1199
|
-
<
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
</
|
|
1484
|
+
<div class="highlight">
|
|
1485
|
+
<pre><span></span><span class="c1">// Combine common options</span>
|
|
1486
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdown</span>
|
|
1487
|
+
<span class="w"> </span><span class="nl">mode</span><span class="p">:</span><span class="n">ApexModeUnified</span>
|
|
1488
|
+
<span class="w"> </span><span class="nl">generateHeaderIDs</span><span class="p">:</span><span class="nb">YES</span>
|
|
1489
|
+
<span class="w"> </span><span class="nl">hardBreaks</span><span class="p">:</span><span class="nb">YES</span>
|
|
1490
|
+
<span class="w"> </span><span class="nl">pretty</span><span class="p">:</span><span class="nb">YES</span><span class="p">];</span>
|
|
1491
|
+
</pre>
|
|
1492
|
+
</div>
|
|
1205
1493
|
|
|
1206
1494
|
<h4 id="instance-methods">
|
|
1207
|
-
Instance
|
|
1495
|
+
Instance Methods
|
|
1208
1496
|
</h4>
|
|
1209
1497
|
|
|
1210
1498
|
<p>
|
|
1211
1499
|
Use instance methods for more natural, fluent syntax:
|
|
1212
1500
|
</p>
|
|
1213
1501
|
|
|
1214
|
-
<
|
|
1215
|
-
<span
|
|
1216
|
-
<span class="
|
|
1502
|
+
<div class="highlight">
|
|
1503
|
+
<pre><span></span><span class="c1">// Instance method with default unified mode</span>
|
|
1504
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">markdown</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">@"# Hello World"</span><span class="p">;</span>
|
|
1505
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">markdown</span><span class="w"> </span><span class="n">apexHTML</span><span class="p">];</span>
|
|
1217
1506
|
|
|
1218
|
-
|
|
1219
|
-
<span class="
|
|
1220
|
-
</
|
|
1507
|
+
<span class="c1">// Instance method with specific mode</span>
|
|
1508
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">html2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">markdown</span><span class="w"> </span><span class="n">apexHTMLWithMode</span><span class="o">:</span><span class="n">ApexModeGFM</span><span class="p">];</span>
|
|
1509
|
+
</pre>
|
|
1510
|
+
</div>
|
|
1221
1511
|
|
|
1222
|
-
<h2 id="mode-constants">
|
|
1223
|
-
Mode
|
|
1512
|
+
<h2 `level` id="mode-constants">
|
|
1513
|
+
Mode Constants
|
|
1224
1514
|
</h2>
|
|
1225
1515
|
|
|
1226
1516
|
<p>
|
|
1227
1517
|
Apex provides NSString constants for processor modes to avoid ambiguity and typos:
|
|
1228
1518
|
</p>
|
|
1229
1519
|
|
|
1230
|
-
<
|
|
1231
|
-
<span
|
|
1232
|
-
<span class="n">
|
|
1233
|
-
<span class="n">
|
|
1234
|
-
<span class="n">
|
|
1235
|
-
<span class="n">
|
|
1236
|
-
</
|
|
1520
|
+
<div class="highlight">
|
|
1521
|
+
<pre><span></span><span class="c1">// Available constants</span>
|
|
1522
|
+
<span class="n">ApexModeCommonmark</span><span class="w"> </span><span class="c1">// @"commonmark"</span>
|
|
1523
|
+
<span class="n">ApexModeGFM</span><span class="w"> </span><span class="c1">// @"gfm"</span>
|
|
1524
|
+
<span class="n">ApexModeMultiMarkdown</span><span class="w"> </span><span class="c1">// @"multimarkdown"</span>
|
|
1525
|
+
<span class="n">ApexModeKramdown</span><span class="w"> </span><span class="c1">// @"kramdown"</span>
|
|
1526
|
+
<span class="n">ApexModeUnified</span><span class="w"> </span><span class="c1">// @"unified"</span>
|
|
1527
|
+
</pre>
|
|
1528
|
+
</div>
|
|
1237
1529
|
|
|
1238
1530
|
<p>
|
|
1239
|
-
<strong>
|
|
1531
|
+
<strong>Benefits:</strong>
|
|
1240
1532
|
</p>
|
|
1241
1533
|
|
|
1242
1534
|
<ul>
|
|
1243
1535
|
|
|
1244
1536
|
<li>
|
|
1245
|
-
<strong>
|
|
1537
|
+
<strong>Type safety</strong>: Xcode autocomplete suggests available modes
|
|
1246
1538
|
</li>
|
|
1247
1539
|
|
|
1248
1540
|
<li>
|
|
1249
|
-
<strong>
|
|
1541
|
+
<strong>No typos</strong>: Compile-time checking prevents invalid mode strings
|
|
1250
1542
|
</li>
|
|
1251
1543
|
|
|
1252
1544
|
<li>
|
|
1253
|
-
<strong>
|
|
1545
|
+
<strong>Self-documenting</strong>: Constants make code more readable
|
|
1254
1546
|
</li>
|
|
1255
1547
|
|
|
1256
1548
|
<li>
|
|
1257
|
-
<strong>
|
|
1549
|
+
<strong>Refactoring</strong>: Easy to find all usages if mode names change
|
|
1258
1550
|
</li>
|
|
1259
1551
|
|
|
1260
1552
|
</ul>
|
|
1261
1553
|
|
|
1262
1554
|
<p>
|
|
1263
|
-
<strong>
|
|
1555
|
+
<strong>Example:</strong>
|
|
1264
1556
|
</p>
|
|
1265
1557
|
|
|
1266
|
-
<
|
|
1267
|
-
<
|
|
1558
|
+
<div class="highlight">
|
|
1559
|
+
<pre><span></span><span class="c1">// Good: Using constants</span>
|
|
1560
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdown</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="n">ApexModeMultiMarkdown</span><span class="p">];</span>
|
|
1268
1561
|
|
|
1269
|
-
|
|
1270
|
-
<span class="
|
|
1271
|
-
</
|
|
1562
|
+
<span class="c1">// Also works: String literals (for backward compatibility)</span>
|
|
1563
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">html2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">markdown</span><span class="w"> </span><span class="n">mode</span><span class="o">:</span><span class="s">@"multimarkdown"</span><span class="p">];</span>
|
|
1564
|
+
</pre>
|
|
1565
|
+
</div>
|
|
1272
1566
|
|
|
1273
|
-
<h2 id="direct-c-api-usage">
|
|
1274
|
-
Direct C
|
|
1567
|
+
<h2 `NSNumber` id="direct-c-api-usage">
|
|
1568
|
+
Direct C API Usage
|
|
1275
1569
|
</h2>
|
|
1276
1570
|
|
|
1277
1571
|
<p>
|
|
1278
1572
|
For more control, use the C API directly:
|
|
1279
1573
|
</p>
|
|
1280
1574
|
|
|
1281
|
-
<
|
|
1282
|
-
</span>
|
|
1283
|
-
<span class="k">-</span> <span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nf">convertMarkdown</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">markdown</span> <span class="p">{</span>
|
|
1284
|
-
<span class="n">apex_options</span> <span class="n">opts</span> <span class="o">=</span> <span class="n">apex_options_default</span><span class="p">();</span>
|
|
1285
|
-
<span class="n">opts</span><span class="p">.</span><span class="n">pretty</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
|
|
1575
|
+
<div class="highlight">
|
|
1576
|
+
<pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><Apex/apex.h></span>
|
|
1286
1577
|
|
|
1287
|
-
|
|
1288
|
-
|
|
1578
|
+
<span class="p">-</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">convertMarkdown:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">markdown</span><span class="w"> </span><span class="p">{</span>
|
|
1579
|
+
<span class="w"> </span><span class="n">apex_options</span><span class="w"> </span><span class="n">opts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_options_default</span><span class="p">();</span>
|
|
1580
|
+
<span class="w"> </span><span class="n">opts</span><span class="p">.</span><span class="n">pretty</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span>
|
|
1289
1581
|
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
<span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
|
|
1293
|
-
<span class="k">return</span> <span class="n">result</span><span class="p">;</span>
|
|
1294
|
-
<span class="p">}</span>
|
|
1582
|
+
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">md</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">markdown</span><span class="w"> </span><span class="n">UTF8String</span><span class="p">];</span>
|
|
1583
|
+
<span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">html</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">md</span><span class="p">,</span><span class="w"> </span><span class="n">strlen</span><span class="p">(</span><span class="n">md</span><span class="p">),</span><span class="w"> </span><span class="o">&</span><span class="n">opts</span><span class="p">);</span>
|
|
1295
1584
|
|
|
1296
|
-
|
|
1585
|
+
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">html</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
|
1586
|
+
<span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">stringWithUTF8String</span><span class="o">:</span><span class="n">html</span><span class="p">];</span>
|
|
1587
|
+
<span class="w"> </span><span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">);</span>
|
|
1588
|
+
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">result</span><span class="p">;</span>
|
|
1589
|
+
<span class="w"> </span><span class="p">}</span>
|
|
1590
|
+
|
|
1591
|
+
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">nil</span><span class="p">;</span>
|
|
1297
1592
|
<span class="p">}</span>
|
|
1298
|
-
</
|
|
1593
|
+
</pre>
|
|
1594
|
+
</div>
|
|
1299
1595
|
|
|
1300
|
-
<h2 id="integration-example">
|
|
1301
|
-
Integration
|
|
1596
|
+
<h2 Heading level 1–6 id="integration-example">
|
|
1597
|
+
Integration Example
|
|
1302
1598
|
</h2>
|
|
1303
1599
|
|
|
1304
1600
|
<h3 id="adding-to-marked">
|
|
1305
|
-
Adding
|
|
1601
|
+
Adding to Marked
|
|
1306
1602
|
</h3>
|
|
1307
1603
|
|
|
1308
1604
|
<p>
|
|
@@ -1310,47 +1606,53 @@ make
|
|
|
1310
1606
|
</p>
|
|
1311
1607
|
|
|
1312
1608
|
<p>
|
|
1313
|
-
<strong>
|
|
1609
|
+
<strong>1. Add to processor selection:</strong>
|
|
1314
1610
|
</p>
|
|
1315
1611
|
|
|
1316
|
-
<
|
|
1317
|
-
<
|
|
1318
|
-
|
|
1319
|
-
<span class="
|
|
1320
|
-
|
|
1612
|
+
<div class="highlight">
|
|
1613
|
+
<pre><span></span><span class="c1">// In MKConductorTransformer.m or similar</span>
|
|
1614
|
+
<span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">([</span><span class="n">processor</span><span class="w"> </span><span class="n">isEqualToString</span><span class="o">:</span><span class="s">@"Apex"</span><span class="p">])</span><span class="w"> </span><span class="p">{</span>
|
|
1615
|
+
<span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithApex</span><span class="o">:</span><span class="n">text</span><span class="p">];</span>
|
|
1616
|
+
<span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">([</span><span class="n">processor</span><span class="w"> </span><span class="n">isEqualToString</span><span class="o">:</span><span class="s">@"MultiMarkdown"</span><span class="p">])</span><span class="w"> </span><span class="p">{</span>
|
|
1617
|
+
<span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSString</span><span class="w"> </span><span class="n">convertWithMultiMarkdown</span><span class="o">:</span><span class="n">text</span><span class="p">];</span>
|
|
1321
1618
|
<span class="p">}</span>
|
|
1322
|
-
</
|
|
1619
|
+
</pre>
|
|
1620
|
+
</div>
|
|
1323
1621
|
|
|
1324
1622
|
<p>
|
|
1325
|
-
<strong>
|
|
1623
|
+
<strong>2. Add to preferences:</strong>
|
|
1326
1624
|
</p>
|
|
1327
1625
|
|
|
1328
|
-
<
|
|
1329
|
-
<span
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
<span class="
|
|
1336
|
-
</
|
|
1626
|
+
<div class="highlight">
|
|
1627
|
+
<pre><span></span><span class="c1">// In processor dropdown</span>
|
|
1628
|
+
<span class="bp">NSArray</span><span class="w"> </span><span class="o">*</span><span class="n">processors</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="l">@[</span>
|
|
1629
|
+
<span class="w"> </span><span class="s">@"MultiMarkdown"</span><span class="p">,</span>
|
|
1630
|
+
<span class="w"> </span><span class="s">@"Discount (GFM)"</span><span class="p">,</span>
|
|
1631
|
+
<span class="w"> </span><span class="s">@"CommonMark"</span><span class="p">,</span>
|
|
1632
|
+
<span class="w"> </span><span class="s">@"Kramdown"</span><span class="p">,</span>
|
|
1633
|
+
<span class="w"> </span><span class="s">@"Apex"</span><span class="w"> </span><span class="c1">// Add this</span>
|
|
1634
|
+
<span class="l">]</span><span class="p">;</span>
|
|
1635
|
+
</pre>
|
|
1636
|
+
</div>
|
|
1337
1637
|
|
|
1338
1638
|
<p>
|
|
1339
|
-
<strong>
|
|
1639
|
+
<strong>3. Handle custom processor rules:</strong>
|
|
1340
1640
|
</p>
|
|
1341
1641
|
|
|
1342
|
-
<
|
|
1343
|
-
<
|
|
1344
|
-
|
|
1642
|
+
<div class="highlight">
|
|
1643
|
+
<pre><span></span><span class="c1">// In custom processor handling</span>
|
|
1644
|
+
<span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">([</span><span class="n">outputString</span><span class="p">.</span><span class="n">uppercaseString</span><span class="w"> </span><span class="n">isEqualToString</span><span class="o">:</span><span class="s">@"APEX"</span><span class="p">])</span><span class="w"> </span><span class="p">{</span>
|
|
1645
|
+
<span class="w"> </span><span class="p">[</span><span class="n">defaults</span><span class="w"> </span><span class="n">setValue</span><span class="o">:</span><span class="s">@"Apex"</span><span class="w"> </span><span class="n">forKey</span><span class="o">:</span><span class="s">@"defaultProcessor"</span><span class="p">];</span>
|
|
1345
1646
|
<span class="p">}</span>
|
|
1346
|
-
</
|
|
1647
|
+
</pre>
|
|
1648
|
+
</div>
|
|
1347
1649
|
|
|
1348
1650
|
<h2 id="build-settings">
|
|
1349
|
-
Build
|
|
1651
|
+
Build Settings
|
|
1350
1652
|
</h2>
|
|
1351
1653
|
|
|
1352
1654
|
<h3 id="header-search-paths">
|
|
1353
|
-
Header Search
|
|
1655
|
+
Header Search Paths
|
|
1354
1656
|
</h3>
|
|
1355
1657
|
|
|
1356
1658
|
<p>
|
|
@@ -1361,7 +1663,7 @@ make
|
|
|
1361
1663
|
</code></pre>
|
|
1362
1664
|
|
|
1363
1665
|
<h3 id="framework-search-paths">
|
|
1364
|
-
Framework Search
|
|
1666
|
+
Framework Search Paths
|
|
1365
1667
|
</h3>
|
|
1366
1668
|
|
|
1367
1669
|
<p>
|
|
@@ -1372,7 +1674,7 @@ make
|
|
|
1372
1674
|
</code></pre>
|
|
1373
1675
|
|
|
1374
1676
|
<h3 id="other-linker-flags">
|
|
1375
|
-
Other Linker
|
|
1677
|
+
Other Linker Flags
|
|
1376
1678
|
</h3>
|
|
1377
1679
|
|
|
1378
1680
|
<p>
|
|
@@ -1382,8 +1684,8 @@ make
|
|
|
1382
1684
|
<pre><code class="highlight ">-L$(SRCROOT)/apex/build -lapex
|
|
1383
1685
|
</code></pre>
|
|
1384
1686
|
|
|
1385
|
-
<h3 id="swift-api-support">
|
|
1386
|
-
Swift API
|
|
1687
|
+
<h3 `text` id="swift-api-support">
|
|
1688
|
+
Swift API Support
|
|
1387
1689
|
</h3>
|
|
1388
1690
|
|
|
1389
1691
|
<p>
|
|
@@ -1393,15 +1695,15 @@ make
|
|
|
1393
1695
|
<ol>
|
|
1394
1696
|
|
|
1395
1697
|
<li>
|
|
1396
|
-
<strong>
|
|
1698
|
+
<strong>If using the framework:</strong> The Swift file is automatically included when you link <code>Apex.framework</code>
|
|
1397
1699
|
</li>
|
|
1398
1700
|
|
|
1399
1701
|
<li>
|
|
1400
|
-
<strong>
|
|
1702
|
+
<strong>If using source files directly:</strong> Add <code>apex/objc/Apex.swift</code> to your Xcode project
|
|
1401
1703
|
</li>
|
|
1402
1704
|
|
|
1403
1705
|
<li>
|
|
1404
|
-
<strong>
|
|
1706
|
+
<strong>Swift/Objective-C Bridging:</strong> Xcode will automatically create a bridging header if needed
|
|
1405
1707
|
</li>
|
|
1406
1708
|
|
|
1407
1709
|
</ol>
|
|
@@ -1430,7 +1732,7 @@ make
|
|
|
1430
1732
|
|
|
1431
1733
|
</ul>
|
|
1432
1734
|
|
|
1433
|
-
<h2 id="swift-integration">
|
|
1735
|
+
<h2 `NSString` id="swift-integration">
|
|
1434
1736
|
Swift Integration
|
|
1435
1737
|
</h2>
|
|
1436
1738
|
|
|
@@ -1438,170 +1740,313 @@ make
|
|
|
1438
1740
|
Apex provides an idiomatic Swift API wrapper (<code>Apex.swift</code>) that offers type-safe enums and structs over the Objective-C API.
|
|
1439
1741
|
</p>
|
|
1440
1742
|
|
|
1441
|
-
<h3 id="idiomatic-swift-api-recommended">
|
|
1442
|
-
Idiomatic Swift API
|
|
1743
|
+
<h3 Display title id="idiomatic-swift-api-recommended">
|
|
1744
|
+
Idiomatic Swift API (Recommended)
|
|
1443
1745
|
</h3>
|
|
1444
1746
|
|
|
1445
|
-
<
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
<span class="
|
|
1450
|
-
<span class="
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
<span class="
|
|
1454
|
-
<span class="
|
|
1455
|
-
<span class="
|
|
1456
|
-
<span class="
|
|
1457
|
-
<span class="
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
<span class="
|
|
1461
|
-
<span class="
|
|
1462
|
-
<span class="n">options</span><span class="
|
|
1463
|
-
<span class="n">options</span><span class="
|
|
1464
|
-
<span class="n">options</span><span class="
|
|
1465
|
-
<span class="n">options</span><span class="
|
|
1466
|
-
<span class="n">options</span><span class="
|
|
1467
|
-
<span class="n">options</span><span class="
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
<span class="
|
|
1473
|
-
<span class="
|
|
1474
|
-
<span class="
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
<span class="
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1747
|
+
<div class="highlight">
|
|
1748
|
+
<pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Foundation</span>
|
|
1749
|
+
<span class="c1">// Import Apex.swift (automatically available when framework is linked)</span>
|
|
1750
|
+
|
|
1751
|
+
<span class="c1">// Basic conversion with default unified mode</span>
|
|
1752
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">markdown</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s">"# Hello World"</span>
|
|
1753
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">html</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">()</span>
|
|
1754
|
+
|
|
1755
|
+
<span class="c1">// With type-safe mode enum</span>
|
|
1756
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">gfmHtml</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">gfm</span><span class="p">)</span>
|
|
1757
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">mmdHtml</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">multimarkdown</span><span class="p">)</span>
|
|
1758
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">kramdownHtml</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">kramdown</span><span class="p">)</span>
|
|
1759
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">commonmarkHtml</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">commonmark</span><span class="p">)</span>
|
|
1760
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">unifiedHtml</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">)</span>
|
|
1761
|
+
|
|
1762
|
+
<span class="c1">// Using ApexOptions struct (type-safe)</span>
|
|
1763
|
+
<span class="kd">var</span><span class="w"> </span><span class="nv">options</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">ApexOptions</span><span class="p">()</span>
|
|
1764
|
+
<span class="n">options</span><span class="p">.</span><span class="n">pretty</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
|
|
1765
|
+
<span class="n">options</span><span class="p">.</span><span class="n">standalone</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
|
|
1766
|
+
<span class="n">options</span><span class="p">.</span><span class="n">stylesheet</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s">"style.css"</span>
|
|
1767
|
+
<span class="n">options</span><span class="p">.</span><span class="n">title</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s">"My Document"</span>
|
|
1768
|
+
<span class="n">options</span><span class="p">.</span><span class="n">generateHeaderIDs</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
|
|
1769
|
+
<span class="n">options</span><span class="p">.</span><span class="n">hardBreaks</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
|
|
1770
|
+
<span class="n">options</span><span class="p">.</span><span class="n">obfuscateEmails</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
|
|
1771
|
+
|
|
1772
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">configuredHtml</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">,</span><span class="w"> </span><span class="n">options</span><span class="p">:</span><span class="w"> </span><span class="n">options</span><span class="p">)</span>
|
|
1773
|
+
|
|
1774
|
+
<span class="c1">// Or use static Apex converter</span>
|
|
1775
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">html2</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Apex</span><span class="p">.</span><span class="n">convert</span><span class="p">(</span><span class="n">markdown</span><span class="p">)</span>
|
|
1776
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">html3</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Apex</span><span class="p">.</span><span class="n">convert</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">gfm</span><span class="p">)</span>
|
|
1777
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">html4</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Apex</span><span class="p">.</span><span class="n">convert</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">,</span><span class="w"> </span><span class="n">options</span><span class="p">:</span><span class="w"> </span><span class="n">options</span><span class="p">)</span>
|
|
1778
|
+
|
|
1779
|
+
<span class="c1">// Standalone HTML document</span>
|
|
1780
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">standaloneHtml</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">(</span>
|
|
1781
|
+
<span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">,</span>
|
|
1782
|
+
<span class="w"> </span><span class="n">standalone</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
|
|
1783
|
+
<span class="w"> </span><span class="n">stylesheet</span><span class="p">:</span><span class="w"> </span><span class="s">"style.css"</span><span class="p">,</span>
|
|
1784
|
+
<span class="w"> </span><span class="n">title</span><span class="p">:</span><span class="w"> </span><span class="s">"My Document"</span>
|
|
1482
1785
|
<span class="p">)</span>
|
|
1483
1786
|
|
|
1484
|
-
|
|
1485
|
-
<span class="
|
|
1787
|
+
<span class="c1">// Pretty-printed HTML</span>
|
|
1788
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">prettyHtml</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">(</span><span class="n">pretty</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">)</span>
|
|
1486
1789
|
|
|
1487
|
-
|
|
1488
|
-
<span class="
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1790
|
+
<span class="c1">// Common options combined</span>
|
|
1791
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">commonOptionsHtml</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">(</span>
|
|
1792
|
+
<span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">,</span>
|
|
1793
|
+
<span class="w"> </span><span class="n">generateHeaderIDs</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
|
|
1794
|
+
<span class="w"> </span><span class="n">hardBreaks</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
|
|
1795
|
+
<span class="w"> </span><span class="n">pretty</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span>
|
|
1493
1796
|
<span class="p">)</span>
|
|
1494
|
-
</
|
|
1797
|
+
</pre>
|
|
1798
|
+
</div>
|
|
1495
1799
|
|
|
1496
1800
|
<h3 id="apexmode-enum">
|
|
1497
|
-
ApexMode
|
|
1801
|
+
ApexMode Enum
|
|
1498
1802
|
</h3>
|
|
1499
1803
|
|
|
1500
1804
|
<p>
|
|
1501
1805
|
Type-safe processor mode enum:
|
|
1502
1806
|
</p>
|
|
1503
1807
|
|
|
1504
|
-
<
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1808
|
+
<div class="highlight">
|
|
1809
|
+
<pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="nc">ApexMode</span><span class="p">:</span><span class="w"> </span><span class="nb">String</span><span class="p">,</span><span class="w"> </span><span class="n">CaseIterable</span><span class="w"> </span><span class="p">{</span>
|
|
1810
|
+
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">commonmark</span>
|
|
1811
|
+
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">gfm</span>
|
|
1812
|
+
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">multimarkdown</span>
|
|
1813
|
+
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">kramdown</span>
|
|
1814
|
+
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="n">unified</span>
|
|
1510
1815
|
<span class="p">}</span>
|
|
1511
|
-
</
|
|
1816
|
+
</pre>
|
|
1817
|
+
</div>
|
|
1512
1818
|
|
|
1513
|
-
<h3 id="apexoptions-struct">
|
|
1514
|
-
ApexOptions
|
|
1819
|
+
<h3 `id` id="apexoptions-struct">
|
|
1820
|
+
ApexOptions Struct
|
|
1515
1821
|
</h3>
|
|
1516
1822
|
|
|
1517
1823
|
<p>
|
|
1518
1824
|
Type-safe options configuration:
|
|
1519
1825
|
</p>
|
|
1520
1826
|
|
|
1521
|
-
<
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1827
|
+
<div class="highlight">
|
|
1828
|
+
<pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kd">struct</span><span class="w"> </span><span class="nc">ApexOptions</span><span class="w"> </span><span class="p">{</span>
|
|
1829
|
+
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">pretty</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
|
|
1830
|
+
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">standalone</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
|
|
1831
|
+
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">stylesheet</span><span class="p">:</span><span class="w"> </span><span class="nb">String</span><span class="p">?</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">nil</span>
|
|
1832
|
+
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">title</span><span class="p">:</span><span class="w"> </span><span class="nb">String</span><span class="p">?</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">nil</span>
|
|
1833
|
+
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">hardBreaks</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
|
|
1834
|
+
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">generateHeaderIDs</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
|
|
1835
|
+
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">unsafe</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
|
|
1836
|
+
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">headerAnchors</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
|
|
1837
|
+
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">obfuscateEmails</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
|
|
1838
|
+
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">embedImages</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
|
|
1839
|
+
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">enablePlugins</span><span class="p">:</span><span class="w"> </span><span class="nb">Bool</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span>
|
|
1840
|
+
|
|
1841
|
+
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="p">`</span><span class="k">default</span><span class="p">`</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">ApexOptions</span><span class="p">()</span>
|
|
1534
1842
|
<span class="p">}</span>
|
|
1535
|
-
</
|
|
1843
|
+
</pre>
|
|
1844
|
+
</div>
|
|
1536
1845
|
|
|
1537
1846
|
<p>
|
|
1538
|
-
<strong>
|
|
1847
|
+
<strong>Example usage:</strong>
|
|
1539
1848
|
</p>
|
|
1540
1849
|
|
|
1541
|
-
<
|
|
1542
|
-
<span class="
|
|
1543
|
-
<span class="n">options</span><span class="
|
|
1544
|
-
<span class="
|
|
1545
|
-
</
|
|
1850
|
+
<div class="highlight">
|
|
1851
|
+
<pre><span></span><span class="kd">var</span><span class="w"> </span><span class="nv">options</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">ApexOptions</span><span class="p">.</span><span class="k">default</span>
|
|
1852
|
+
<span class="n">options</span><span class="p">.</span><span class="n">pretty</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
|
|
1853
|
+
<span class="n">options</span><span class="p">.</span><span class="n">generateHeaderIDs</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
|
|
1854
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">html</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">gfm</span><span class="p">,</span><span class="w"> </span><span class="n">options</span><span class="p">:</span><span class="w"> </span><span class="n">options</span><span class="p">)</span>
|
|
1855
|
+
</pre>
|
|
1856
|
+
</div>
|
|
1546
1857
|
|
|
1547
|
-
<h3 id="
|
|
1548
|
-
|
|
1858
|
+
<h3 `NSString` id="apexoptions-vs-apexoptions">
|
|
1859
|
+
ApexOptions vs apex_options
|
|
1860
|
+
</h3>
|
|
1861
|
+
|
|
1862
|
+
<p>
|
|
1863
|
+
Use <code>ApexOptions</code> for most Swift code, and use <code>apex_options</code> only for low-level or plugin-focused use cases.
|
|
1864
|
+
</p>
|
|
1865
|
+
|
|
1866
|
+
<ul>
|
|
1867
|
+
|
|
1868
|
+
<li>
|
|
1869
|
+
<code>ApexOptions</code> is the high-level Swift API and is the recommended default for app code.
|
|
1870
|
+
</li>
|
|
1871
|
+
|
|
1872
|
+
<li>
|
|
1873
|
+
<code>apex_options</code> is the C struct and exposes advanced flags that may not be surfaced in <code>ApexOptions</code>.
|
|
1874
|
+
</li>
|
|
1875
|
+
|
|
1876
|
+
<li>
|
|
1877
|
+
For direct C struct field access in Swift, import both modules:
|
|
1878
|
+
</li>
|
|
1879
|
+
|
|
1880
|
+
</ul>
|
|
1881
|
+
|
|
1882
|
+
<div class="highlight">
|
|
1883
|
+
<pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Apex</span>
|
|
1884
|
+
<span class="kd">import</span><span class="w"> </span><span class="nc">ApexC</span>
|
|
1885
|
+
</pre>
|
|
1886
|
+
</div>
|
|
1887
|
+
|
|
1888
|
+
<p>
|
|
1889
|
+
You can get a default C options struct from the Objective-C bridge:
|
|
1890
|
+
</p>
|
|
1891
|
+
|
|
1892
|
+
<div class="highlight">
|
|
1893
|
+
<pre><span></span><span class="kd">var</span><span class="w"> </span><span class="nv">cOptions</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="bp">NSString</span><span class="p">.</span><span class="n">defaultApexOptions</span><span class="p">()</span>
|
|
1894
|
+
<span class="n">cOptions</span><span class="p">.</span><span class="n">enable_callouts</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
|
|
1895
|
+
<span class="n">cOptions</span><span class="p">.</span><span class="n">enable_plugins</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
|
|
1896
|
+
</pre>
|
|
1897
|
+
</div>
|
|
1898
|
+
|
|
1899
|
+
<p>
|
|
1900
|
+
Use this pattern when integrating plugins or other advanced features that require direct control over C-level options.
|
|
1901
|
+
</p>
|
|
1902
|
+
|
|
1903
|
+
<h3 Fragment id (same rules as `--id-format` / manual IDs) id="objective-c-bridge-alternative">
|
|
1904
|
+
Objective-C Bridge (Alternative)
|
|
1549
1905
|
</h3>
|
|
1550
1906
|
|
|
1551
1907
|
<p>
|
|
1552
1908
|
You can also use the Objective-C API directly from Swift:
|
|
1553
1909
|
</p>
|
|
1554
1910
|
|
|
1555
|
-
<
|
|
1911
|
+
<div class="highlight">
|
|
1912
|
+
<pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Foundation</span>
|
|
1556
1913
|
|
|
1557
|
-
|
|
1558
|
-
<span class="
|
|
1914
|
+
<span class="c1">// Use Objective-C wrapper</span>
|
|
1915
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">html</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="bp">NSString</span><span class="p">.</span><span class="n">convert</span><span class="p">(</span><span class="n">withApex</span><span class="p">:</span><span class="w"> </span><span class="n">markdownText</span><span class="p">)</span>
|
|
1559
1916
|
|
|
1560
|
-
|
|
1561
|
-
<span class="
|
|
1917
|
+
<span class="c1">// With mode constants</span>
|
|
1918
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">gfmHtml</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="bp">NSString</span><span class="p">.</span><span class="n">convert</span><span class="p">(</span><span class="n">withApex</span><span class="p">:</span><span class="w"> </span><span class="n">markdownText</span><span class="p">,</span><span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="n">ApexModeGFM</span><span class="p">)</span>
|
|
1562
1919
|
|
|
1563
|
-
|
|
1564
|
-
<span class="
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1920
|
+
<span class="c1">// Dictionary-based options</span>
|
|
1921
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">options</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="nb">String</span><span class="p">:</span><span class="w"> </span><span class="nb">Any</span><span class="p">]</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">[</span>
|
|
1922
|
+
<span class="w"> </span><span class="s">"pretty"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
|
|
1923
|
+
<span class="w"> </span><span class="s">"standalone"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
|
|
1924
|
+
<span class="w"> </span><span class="s">"stylesheet"</span><span class="p">:</span><span class="w"> </span><span class="s">"style.css"</span>
|
|
1568
1925
|
<span class="p">]</span>
|
|
1569
|
-
<span class="
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1926
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">configuredHtml</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="bp">NSString</span><span class="p">.</span><span class="n">convert</span><span class="p">(</span>
|
|
1927
|
+
<span class="w"> </span><span class="n">withApex</span><span class="p">:</span><span class="w"> </span><span class="n">markdownText</span><span class="p">,</span>
|
|
1928
|
+
<span class="w"> </span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="n">ApexModeUnified</span><span class="p">,</span>
|
|
1929
|
+
<span class="w"> </span><span class="n">options</span><span class="p">:</span><span class="w"> </span><span class="n">options</span>
|
|
1573
1930
|
<span class="p">)</span>
|
|
1574
|
-
</
|
|
1931
|
+
</pre>
|
|
1932
|
+
</div>
|
|
1575
1933
|
|
|
1576
1934
|
<p>
|
|
1577
1935
|
For direct C API access, create a Swift bridging header:
|
|
1578
1936
|
</p>
|
|
1579
1937
|
|
|
1580
|
-
<
|
|
1581
|
-
<span class="
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
<span class="
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1938
|
+
<div class="highlight">
|
|
1939
|
+
<pre><span></span><span class="c1">// Bridging header</span>
|
|
1940
|
+
<span class="p">#</span><span class="kd">import</span><span class="w"> </span><span class="p"><</span><span class="nc">Apex</span><span class="o">/</span><span class="nc">apex</span><span class="p">.</span><span class="nc">h</span><span class="p">></span>
|
|
1941
|
+
|
|
1942
|
+
<span class="c1">// Swift code</span>
|
|
1943
|
+
<span class="kd">func</span><span class="w"> </span><span class="nf">convertMarkdown</span><span class="p">(</span><span class="kc">_</span><span class="w"> </span><span class="n">text</span><span class="p">:</span><span class="w"> </span><span class="nb">String</span><span class="p">)</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="nb">String</span><span class="p">?</span><span class="w"> </span><span class="p">{</span>
|
|
1944
|
+
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nv">opts</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">apex_options_default</span><span class="p">()</span>
|
|
1945
|
+
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nv">cString</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">text</span><span class="p">.</span><span class="n">utf8CString</span>
|
|
1946
|
+
<span class="w"> </span><span class="k">guard</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nv">html</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">cString</span><span class="p">,</span><span class="w"> </span><span class="n">text</span><span class="p">.</span><span class="n">utf8</span><span class="p">.</span><span class="bp">count</span><span class="p">,</span><span class="w"> </span><span class="p">&</span><span class="n">opts</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
|
|
1947
|
+
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">nil</span>
|
|
1948
|
+
<span class="w"> </span><span class="p">}</span>
|
|
1949
|
+
<span class="w"> </span><span class="k">defer</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">apex_free_string</span><span class="p">(</span><span class="n">html</span><span class="p">)</span><span class="w"> </span><span class="p">}</span>
|
|
1950
|
+
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nb">String</span><span class="p">(</span><span class="n">cString</span><span class="p">:</span><span class="w"> </span><span class="n">html</span><span class="p">)</span>
|
|
1592
1951
|
<span class="p">}</span>
|
|
1593
|
-
</
|
|
1952
|
+
</pre>
|
|
1953
|
+
</div>
|
|
1954
|
+
|
|
1955
|
+
<h2 id="plugin-catalog-and-installation">
|
|
1956
|
+
Plugin Catalog and Installation
|
|
1957
|
+
</h2>
|
|
1958
|
+
|
|
1959
|
+
<p>
|
|
1960
|
+
Apex exposes a first-class API for building plugin picker UIs in macOS and iOS apps. Fetch the central plugin directory, list installed plugins, and install or uninstall without shelling out to the CLI.
|
|
1961
|
+
</p>
|
|
1962
|
+
|
|
1963
|
+
<h3 id="swift-api-recommended">
|
|
1964
|
+
Swift API (recommended)
|
|
1965
|
+
</h3>
|
|
1966
|
+
|
|
1967
|
+
<div class="highlight">
|
|
1968
|
+
<pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Apex</span>
|
|
1969
|
+
|
|
1970
|
+
<span class="c1">// Fetch available plugins from apex-plugins.json</span>
|
|
1971
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">available</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="n">ApexPluginManager</span><span class="p">.</span><span class="n">fetchAvailable</span><span class="p">()</span>
|
|
1972
|
+
|
|
1973
|
+
<span class="k">for</span><span class="w"> </span><span class="n">plugin</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="p">{</span>
|
|
1974
|
+
<span class="w"> </span><span class="bp">print</span><span class="p">(</span><span class="n">plugin</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">plugin</span><span class="p">.</span><span class="n">title</span><span class="w"> </span><span class="p">??</span><span class="w"> </span><span class="s">""</span><span class="p">,</span><span class="w"> </span><span class="n">plugin</span><span class="p">.</span><span class="n">repo</span><span class="w"> </span><span class="p">??</span><span class="w"> </span><span class="s">""</span><span class="p">)</span>
|
|
1975
|
+
<span class="p">}</span>
|
|
1976
|
+
|
|
1977
|
+
<span class="c1">// List installed plugins (project + user-global)</span>
|
|
1978
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">installed</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">ApexPluginManager</span><span class="p">.</span><span class="n">installed</span><span class="p">(</span><span class="n">baseDirectory</span><span class="p">:</span><span class="w"> </span><span class="n">documentFolder</span><span class="p">.</span><span class="n">path</span><span class="p">)</span>
|
|
1979
|
+
|
|
1980
|
+
<span class="c1">// Install from the curated directory</span>
|
|
1981
|
+
<span class="k">try</span><span class="w"> </span><span class="n">ApexPluginManager</span><span class="p">.</span><span class="n">install</span><span class="p">(</span><span class="n">id</span><span class="p">:</span><span class="w"> </span><span class="s">"kbd"</span><span class="p">)</span>
|
|
1982
|
+
|
|
1983
|
+
<span class="c1">// Install from a Git URL (requires explicit opt-in)</span>
|
|
1984
|
+
<span class="k">try</span><span class="w"> </span><span class="n">ApexPluginManager</span><span class="p">.</span><span class="n">install</span><span class="p">(</span>
|
|
1985
|
+
<span class="w"> </span><span class="n">idOrRepository</span><span class="p">:</span><span class="w"> </span><span class="s">"https://github.com/ApexMarkdown/apex-plugin-kbd.git"</span><span class="p">,</span>
|
|
1986
|
+
<span class="w"> </span><span class="n">allowUntrustedSource</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span>
|
|
1987
|
+
<span class="p">)</span>
|
|
1988
|
+
|
|
1989
|
+
<span class="c1">// Uninstall from ~/.config/apex/plugins</span>
|
|
1990
|
+
<span class="k">try</span><span class="w"> </span><span class="n">ApexPluginManager</span><span class="p">.</span><span class="n">uninstall</span><span class="p">(</span><span class="n">id</span><span class="p">:</span><span class="w"> </span><span class="s">"kbd"</span><span class="p">)</span>
|
|
1991
|
+
|
|
1992
|
+
<span class="c1">// Enable plugins when converting</span>
|
|
1993
|
+
<span class="kd">var</span><span class="w"> </span><span class="nv">options</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">ApexOptions</span><span class="p">()</span>
|
|
1994
|
+
<span class="n">options</span><span class="p">.</span><span class="n">enablePlugins</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span>
|
|
1995
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">html</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="n">apexHTML</span><span class="p">(</span><span class="n">mode</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">unified</span><span class="p">,</span><span class="w"> </span><span class="n">options</span><span class="p">:</span><span class="w"> </span><span class="n">options</span><span class="p">)</span>
|
|
1996
|
+
</pre>
|
|
1997
|
+
</div>
|
|
1998
|
+
|
|
1999
|
+
<p>
|
|
2000
|
+
<code>ApexPluginInfo</code> is <code>Identifiable</code> and includes <code>id</code>, <code>title</code>, <code>description</code>, <code>author</code>, <code>homepage</code>, and <code>repo</code>.
|
|
2001
|
+
</p>
|
|
2002
|
+
|
|
2003
|
+
<h3 id="objective-c-api">
|
|
2004
|
+
Objective-C API
|
|
2005
|
+
</h3>
|
|
2006
|
+
|
|
2007
|
+
<div class="highlight">
|
|
2008
|
+
<pre><span></span><span class="cp">#import "NSString+ApexPlugins.h"</span>
|
|
2009
|
+
|
|
2010
|
+
<span class="bp">NSError</span><span class="w"> </span><span class="o">*</span><span class="n">error</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">nil</span><span class="p">;</span>
|
|
2011
|
+
<span class="bp">NSArray</span><span class="o"><</span><span class="n">ApexPluginInfo</span><span class="w"> </span><span class="o">*></span><span class="w"> </span><span class="o">*</span><span class="n">available</span><span class="w"> </span><span class="o">=</span>
|
|
2012
|
+
<span class="w"> </span><span class="p">[</span><span class="n">ApexPluginCatalog</span><span class="w"> </span><span class="n">fetchAvailablePlugins</span><span class="o">:&</span><span class="n">error</span><span class="p">];</span>
|
|
2013
|
+
<span class="k">if</span><span class="w"> </span><span class="o"><!--</span><span class="n">IDX</span><span class="o">:</span><span class="n">idxref</span><span class="mi">-0</span><span class="o">--></span><span class="w"> </span><span class="p">{</span>
|
|
2014
|
+
<span class="w"> </span><span class="n">NSLog</span><span class="p">(</span><span class="s">@"Fetch failed: %@"</span><span class="p">,</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
|
|
2015
|
+
<span class="p">}</span>
|
|
2016
|
+
|
|
2017
|
+
<span class="bp">NSArray</span><span class="o"><</span><span class="n">ApexPluginInfo</span><span class="w"> </span><span class="o">*></span><span class="w"> </span><span class="o">*</span><span class="n">installed</span><span class="w"> </span><span class="o">=</span>
|
|
2018
|
+
<span class="w"> </span><span class="p">[</span><span class="n">ApexPluginCatalog</span><span class="w"> </span><span class="n">installedPluginsWithBaseDirectory</span><span class="o">:</span><span class="n">documentPath</span><span class="p">];</span>
|
|
2019
|
+
|
|
2020
|
+
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="p">[</span><span class="n">ApexPluginCatalog</span><span class="w"> </span><span class="n">installPluginWithId</span><span class="o">:</span><span class="s">@"kbd"</span><span class="w"> </span><span class="n">error</span><span class="o">:&</span><span class="n">error</span><span class="p">])</span><span class="w"> </span><span class="p">{</span>
|
|
2021
|
+
<span class="w"> </span><span class="n">NSLog</span><span class="p">(</span><span class="s">@"Install failed: %@"</span><span class="p">,</span><span class="w"> </span><span class="n">error</span><span class="p">);</span>
|
|
2022
|
+
<span class="p">}</span>
|
|
2023
|
+
|
|
2024
|
+
<span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">pluginsDir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">ApexPluginCatalog</span><span class="w"> </span><span class="n">globalPluginsDirectory</span><span class="p">];</span>
|
|
2025
|
+
</pre>
|
|
2026
|
+
</div>
|
|
2027
|
+
|
|
2028
|
+
<h3 id="c-api">
|
|
2029
|
+
C API
|
|
2030
|
+
</h3>
|
|
2031
|
+
|
|
2032
|
+
<p>
|
|
2033
|
+
For direct C integration, see <a href="C-API#plugin-catalog-api">C API - Plugin Catalog API</a>. Include <code>apex/plugins.h</code> or <code>apexc.h</code>.
|
|
2034
|
+
</p>
|
|
2035
|
+
|
|
2036
|
+
<p>
|
|
2037
|
+
<strong>Requirements:</strong> Catalog fetch uses <code>curl</code>. Install/uninstall uses <code>git clone</code> and writes to <code>~/.config/apex/plugins</code> (or <code>$XDG_CONFIG_HOME/apex/plugins</code>). Confirm untrusted sources in your UI before calling install with <code>allowUntrustedSource: true</code>.
|
|
2038
|
+
</p>
|
|
1594
2039
|
|
|
1595
2040
|
<h2 id="troubleshooting">
|
|
1596
2041
|
Troubleshooting
|
|
1597
2042
|
</h2>
|
|
1598
2043
|
|
|
1599
2044
|
<h3 id="swift-package-manager-issues">
|
|
1600
|
-
Swift Package Manager
|
|
2045
|
+
Swift Package Manager Issues
|
|
1601
2046
|
</h3>
|
|
1602
2047
|
|
|
1603
2048
|
<p>
|
|
1604
|
-
<strong>
|
|
2049
|
+
<strong>Package Resolution Fails:</strong>
|
|
1605
2050
|
</p>
|
|
1606
2051
|
|
|
1607
2052
|
<ul>
|
|
@@ -1625,7 +2070,7 @@ make
|
|
|
1625
2070
|
</ul>
|
|
1626
2071
|
|
|
1627
2072
|
<p>
|
|
1628
|
-
<strong>
|
|
2073
|
+
<strong>Build Errors:</strong>
|
|
1629
2074
|
</p>
|
|
1630
2075
|
|
|
1631
2076
|
<ul>
|
|
@@ -1645,7 +2090,7 @@ make
|
|
|
1645
2090
|
</ul>
|
|
1646
2091
|
|
|
1647
2092
|
<p>
|
|
1648
|
-
<strong>
|
|
2093
|
+
<strong>Module Not Found:</strong>
|
|
1649
2094
|
</p>
|
|
1650
2095
|
|
|
1651
2096
|
<ul>
|
|
@@ -1664,8 +2109,24 @@ make
|
|
|
1664
2109
|
|
|
1665
2110
|
</ul>
|
|
1666
2111
|
|
|
2112
|
+
<p>
|
|
2113
|
+
<strong>C options visible but fields unavailable:</strong>
|
|
2114
|
+
</p>
|
|
2115
|
+
|
|
2116
|
+
<ul>
|
|
2117
|
+
|
|
2118
|
+
<li>
|
|
2119
|
+
If <code>apex_options</code> appears in quick help but field access fails, add <code>import ApexC</code> next to <code>import Apex</code>
|
|
2120
|
+
</li>
|
|
2121
|
+
|
|
2122
|
+
<li>
|
|
2123
|
+
Clean and rebuild (<code>Product > Clean Build Folder</code>) to refresh Xcode indexing and module cache
|
|
2124
|
+
</li>
|
|
2125
|
+
|
|
2126
|
+
</ul>
|
|
2127
|
+
|
|
1667
2128
|
<h3 id="framework-not-found">
|
|
1668
|
-
Framework
|
|
2129
|
+
Framework Not Found
|
|
1669
2130
|
</h3>
|
|
1670
2131
|
|
|
1671
2132
|
<p>
|
|
@@ -1689,7 +2150,7 @@ make
|
|
|
1689
2150
|
</ol>
|
|
1690
2151
|
|
|
1691
2152
|
<h3 id="linker-errors">
|
|
1692
|
-
Linker
|
|
2153
|
+
Linker Errors
|
|
1693
2154
|
</h3>
|
|
1694
2155
|
|
|
1695
2156
|
<ul>
|
|
@@ -1709,7 +2170,7 @@ make
|
|
|
1709
2170
|
</ul>
|
|
1710
2171
|
|
|
1711
2172
|
<h3 id="runtime-errors">
|
|
1712
|
-
Runtime
|
|
2173
|
+
Runtime Errors
|
|
1713
2174
|
</h3>
|
|
1714
2175
|
|
|
1715
2176
|
<ul>
|
|
@@ -1761,27 +2222,29 @@ make
|
|
|
1761
2222
|
</p>
|
|
1762
2223
|
|
|
1763
2224
|
<h2 id="module-map">
|
|
1764
|
-
Module
|
|
2225
|
+
Module Map
|
|
1765
2226
|
</h2>
|
|
1766
2227
|
|
|
1767
2228
|
<p>
|
|
1768
2229
|
Apex includes a module map (<code>include/apex/module.modulemap</code>) that allows Swift to import the C API directly:
|
|
1769
2230
|
</p>
|
|
1770
2231
|
|
|
1771
|
-
<
|
|
2232
|
+
<div class="highlight">
|
|
2233
|
+
<pre><span></span><span class="kd">import</span><span class="w"> </span><span class="nc">Apex</span>
|
|
1772
2234
|
|
|
1773
|
-
|
|
1774
|
-
<span class="
|
|
1775
|
-
|
|
1776
|
-
<span class="
|
|
1777
|
-
</
|
|
2235
|
+
<span class="c1">// Direct C API access (advanced usage)</span>
|
|
2236
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">opts</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">apex_options_default</span><span class="p">()</span>
|
|
2237
|
+
<span class="c1">// ... configure options ...</span>
|
|
2238
|
+
<span class="kd">let</span><span class="w"> </span><span class="nv">html</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">apex_markdown_to_html</span><span class="p">(</span><span class="n">markdown</span><span class="p">,</span><span class="w"> </span><span class="n">markdown</span><span class="p">.</span><span class="bp">count</span><span class="p">,</span><span class="w"> </span><span class="p">&</span><span class="n">opts</span><span class="p">)</span>
|
|
2239
|
+
</pre>
|
|
2240
|
+
</div>
|
|
1778
2241
|
|
|
1779
2242
|
<p>
|
|
1780
2243
|
The module map is automatically included when using SPM or the framework.
|
|
1781
2244
|
</p>
|
|
1782
2245
|
|
|
1783
2246
|
<h2 id="comparison-of-integration-methods">
|
|
1784
|
-
Comparison of Integration
|
|
2247
|
+
Comparison of Integration Methods
|
|
1785
2248
|
</h2>
|
|
1786
2249
|
|
|
1787
2250
|
<table>
|
|
@@ -1815,7 +2278,7 @@ make
|
|
|
1815
2278
|
<tr>
|
|
1816
2279
|
|
|
1817
2280
|
<td>
|
|
1818
|
-
<strong>
|
|
2281
|
+
<strong>Swift Package Manager</strong>
|
|
1819
2282
|
</td>
|
|
1820
2283
|
|
|
1821
2284
|
<td>
|
|
@@ -1874,7 +2337,7 @@ make
|
|
|
1874
2337
|
</table>
|
|
1875
2338
|
|
|
1876
2339
|
<p>
|
|
1877
|
-
<strong>
|
|
2340
|
+
<strong>Recommendation:</strong> Use Swift Package Manager for the easiest integration and best cross-platform support.
|
|
1878
2341
|
</p>
|
|
1879
2342
|
|
|
1880
2343
|
<h2 id="related">
|
|
@@ -1884,19 +2347,52 @@ make
|
|
|
1884
2347
|
<ul>
|
|
1885
2348
|
|
|
1886
2349
|
<li>
|
|
1887
|
-
<a href="C-API.html">
|
|
2350
|
+
<a href="C-API.html">C API</a> - Direct C API documentation (includes plugin catalog API)
|
|
1888
2351
|
</li>
|
|
1889
2352
|
|
|
1890
2353
|
<li>
|
|
1891
|
-
<a href="
|
|
2354
|
+
<a href="Plugins.html">Plugins</a> - Plugin syntax and CLI install flags
|
|
1892
2355
|
</li>
|
|
1893
2356
|
|
|
1894
2357
|
<li>
|
|
1895
|
-
<a href="
|
|
2358
|
+
<a href="Usage.html">Usage</a> - Basic usage examples
|
|
2359
|
+
</li>
|
|
2360
|
+
|
|
2361
|
+
<li>
|
|
2362
|
+
<a href="Modes.html">Modes</a> - Processor mode details
|
|
1896
2363
|
</li>
|
|
1897
2364
|
|
|
1898
2365
|
</ul>
|
|
1899
2366
|
|
|
2367
|
+
<h1 id="index-section">
|
|
2368
|
+
Index
|
|
2369
|
+
</h1>
|
|
2370
|
+
|
|
2371
|
+
<div class="index">
|
|
2372
|
+
|
|
2373
|
+
<dl>
|
|
2374
|
+
|
|
2375
|
+
<dt>
|
|
2376
|
+
A
|
|
2377
|
+
</dt>
|
|
2378
|
+
|
|
2379
|
+
<dd>
|
|
2380
|
+
|
|
2381
|
+
<ul>
|
|
2382
|
+
|
|
2383
|
+
<li>
|
|
2384
|
+
|
|
2385
|
+
available <a class="index-return" href="#idxref-0"><sup>[go]</sup></a>
|
|
2386
|
+
</li>
|
|
2387
|
+
|
|
2388
|
+
</ul>
|
|
2389
|
+
|
|
2390
|
+
</dd>
|
|
2391
|
+
|
|
2392
|
+
</dl>
|
|
2393
|
+
|
|
2394
|
+
</div>
|
|
2395
|
+
|
|
1900
2396
|
<script>
|
|
1901
2397
|
// Hamburger menu functionality
|
|
1902
2398
|
(function() {
|