diff options
author | Karl Berry <karl@freefriends.org> | 2024-02-18 21:05:58 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2024-02-18 21:05:58 +0000 |
commit | 45d62c355885e905db2a729761eb384ec447e931 (patch) | |
tree | a80c1c9bd45c98a38855f2ac39f1ac5233862747 | |
parent | c503d4c5c13af6a3749ec30bfee14cffda84240c (diff) |
markdown (18feb24)
git-svn-id: svn://tug.org/texlive/trunk@69962 c570f23f-e606-0410-a88d-b1316a301751
30 files changed, 23523 insertions, 14546 deletions
diff --git a/Master/texmf-dist/doc/context/third/markdown/examples/context-mkiv.tex b/Master/texmf-dist/doc/context/third/markdown/examples/context-mkiv.tex index 4c05059f3a6..8b000e43ed2 100644 --- a/Master/texmf-dist/doc/context/third/markdown/examples/context-mkiv.tex +++ b/Master/texmf-dist/doc/context/third/markdown/examples/context-mkiv.tex @@ -58,8 +58,10 @@ kpse.set_program_name("luatex") \starttext % Typeset the document `example.md` by letting the Markdown package handle -% the conversion internally. -\inputmarkdown{./example.md} +% the conversion internally. Optionally, we can specify additional options +% between the square brackets similarly to the command `\setupmarkdown`. +% Unlike `\setupmarkdown`, the options will only apply for this document. +\inputmarkdown[smart_ellipses = yes]{./example.md} % Typeset the document `example.tex` that we prepared separately using the % Lua command-line interface and that contains a plain TeX representation diff --git a/Master/texmf-dist/doc/context/third/markdown/examples/example.md b/Master/texmf-dist/doc/context/third/markdown/examples/example.md index 8819ef5b672..5e5457088ed 100644 --- a/Master/texmf-dist/doc/context/third/markdown/examples/example.md +++ b/Master/texmf-dist/doc/context/third/markdown/examples/example.md @@ -41,9 +41,7 @@ This is a table: This is a bullet list: -* The first item of a bullet list - - that spans several paragraphs, +* The first item of a bullet list, * the second item of a bullet list, @@ -57,9 +55,7 @@ This is a compact bullet list: This is an ordered list: -5. The first item of an ordered list - - that spans several paragraphs, +5. The first item of an ordered list, 6. the second item of an ordered list, @@ -67,9 +63,7 @@ This is an ordered list: This is a fancy ordered list: -e) The first item of an ordered list - - that spans several paragraphs, +e) The first item of an ordered list, f) the second item of an ordered list, @@ -77,9 +71,7 @@ g) the third item of an ordered list. This is an ordered list using hash enumerators: -#. The first item of an ordered list - - that spans several paragraphs, +#. The first item of an ordered list, #. the second item of an ordered list, diff --git a/Master/texmf-dist/doc/generic/markdown/CHANGES.md b/Master/texmf-dist/doc/generic/markdown/CHANGES.md index 4e1e87e5088..e0f893ab21d 100644 --- a/Master/texmf-dist/doc/generic/markdown/CHANGES.md +++ b/Master/texmf-dist/doc/generic/markdown/CHANGES.md @@ -1,5 +1,323 @@ # Changes +## 3.4.1 (2024-02-16) + +Fixes: + +- Rename option `contentType` to `contentLevel`. (#300, #400, ca98e039) +- Correctly produce paragraph separators inside block-level elements. + (#376, #377, #403, contributed by @lostenderman) + +Deprecation: + +- Replace all instances of `\markdownInfo`, `\markdownWarning`, and + `\markdownError` with l3msg functions and deprecate `\markdownInfo`, + `\markdownWarning`, and `\markdownError`. (#383, #398, e3ca682c, 48002f84) +- Use the `TEXMF_OUTPUT_DIRECTORY` environmental variable to set + `\markdownOptionOutputDir` and deprecate `\markdownOptionOutputDir`. + (#405, #409, [matrix.org][matrix-405]) + + [matrix-405]: https://matrix.to/#/!efVbynJpCMjlOTfose:matrix.org/$8oUA2Bn3ch3q9K6RU-1EgpO9uQOd_3Mky4YwT325Ib0?via=matrix.org&via=im.f3l.de + +Docker: + +- Add support for TeX Live 2024 pretest. + (#404, #406, e51738ba, #410, 7ef64dd9, a7cff81d, contributed by @jspitz) + +## 3.4.0 (2024-01-31) + +Development: + +- Separate default token renderer prototype definitions to a universal theme + `witiko/markdown/defaults`. (#391, #392) +- Add format-independent options `noDefaults` and `plain`, which control the + loading of theme `witiko/markdown/defaults`. (#393, #394) +- Add `contentLevel` Lua option. + (#300, #375, #400, contributed by @lostenderman) + +Fixes: + +- Make Pandoc syntax extensions `tex_single_backslash_math` and + `tex_double_backslash_math` robust against extra spaces at the beginning / + end of inline / display math. (#386, #399, contributed by @lostenderman) + +Libraries: + +- Update `tinyyaml` to v0.4.4. (e2a59ba) + +Contributed Software: + +- Remove private GitHub repository `contributions/istqb_latex`. (cc21fe2) +- Add `contributions/37c3-beamer`. (f5bb26b, contributed by @TeXhackse) + +Default Renderer Prototypes: + +- Do not unnecessarily override math renderer prototypes in LaTeX/ConTeXt. + (#387, #396, contributed by @zousiyu1995) + +Unit Tests: + +- In pull requests, process added and modified testfiles first. + (feafe9b9, 9ff530da, 18deae73) + +Deprecation: + +- Replace all instances of `\markdownInfo`, `\markdownWarning`, and + `\markdownError` with l3msg functions and deprecate `\markdownInfo`, + `\markdownWarning`, and `\markdownError`. (#383, #398) + +Docker: + +- Uninstall the distribution Markdown package. (258a73d4) + +## 3.3.0 (2023-12-30) + +Development: + +- Add support for universal (cross-format) themes. (#276, #373) + +Fixes: + +- Prevent unwanted space tokens before `*ContextEnd` renderers. (#373) +- Make ConTeXt command `\inputmarkdown` properly process extra options. + (#389, #390, contributed by @ibotty) + +Documentation: + +- Improve the discoverability of the `\markdownInput` macro. + (#381, #382, contributed by @solernou) +- Encourage alternatives to the `hybrid` option in the user manual. (#382) + +Speed Improvements: + +- Optimize needless catcode switching in package code. (3eb7231) + +Default Renderer Prototypes: + +- Fix the typesetting of level four headings with attributes for LaTeX document + classes without the `\chapter` command such as `article` and level five + headings for LaTeX document classes with the `\chapter` command such as + `book`. (86eefc0) + +## 3.2.1 (2023-11-23) + +Fixes: + +- Remove the `options.cacheDir` directory if it is empty after conversion. + (5cfcea6) +- Allow tables inside lists. (#368, #371, contributed by @lostenderman, + sponsored by ISTQB) +- Check that shell access is unrestricted before attempting shell escape. + (#365, witiko/lt3luabridge#22, latex3/latex3#1339, #372) + +Documentation: + +- Add a link to a work-in-progress article for TUGboat 45:1 to `README.md`. + (1988a0c2, 3b85533d) +- Fix miscellaneous issues with the technical documentation. (#366, #367) +- In `README.md`, add a link to a GPT chatbot with background knowledge about + the Markdown Package for TeX. (59eb04d) + +Docker: + +- Include developer tools in the development Docker image. (#374) + +## 3.2.0 (2023-10-21) + +Development: + +- Add support for Pandoc `auto_identifiers` and `gfm_auto_identifiers` + syntax extensions. + (#237, #238, lostenderman/markdown#153, #315, #354, + contributed by @lostenderman) +- Add support for bulk redefinition of token renderers and token renderer + prototypes in the `\markdownSetup` command using enumeration. + (#232, #361..#363, [matrix.org][matrix-361]) + + [matrix-361]: https://matrix.to/#/!UeAwznpYwwsinVTetR:matrix.org/$k__vWylYp_L9eyZ0lXCPy26GokZ-Y9g5v8Xs9n47twQ?via=matrix.org&via=im.f3l.de + +Fixes: + +- Make the `import` LaTeX option correctly handle recursive imports. + (68c7a2f5, danopolan/istqb_latex#87) +- Support attributes on multi-line setext headings. + (#315, #355, #356, contributed by @lostenderman) +- Correctly process the combination of Lua options `fancyLists` and + `startNumber`. (59fb97e8) +- Properly parse emphasis at line endings in headings. + (#358, #360, contributed by @lostenderman) +- Fix fancy lists that use roman numerals as markers. + (danopolan/istqb_latex#87, #359, #364, + contributed by @lostenderman, sponsored by ISTQB) + +Documentation: + +- Add a link to a preprint from TUGboat 44:3 to `README.md`. + (cf6b3d7b, dc57af7) +- Measure the speed impact of test file batching. + (#357, b526fa65, 8c94ffc9, [matrix.org][matrix-357]) + + [matrix-357]: https://matrix.to/#/!efVbynJpCMjlOTfose:matrix.org/$WR3quuO1fyOl6w_KX6YFA4BACBcL-cWUWBpVfpPWDkI?via=matrix.org&via=im.f3l.de + +Unit Tests: + +- Restore CommonMark testfiles with trailing tabs and spaces. + (#348, #353, lostenderman/markdown#2, contributed by @lostenderman) +- Fail faster during batch bisection. (5177ef6) +- Speed up tests by running ConTeXt MkIV only once. (61f36e6d) +- Use `BEGIN document` and `END document` instead of `documentBegin` + and `documentEnd` for consistence with other renderers. (0be6be4) + +Continuous Integration: + +- Do not rebuild existing Docker images when we rerun the + continuous integration for the same commit multiple times. + (ae390ec, 70c5f2e5) + +Default Renderer Prototypes: + +- In LaTeX, correctly capitalize fancy list labels. (0a10053f) +- In LaTeX, properly indent fancy ordered lists when the Lua option + `startNumber` is enabled. (6a7649e8) + +## 3.1.0 (2023-09-27) + +Development: + +- Add `\markdownSetup` command to all TeX formats. + (#275, #349, [matrix.org][matrix-349]) +- Add an optional argument to the `markdown` LaTeX environment. + (#299, #351) +- Add support for Pandoc `mark` syntax extension. + (jgm/lunamark#67, #303, #352, [matrix.org][matrix-352], + contributed by @Omikhleia) + + [matrix-349]: https://matrix.to/#/!efVbynJpCMjlOTfose:matrix.org/$8JXGbDz0viyRyv6ySWQ3344BOhwd4dj5WYeawzEg_tU?via=matrix.org&via=im.f3l.de + [matrix-352]: https://matrix.to/#/!lWGKeMcpgwGHpfLYkf:matrix.org/$yVeWB0Yzfz6mgORv5VeG9IEl7a4xLogkAUmdNMSCxEg?via=matrix.org&via=im.f3l.de + +Deprecation: + +- Deprecate the `markdown*` LaTeX environment. + (#299, #351, [matrix.org][matrix-351]) + + [matrix-351]: https://matrix.to/#/!lWGKeMcpgwGHpfLYkf:matrix.org/$yVeWB0Yzfz6mgORv5VeG9IEl7a4xLogkAUmdNMSCxEg?via=matrix.org&via=im.f3l.de + +Unit Tests: + +- Add support for YAML metadata in testfiles. + (#345, #347, [matrix.org][matrix-347]) + + [matrix-347]: https://matrix.to/#/!efVbynJpCMjlOTfose:matrix.org/$8JXGbDz0viyRyv6ySWQ3344BOhwd4dj5WYeawzEg_tU?via=matrix.org&via=im.f3l.de + +Documentation: + +- Add a link to a preprint from CSTUG Bulletin to `README.md`. + (2c354f49) + +## 3.0.1 (2023-09-10) + +Fixes: + +- Correctly parse paragraphs with trailing spaces. + (danopolan/istqb_latex#77, #345, #347) + +## 3.0.0 (2023-08-25) + +Development: + +- Add support for TeX-like rich paragraphs. + (#30, #306, [matrix.org][matrix-306]) + + [matrix-306]: https://matrix.to/#/!lWGKeMcpgwGHpfLYkf:matrix.org/$g9ZTEyXP-V_5elJjcqRd-D9QyIfJuTw-TWlZIFoh72c?via=matrix.org&via=im.f3l.de + +Fixes: + +- Reset current heading level at the end of a markdown document. + (1261e6f) +- Fix out-of-memory issues with CommonMark implementation. + (#308, #318, 28650b8) +- Fix `rawAttribute` option being enabled in Lua by default. + (92c9ac2) +- Make our implementation of attributes compatible with jgm/pandoc. + (jgm/lunamark#68, #304, #343, contributed by @Omikhleia) + +Documentation: + +- Fix the link to @xvrabcov's talk at TUG 2022 in `README.md`. + (166c4506) +- Add a link to @writersglen's talk at TUG 2022 to `README.md`. + (f3efcb9) +- Document setting up catcodes in Lua. (#329, #342) + +Unit Tests: + +- Batch unit tests to improve speed. + (#245, #316, 8bfd0b3, #317, #319..#325, #327, #328, e3b31696, + #331, #332, #334, 0a230fa, 90cc428, 3be0013, dbe1808, a0108814) +- Use self-hosted GitHub runners for tests to improve speed. + (#326, #330, #331, a9948a86, 68b6216b, contributed by @TeXhackse, + [matrix.org][matrix-331]) + + [matrix-331]: https://matrix.to/#/!efVbynJpCMjlOTfose:matrix.org/$6qKDXlLxsaJnOl0muFX3K7Htj41B-7hL2PmSFTIm6NE?via=matrix.org&via=im.f3l.de + +Continuous Integration: + +- In draft pull requests, do not build documentation or examples + and do not run pkgcheck. (#337, #338, 189bb153) +- Push temporary Docker images to GitHub Packages. + (#340, #341, d15ae88a, 7e42e846) + +## 3.0.0-alpha.2 (2023-08-01) + +Development: + +- Add support for attributes on tables. (#310, #313, 8786408) + +Default Renderer Prototypes: + +- Correctly handle multiple heading identifiers. (3ae1b0d1) +- Add alt text to figures. (#312) + +Documentation: + +- Add a link to TUG 2023 slides and video to the README. + (ce6047b8, adb69e2f) + +Unit Tests: + +- Rewrite the unit testing framework from Bash to Python + and implement summarization. (#245, #314) + +## 3.0.0-alpha (2023-06-27) + +Development: + +- Comply with CommonMark 0.30 and increment `grammar_version` to `3`. + (contributed by @lostenderman, #29, #210, #212, #226) +- Add a demo of using the Markdown package in OpTeX. + (contributed by @olsak, #215, 109c1b5, #292) +- Add `singletonCache` Lua option. (#226) + +Documentation: + +- Add @lostenderman's thesis to `README.md`. (#226, 8a4536e) + +Default Renderer Prototypes: + +- Do not force line breaks after high-level headings in LaTeX. + Allow the text to follow the heading on the same line. (df8562c) + +Deprecation: + +- Remove deprecated parts of the package. (#309) +- Remove support for LuaMetaTeX. (#226) + +Fixes: + +- Allow references in fenced divs. (#307, jgm/lunamark#69) +- Prevent `eagerCache=false` from causing undefined behavior and make + it the new default. (#129) + ## 2.23.0 (2023-04-27) Development: @@ -55,9 +373,12 @@ Development: parens and brackets. (contributed by @lostenderman, #61, #235, #236, #270) - Add support for attributes on links, images, fenced code, - and inline code spans. (jgm#36, jgm#43, #50, #123, #256, #280) + and inline code spans. (jgm/lunamark#36, jgm/lunamark#43, + #50, #123, #256, #280, [matrix.org][matrix-256]) - Add `import` LaTeX option. (#107, #286) + [matrix-256]: https://matrix.to/#/!pznomuvubVyxElflTe:matrix.org/$mDATROtxOLOGBvH5Nt3o86iysRe1LCfZB-lw4PqjKJk?via=matrix.org&via=im.f3l.de + Documentation: - Unify how Pandoc syntax extensions are named and cited in @@ -107,9 +428,10 @@ Deprecation: Development: - Add support for line blocks. - (contributed by @Omikhleia and @lostenderman, jgm#41, #209, #248) + (contributed by @Omikhleia and @lostenderman, jgm/lunamark#41, + #209, #248) - Add support for attributes on fenced code blocks. - (contributed by @Omikhleia, jgm#36, #123, #211) + (contributed by @Omikhleia, jgm/lunamark#36, #123, #211) Documentation: @@ -126,7 +448,8 @@ Fixes: - Fix input normalization and move it from Lua CLI and plain TeX layers directly to the `convert()` Lua method. (#246, #253) - Allow fenced div closing tag to break out of a blockquote. - (contributed by @Omikhleia, jgm#60, jgm#61, #230, #259) + (contributed by @Omikhleia, jgm/lunamark#60, jgm/lunamark#61, + #230, #259) Default Renderer Prototypes: @@ -194,8 +517,7 @@ Development: - Rename the `footnotes` and `inlineFootnotes` options to `notes` and `inlineNotes`. - Rename the `HorizontalRule` rule to `ThematicBreak` and increment - `grammar_version` to `2`. This change is not backwards-compatible with the - `grammar_version` of `1`. + `grammar_version` to `2`. - Add `\markdownEscape` macro that inputs a TeX document in the middle of a markdown document fragment. (1478f7b) - Add support for raw attributes. (#173, #202) diff --git a/Master/texmf-dist/doc/generic/markdown/README.md b/Master/texmf-dist/doc/generic/markdown/README.md index 217cd6710e7..5a87521f0fc 100644 --- a/Master/texmf-dist/doc/generic/markdown/README.md +++ b/Master/texmf-dist/doc/generic/markdown/README.md @@ -4,24 +4,26 @@ Markdown [![license](https://img.shields.io/github/license/witiko/markdown)](LICENSE) [![ci](https://github.com/witiko/markdown/actions/workflows/main.yml/badge.svg)][ci] [![release](https://img.shields.io/github/release/witiko/markdown)][release] -  -[![matrix](https://img.shields.io/matrix/witiko-markdown:matrix.org?label=matrix%20chat)][matrix] -[![discord](https://img.shields.io/discord/1011667276908474440?label=discord%20chat&color=blueviolet)][discord] - - [release]: https://github.com/Witiko/markdown/releases/latest "Releases · Witiko/markdown" - [ci]: https://github.com/Witiko/markdown/actions "GitHub Actions" - [matrix]: https://matrix.to/#/#witiko-markdown:matrix.org "The Matrix Chat Space for the Markdown package" - [discord]: https://discord.gg/8xJsPghzSH "The Discord Chat Space for the Markdown package" - -The Markdown package converts [markdown][] markup to TeX commands. The +[![docker-witiko/markdown](https://img.shields.io/docker/v/witiko/markdown/latest?label=docker)][docker-witiko/markdown] +[![matrix](https://img.shields.io/matrix/witiko-markdown:matrix.org?label=matrix)][matrix] +[![discord](https://img.shields.io/discord/1011667276908474440?label=discord&color=blueviolet)][discord] +[![chatgpt](https://img.shields.io/badge/gpt-9cf)][chatgpt] + + [release]: https://github.com/Witiko/markdown/releases/latest "Releases · Witiko/markdown" + [ci]: https://github.com/Witiko/markdown/actions "GitHub Actions" + [matrix]: https://matrix.to/#/#witiko-markdown:matrix.org "The Matrix Chat Space for the Markdown package" + [discord]: https://discord.gg/8xJsPghzSH "The Discord Chat Space for the Markdown package" + [chatgpt]: https://chat.openai.com/g/g-I3K0DweJe-markdown-package-for-tex "ChatGPT - Markdown package for TeX" + +The Markdown package converts [CommonMark][] markup to TeX commands. The functionality is provided both as a Lua module, and as plain TeX, LaTeX, and ConTeXt macro packages that can be used to directly typeset TeX documents -containing markdown markup. Unlike other convertors, the Markdown package -does not require any external programs, and makes it easy to redefine how each -and every markdown element is rendered. Creative abuse of the markdown syntax -is encouraged. 😉 +containing markdown markup. Unlike other convertors, the Markdown package does +not require any external programs, and makes it easy to redefine how each and +every markdown element is rendered. Creative abuse of the markdown syntax is +encouraged. 😉 - [markdown]: https://daringfireball.net/projects/markdown/basics "Daring Fireball: Markdown Basics" + [commonmark]: https://commonmark.org/ "CommonMark: A strongly defined, highly compatible specification of Markdown" Your first Markdown document ---------------------------- @@ -56,12 +58,12 @@ Next, run the [LaTeXMK][] tool from [our official Docker image][docker-witiko/markdown] on `document.tex`: docker run --rm -v "$PWD"/workdir:/workdir -w /workdir witiko/markdown \ - latexmk -lualatex -silent document.tex + latexmk -pdf -shell-escape -silent document.tex Alternatively, you can install [TeX Live][tex-live] (can take up to several hours) and use its [LaTeXMK][] tool: - latexmk -cd -lualatex -silent workdir/document.tex + latexmk -cd -pdf -shell-escape -silent workdir/document.tex A PDF document named `workdir/document.pdf` should be produced and contain the following output: @@ -95,6 +97,8 @@ jobs: - uses: actions/checkout@v2 - run: latexmk -lualatex document.tex - uses: marvinpinto/action-automatic-releases@latest + permissions: + contents: write with: title: The latest typeset book automatic_release_tag: latest @@ -114,7 +118,7 @@ In fact, this is how we automatically produce Peek under the hood ------------------- -Remember how we said that the Markdown package converts [markdown][] markup to +Remember how we said that the Markdown package converts markdown markup to TeX commands? Let's see what that means and what we can do with this knowledge. Using a text editor, create an empty text document named `document.md` with @@ -180,26 +184,32 @@ For further information, consult one of the following: - [Writing Beamer Slides with Markdown][overleaf-4], - [Writing Posters with Markdown][overleaf-5], and - [Using Markdown in LaTeX documents][overleaf-6]. -4. My journal articles published by [TUGboat][]: +4. Journal articles published by [TUGboat][]: - [Using Markdown inside TeX documents][tb119], - [Markdown 2.7.0: Towards lightweight markup in TeX][tb124], - [Making Markdown into a Microwave Meal][tb129], - [Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX][tb131], - [Markdown 2.15.0: What's New?][tb133], - - [Markdown 2.17.1: What's New, What's Next?][tb135], and - - [Attributes in Markdown][tb136]. -5. Journal articles of me and my students published by [CSTUG Bulletin][csbul] (in Czech and Slovak): + - [Markdown 2.17.1: What's New, What's Next?][tb135], + - [Attributes in Markdown][tb136], + - Markdown 3 at TUG 2023: Reflections from the Q&A session ([preprint][tb138]), and + - Fast Regression Testing of TeX Packages: The Unreasonable Effectiveness of Batching ([work in progress][tb139]). +5. Journal articles published by [CSTUG Bulletin][csbul] (in Czech and Slovak): - [Rendering Markdown inside TeX Documents][10.5300/2016-1-4/78], - [Markdown 2.8.1: Boldly Unto the Throne of Lightweight Markup in TeX][10.5300/2020-1-2/48], - [Markdown 2.10.0: LaTeX Themes & Snippets][10.5300/2021-1-4/76], - - [Direct Typesetting of Various Document Formats in TeX Using the Pandoc Utility][10.5300/2021-1-4/83], and - - [High-Level Languages for TeX][10.5300/2022-1-4/35]. -6. Talks by me and my students: - - [Five Years of Markdown in LaTeX: What, Why, How, and Whereto][pv212-fall2020] (in Czech), and - - [Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX][tb131-video] ([slides][tb131-slides]). - - [A Gentle Introduction to Markdown for Writers][tb134-video] ([slides][tb134-slides], [example][tb134-example]). -7. Theses by my students: + - [Direct Typesetting of Various Document Formats in TeX Using the Pandoc Utility][10.5300/2021-1-4/83], + - [High-Level Languages for TeX][10.5300/2022-1-4/35], and + - Markdown 3: What's New, What's Next? ([preprint][10.5300/2023-?-?/??]). +6. Talks: + - [Five Years of Markdown in LaTeX: What, Why, How, and Whereto][pv212-fall2020] (in Czech), + - [Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX][tb131-video] ([slides][tb131-slides]), + - [A Self-Publisher's Take on Markdown and TeX][tb134-01-video] ([slides][tb134-01-slides]), and + - [A Gentle Introduction to Markdown for Writers][tb134-02-video] ([slides][tb134-02-slides], [example][tb134-02-example]), and + - [Markdown 3: What's New, What's Next?][tb137-video] ([slides][tb137-slides]). +7. Theses: - [Generic TeX Writer for the Pandoc Document Converter][thesis-umhg5] + - [An implementation of the CommonMark standard into the Markdown package for TeX][thesis-r7z7l] [overleaf-1]: https://www.overleaf.com/learn/latex/Articles/How_to_write_in_Markdown_on_Overleaf "How to write in Markdown on Overleaf" [overleaf-2]: https://www.overleaf.com/learn/latex/Articles/Markdown_into_LaTeX_with_Style "Markdown into LaTeX with Style" @@ -208,19 +218,25 @@ For further information, consult one of the following: [overleaf-5]: https://www.overleaf.com/latex/examples/writing-posters-with-markdown/jtbgmmgqrqmh "Writing Posters with Markdown" [overleaf-6]: https://www.overleaf.com/latex/examples/using-markdown-in-latex-documents/whdrnpcpnwrm "Using Markdown in LaTeX documents" - [tb119]: https://www.tug.org/TUGboat/tb38-2/tb119novotny.pdf "Using Markdown inside TeX documents" - [tb124]: https://www.tug.org/TUGboat/tb40-1/tb124novotny-markdown.pdf "Markdown 2.7.0: Towards lightweight markup in TeX" - [tb129]: https://www.tug.org/TUGboat/tb41-3/tb129novotny-frozen.pdf "Making Markdown into a Microwave Meal" - [tb131]: https://www.tug.org/TUGboat/tb42-2/tb131novotny-markdown.pdf "Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX" - [tb133]: https://www.tug.org/TUGboat/tb43-1/tb133novotny-markdown.pdf "Markdown 2.15.0: What's New?" - [tb135]: https://www.overleaf.com/read/pgwrhhskmgfm "Markdown 2.17.1: What's New, What's Next?" - [tb136]: https://www.overleaf.com/read/dshtsnnmtshs "Attributes in Markdown" - - [tb131-slides]: https://tug.org/tug2021/assets/pdf/tug2021-novotny-slides.pdf "Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX" - [tb131-video]: https://youtu.be/THmPkAncMnc "Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX" - [tb134-slides]: https://tug.org/tug2022/assets/pdf/Tereza_Vrabcová-TUG2022-slides.pdf "A Gentle Introduction to Markdown for Writers" - [tb134-example]: https://tug.org/tug2022/assets/pdf/Tereza_Vrabcová-TUG2022-example.pdf "A Gentle Introduction to Markdown for Writers" - [tb134-video]: https://youtu.be/cqbKgjAlNjo?t=2h10m35s "A Gentle Introduction to Markdown for Writers" + [tb119]: https://www.tug.org/TUGboat/tb38-2/tb119novotny.pdf "Using Markdown inside TeX documents" + [tb124]: https://www.tug.org/TUGboat/tb40-1/tb124novotny-markdown.pdf "Markdown 2.7.0: Towards lightweight markup in TeX" + [tb129]: https://www.tug.org/TUGboat/tb41-3/tb129novotny-frozen.pdf "Making Markdown into a Microwave Meal" + [tb131]: https://www.tug.org/TUGboat/tb42-2/tb131novotny-markdown.pdf "Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX" + [tb133]: https://www.tug.org/TUGboat/tb43-1/tb133novotny-markdown.pdf "Markdown 2.15.0: What's New?" + [tb135]: https://www.tug.org/TUGboat/tb43-3/tb135novotny-markdown.pdf "Markdown 2.17.1: What's New, What's Next?" + [tb136]: https://www.tug.org/TUGboat/tb44-1/tb136novotny-markdown-attr.pdf "Attributes in Markdown" + [tb138]: https://www.overleaf.com/read/mjghwhrbgmfj "Markdown 3 at TUG 2023: Reflections from the Q&A session" + [tb139]: https://github.com/witiko/fast-regression-testing/releases/download/latest/main.pdf "Fast Regression Testing of TeX Packages: The Unreasonable Effectiveness of Batching" + + [tb131-slides]: https://tug.org/tug2021/assets/pdf/tug2021-novotny-slides.pdf "Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX" + [tb131-video]: https://youtu.be/i2GJMnLCZls "Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX" + [tb134-01-slides]: https://tug.org/tug2022/assets/served/Lloyd_Prentice-TUG2022-prentice-selfpub-slides.pdf "A Self-Publisher's Take on Markdown and TeX" + [tb134-01-video]: https://youtu.be/OhwzT3TcLj8 "A Self-Publisher's Take on Markdown and TeX" + [tb134-02-slides]: https://tug.org/tug2022/assets/pdf/Tereza_Vrabcová-TUG2022-slides.pdf "A Gentle Introduction to Markdown for Writers" + [tb134-02-example]: https://tug.org/tug2022/assets/pdf/Tereza_Vrabcová-TUG2022-example.pdf "A Gentle Introduction to Markdown for Writers" + [tb134-02-video]: https://youtu.be/FhN_x9rsR4M "A Gentle Introduction to Markdown for Writers" + [tb137-slides]: https://tug.org/tug2023/files/sa-03-novotny-markdown3/novotny-markdown3-slides.pdf "Markdown 3: What's New, What's Next?" + [tb137-video]: https://youtu.be/U8XjTOhJkg0 "Markdown 3: What's New, What's Next?" [10.5300/2016-1-4/78]: https://www.doi.org/10.5300/2016-1-4/78 "Rendering Markdown inside TeX Documents" [10.5300/2020-1-2/48]: https://www.doi.org/10.5300/2020-1-2/48 "Markdown 2.8.1: Boldly Unto the Throne of Lightweight Markup in TeX" @@ -228,7 +244,9 @@ For further information, consult one of the following: [10.5300/2021-1-4/83]: https://www.doi.org/10.5300/2021-1-4/83 "Direct Typesetting of Various Document Formats in TeX Using the Pandoc Utility" [10.5300/2022-1-4/35]: https://www.doi.org/10.5300/2022-1-4/35 "High-Level Languages for TeX" - [pv212-fall2020]: https://is.muni.cz/elearning/warp?qurl=%2Fel%2Ffi%2Fpodzim2020%2FPV212%2Findex.qwarp;prejit=5595952 + [10.5300/2023-?-?/??]: https://github.com/witiko/markdown-3-whats-new-whats-next/releases/download/latest/main.pdf "Markdown 3: What's New, What's Next?" + + [pv212-fall2020]: https://is.muni.cz/elearning/io/?qurl=%2Fel%2Ffi%2Fpodzim2020%2FPV212%2Findex.qwarp;prejit=5595952 [install]: https://mirrors.ctan.org/macros/generic/markdown/markdown.html#installation "Markdown Package User Manual" [liantze]: http://liantze.penguinattack.org/ "Rants from the Lab" @@ -243,6 +261,7 @@ For further information, consult one of the following: [techdoc-tex-live]: https://mirrors.ctan.org/macros/generic/markdown/markdown.pdf "A Markdown Interpreter for TeX" [thesis-umhg5]: https://is.muni.cz/th/umhg5/?lang=en "Generic TeX Writer for the Pandoc Document Converter" + [thesis-r7z7l]: https://is.muni.cz/th/r7z7l/?lang=en "An implementation of the CommonMark standard into the Markdown package for TeX" Acknowledgements ---------------- @@ -252,12 +271,17 @@ Acknowledgements | [<img width="150" src="https://www.fi.muni.cz/images/fi-logo.png">][fimu] | I gratefully acknowledge the funding from the [Faculty of Informatics][fimu] at the [Masaryk University][mu] in Brno, Czech Republic, for the development of the Markdown package in projects [MUNI/33/12/2015][], [MUNI/33/1784/2020][], [MUNI/33/0776/2021][], [MUNI/33/1654/2022][], and [MUNI/33/1658/2022][]. | | [<img width="150" src="https://cdn.overleaf.com/img/ol-brand/overleaf_og_logo.png">][overleaf] | Extensive user documentation for the Markdown package was kindly written by [Lian Tze Lim][liantze] and published by [Overleaf][]. | | [<img width="150" src="https://pbs.twimg.com/profile_images/1004769879319334912/6Bh1UthD.jpg">][omedym] | Support for content slicing (Lua options [`shiftHeadings`][option-shift-headings] and [`slice`][option-slice]) and pipe tables (Lua options [`pipeTables`][option-pipe-tables] and [`tableCaptions`][option-table-captions]) was graciously sponsored by [David Vins][dvins] and [Omedym][]. | +| [<img width="150" src="https://www.istqb.org/static/istqb-logo-1b043e800a580724ad223567f9ea57c0.png">][istqb] | Fixes for issues [#359][issue-359] and [#368][issue-368] were graciously sponsored by the [International Software Testing Qualifications Board (ISTQB)][istqb]. | [dvins]: https://github.com/dvins "David Vins" [fimu]: https://www.fi.muni.cz/index.html.en "Faculty of Informatics, Masaryk University" + [ISTQB]: https://www.istqb.org/ "International Software Testing Qualifications Board" [mu]: https://www.muni.cz/en "Masaryk University" [Omedym]: https://www.omedym.com/ "Omedym" + [issue-359]: https://github.com/witiko/markdown/issues/359 "First item of a fancy list forms a separate list" + [issue-368]: https://github.com/witiko/markdown/issues/368 "Tables nested in list items have empty lines" + [option-pipe-tables]: https://mirrors.ctan.org/macros/generic/markdown/markdown.html#pipe-tables "Markdown Package User Manual" [option-shift-headings]: https://mirrors.ctan.org/macros/generic/markdown/markdown.html#option-shiftheadings "Markdown Package User Manual" [option-slice]: https://mirrors.ctan.org/macros/generic/markdown/markdown.html#slice "Markdown Package User Manual" diff --git a/Master/texmf-dist/doc/generic/markdown/VERSION b/Master/texmf-dist/doc/generic/markdown/VERSION index 51e0f673296..941a04710b1 100644 --- a/Master/texmf-dist/doc/generic/markdown/VERSION +++ b/Master/texmf-dist/doc/generic/markdown/VERSION @@ -1 +1 @@ -2.23.0-0-g0b22f91 (2023-04-27) +3.4.1-0-g457226ae (2024-02-16) diff --git a/Master/texmf-dist/doc/generic/markdown/markdown.html b/Master/texmf-dist/doc/generic/markdown/markdown.html index 73188146243..a9235283635 100644 --- a/Master/texmf-dist/doc/generic/markdown/markdown.html +++ b/Master/texmf-dist/doc/generic/markdown/markdown.html @@ -4,17 +4,27 @@ <meta charset="utf-8" /> <meta name="generator" content="pandoc" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> - <meta name="author" content="Vít Novotný" /> + <meta name="author" content="Vít Starý Novotný" /> <title>Markdown Package User Manual</title> <style> code{white-space: pre-wrap;} span.smallcaps{font-variant: small-caps;} - span.underline{text-decoration: underline;} - div.column{display: inline-block; vertical-align: top; width: 50%;} + div.columns{display: flex; gap: min(4vw, 1.5em);} + div.column{flex: auto; overflow-x: auto;} div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} - ul.task-list{list-style: none;} + /* The extra [class] is a hack that increases specificity enough to + override a similar rule in reveal.js */ + ul.task-list[class]{list-style: none;} + ul.task-list li input[type="checkbox"] { + font-size: inherit; + width: 0.8em; + margin: 0 0.8em 0.2em -1.6em; + vertical-align: middle; + } + .display.math{display: block; text-align: center; margin: 0.5rem auto;} + /* CSS for syntax highlighting */ pre > code.sourceCode { white-space: pre; position: relative; } - pre > code.sourceCode > span { display: inline-block; line-height: 1.25; } + pre > code.sourceCode > span { line-height: 1.25; } pre > code.sourceCode > span:empty { height: 1.2em; } .sourceCode { overflow: visible; } code.sourceCode > span { color: inherit; text-decoration: inherit; } @@ -76,77 +86,92 @@ code span.va { color: #19177c; } /* Variable */ code span.vs { color: #4070a0; } /* VerbatimString */ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */ - .display.math{display: block; text-align: center; margin: 0.5rem auto;} </style> <link rel="stylesheet" href="markdown.css" /> </head> <body> <header id="title-block-header"> <h1 class="title">Markdown Package User Manual</h1> -<p class="author">Vít Novotný</p> -<p class="date">2.23.0-0-g0b22f91 2023-04-27</p> +<p class="author">Vít Starý Novotný</p> +<p class="date">3.4.1-0-g457226ae 2024-02-16</p> </header> <nav id="TOC" role="doc-toc"> <ul> -<li><a href="#introduction"><span class="toc-section-number">1</span> -Introduction</a> +<li><a href="#introduction" id="toc-introduction"><span +class="toc-section-number">1</span> Introduction</a> <ul> -<li><a href="#requirements"><span class="toc-section-number">1.1</span> -Requirements</a></li> -<li><a href="#installation"><span class="toc-section-number">1.2</span> -Installation</a> +<li><a href="#requirements" id="toc-requirements"><span +class="toc-section-number">1.1</span> Requirements</a></li> +<li><a href="#installation" id="toc-installation"><span +class="toc-section-number">1.2</span> Installation</a> <ul> -<li><a href="#local-installation"><span +<li><a href="#local-installation" id="toc-local-installation"><span class="toc-section-number">1.2.1</span> Local Installation</a></li> -<li><a href="#portable-installation"><span +<li><a href="#portable-installation" +id="toc-portable-installation"><span class="toc-section-number">1.2.2</span> Portable Installation</a></li> </ul></li> -<li><a href="#first-document"><span +<li><a href="#first-document" id="toc-first-document"><span class="toc-section-number">1.3</span> First Document</a> <ul> -<li><a href="#using-lua"><span class="toc-section-number">1.3.1</span> -Using Lua</a></li> -<li><a href="#using-plain-tex"><span +<li><a href="#using-lua" id="toc-using-lua"><span +class="toc-section-number">1.3.1</span> Using Lua</a></li> +<li><a href="#using-plain-tex" id="toc-using-plain-tex"><span class="toc-section-number">1.3.2</span> Using Plain <span class="tex">T<sub>e</sub>X</span></a></li> -<li><a href="#using-latex"><span class="toc-section-number">1.3.3</span> -Using <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span></a></li> -<li><a href="#using-context"><span +<li><a href="#using-latex" id="toc-using-latex"><span +class="toc-section-number">1.3.3</span> Using <span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span></a></li> +<li><a href="#using-context" id="toc-using-context"><span class="toc-section-number">1.3.4</span> Using Con<span class="tex">T<sub>e</sub>X</span>t</a></li> </ul></li> </ul></li> -<li><a href="#examples"><span class="toc-section-number">2</span> -Examples</a> +<li><a href="#examples" id="toc-examples"><span +class="toc-section-number">2</span> Examples</a> <ul> -<li><a href="#interfaces"><span class="toc-section-number">2.1</span> -Interfaces</a> +<li><a href="#interfaces" id="toc-interfaces"><span +class="toc-section-number">2.1</span> Interfaces</a> <ul> -<li><a href="#lua"><span class="toc-section-number">2.1.1</span> -Lua</a></li> -<li><a href="#plain-tex"><span class="toc-section-number">2.1.2</span> -Plain <span class="tex">T<sub>e</sub>X</span></a></li> -<li><a href="#latex"><span class="toc-section-number">2.1.3</span> <span +<li><a href="#lua" id="toc-lua"><span +class="toc-section-number">2.1.1</span> Lua</a></li> +<li><a href="#plain-tex" id="toc-plain-tex"><span +class="toc-section-number">2.1.2</span> Plain <span +class="tex">T<sub>e</sub>X</span></a></li> +<li><a href="#latex" id="toc-latex"><span +class="toc-section-number">2.1.3</span> <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span></a></li> -<li><a href="#context"><span class="toc-section-number">2.1.4</span> -Con<span class="tex">T<sub>e</sub>X</span>t</a></li> +<li><a href="#context" id="toc-context"><span +class="toc-section-number">2.1.4</span> Con<span +class="tex">T<sub>e</sub>X</span>t</a></li> </ul></li> -<li><a href="#options"><span class="toc-section-number">2.2</span> -Options</a> +<li><a href="#options" id="toc-options"><span +class="toc-section-number">2.2</span> Options</a> <ul> -<li><a href="#lua-1"><span class="toc-section-number">2.2.1</span> -Lua</a></li> -<li><a href="#plain-tex-1"><span class="toc-section-number">2.2.2</span> -Plain <span class="tex">T<sub>e</sub>X</span></a></li> -<li><a href="#latex-1"><span class="toc-section-number">2.2.3</span> -<span class="latex">L<sup>a</sup>T<sub>e</sub>X</span></a></li> +<li><a href="#lua-1" id="toc-lua-1"><span +class="toc-section-number">2.2.1</span> Lua</a></li> +<li><a href="#plain-tex-1" id="toc-plain-tex-1"><span +class="toc-section-number">2.2.2</span> Plain <span +class="tex">T<sub>e</sub>X</span></a></li> +<li><a href="#themes" id="toc-themes"><span +class="toc-section-number">2.2.3</span> Themes</a></li> +<li><a href="#snippets" id="toc-snippets"><span +class="toc-section-number">2.2.4</span> Snippets</a></li> +<li><a href="#latex-1" id="toc-latex-1"><span +class="toc-section-number">2.2.5</span> <span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span></a></li> +<li><a href="#latexthemes" id="toc-latexthemes"><span +class="toc-section-number">2.2.6</span> Themes</a></li> +<li><a href="#themes-1" id="toc-themes-1"><span +class="toc-section-number">2.2.7</span> Themes</a></li> </ul></li> -<li><a href="#markdown-tokens"><span +<li><a href="#markdown-tokens" id="toc-markdown-tokens"><span class="toc-section-number">2.3</span> Markdown Tokens</a> <ul> -<li><a href="#texrenderersuser"><span +<li><a href="#texrenderersuser" id="toc-texrenderersuser"><span class="toc-section-number">2.3.1</span> Token Renderers</a></li> -<li><a href="#texrendererprototypes"><span +<li><a href="#texrendererprototypes" +id="toc-texrendererprototypes"><span class="toc-section-number">2.3.2</span> Token Renderer Prototypes</a></li> </ul></li> @@ -158,10 +183,10 @@ Prototypes</a></li> class="header-section-number">1</span> Introduction</h1> <p>The <a href="https://ctan.org/pkg/markdown" title="CTAN: Package markdown">Markdown package</a> converts <a -href="https://daringfireball.net/projects/markdown/basics" -title="Daring Fireball: Markdown Basics">markdown</a> markup to <span -class="tex">T<sub>e</sub>X</span> commands. The functionality is -provided both as a Lua module and as plain <span +href="https://commonmark.org/" +title="CommonMark: A strongly defined, highly compatible specification of Markdown">CommonMark</a> +markup to <span class="tex">T<sub>e</sub>X</span> commands. The +functionality is provided both as a Lua module and as plain <span class="tex">T<sub>e</sub>X</span>, <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span>, and Con<span class="tex">T<sub>e</sub>X</span>t macro packages that can be used to @@ -209,25 +234,28 @@ it.</p> <span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="fu">make</span> base</span></code></pre></div> <p>This should produce the following files:</p> <ul> -<li><code>markdown.lua</code>, the Lua module,</li> -<li><code>libraries/markdown-tinyyaml.lua</code>, an external library -for reading <abbr>yaml</abbr>,</li> -<li><code>markdown-cli.lua</code>, the Lua command-line interface,</li> -<li><code>markdown.tex</code>, the plain <span -class="tex">T<sub>e</sub>X</span> macro package,</li> -<li><code>markdown.sty</code>, the <span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> package,</li> -<li><code>markdownthemewitiko_dot.sty</code>, the +<li><code>markdown.lua</code>: The Lua module</li> +<li><code>libraries/markdown-tinyyaml.lua</code>: An external library +for reading <abbr>yaml</abbr></li> +<li><code>markdown-cli.lua</code>: The Lua command-line interface</li> +<li><code>markdown.tex</code>: The plain <span +class="tex">T<sub>e</sub>X</span> macro package</li> +<li><code>markdown.sty</code>: The <span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> package</li> +<li><code>markdownthemewitiko_dot.sty</code>: The <code>witiko/dot</code> <span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> theme,</li> -<li><code>markdownthemewitiko_graphicx_http.sty</code>, the +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> theme</li> +<li><code>markdownthemewitiko_graphicx_http.sty</code>: The <code>witiko/graphicx/http</code> <span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> theme,</li> -<li><code>markdownthemewitiko_tilde.sty</code>, the -<code>witiko/tilde</code> <span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> theme, and</li> -<li><code>t-markdown.tex</code>, the Con<span -class="tex">T<sub>e</sub>X</span>t module.</li> +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> theme</li> +<li><code>markdownthemewitiko_tilde.tex</code>: The +<code>witiko/tilde</code> theme</li> +<li><code>markdownthemewitiko_markdown_defaults.tex</code>, +<code>markdownthemewitiko_markdown_defaults.sty</code>, and +<code>t-markdownthemewitiko_markdown_defaults.tex</code>: The +<code>witiko/markdown/defaults</code> theme</li> +<li><code>t-markdown.tex</code>: The Con<span +class="tex">T<sub>e</sub>X</span>t module</li> </ul> <h3 data-number="1.2.1" id="local-installation"><span class="header-section-number">1.2.1</span> Local Installation</h3> @@ -239,11 +267,14 @@ generally where the individual files should be placed:</p> <li><code>⟨TEXMF⟩/tex/luatex/markdown/markdown-tinyyaml.lua</code></li> <li><code>⟨TEXMF⟩/scripts/markdown/markdown-cli.lua</code></li> <li><code>⟨TEXMF⟩/tex/generic/markdown/markdown.tex</code></li> +<li><code>⟨TEXMF⟩/tex/generic/markdown/markdownthemewitiko_tilde.tex</code></li> +<li><code>⟨TEXMF⟩/tex/generic/markdown/markdownthemewitiko_markdown_defaults.tex</code></li> <li><code>⟨TEXMF⟩/tex/latex/markdown/markdown.sty</code></li> <li><code>⟨TEXMF⟩/tex/latex/markdown/markdownthemewitiko_dot.sty</code></li> <li><code>⟨TEXMF⟩/tex/latex/markdown/markdownthemewitiko_graphicx_http.sty</code></li> -<li><code>⟨TEXMF⟩/tex/latex/markdown/markdownthemewitiko_tilde.sty</code></li> +<li><code>⟨TEXMF⟩/tex/latex/markdown/markdownthemewitiko_markdown_defaults.sty</code></li> <li><code>⟨TEXMF⟩/tex/context/third/markdown/t-markdown.tex</code></li> +<li><code>⟨TEXMF⟩/tex/context/third/markdown/t-markdownthemewitiko_markdown_defaults.tex</code></li> </ul> <p>where <code>⟨TEXMF⟩</code> corresponds to a root of your <span class="tex">T<sub>e</sub>X</span> distribution, such as @@ -257,11 +288,21 @@ class="header-section-number">1.2.2</span> Portable Installation</h3> as your <span class="tex">T<sub>e</sub>X</span> document and distribute them together. This way your document can be portably typeset on legacy <span class="tex">T<sub>e</sub>X</span> distributions.</p> -<p>Since Markdown version 2.10.0, the file <code>markdown.tex</code> -must be placed in a directory named <code>markdown</code> due to <a -href="https://github.com/witiko/markdown/issues/74" -title="Does not compile if user names own document markdown.tex">issue -#74</a>.</p> +<p>This is where the individual files should be placed:</p> +<ul> +<li><code>./markdown.lua</code></li> +<li><code>./markdown-tinyyaml.lua</code></li> +<li><code>./markdown-cli.lua</code></li> +<li><code>./markdown/markdown.tex</code></li> +<li><code>./markdown.sty</code></li> +<li><code>./t-markdown.tex</code></li> +<li><code>./markdownthemewitiko_dot.sty</code></li> +<li><code>./markdownthemewitiko_graphicx_http.sty</code></li> +<li><code>./markdownthemewitiko_tilde.tex</code></li> +<li><code>./markdownthemewitiko_markdown_defaults.tex</code></li> +<li><code>./markdownthemewitiko_markdown_defaults.sty</code></li> +<li><code>./t-markdownthemewitiko_markdown_defaults.tex</code></li> +</ul> <h2 data-number="1.3" id="first-document"><span class="header-section-number">1.3</span> First Document</h2> <p>In this section, we will take the necessary steps to typeset our @@ -283,18 +324,22 @@ class="header-section-number">1.3.1</span> Using Lua</h3> <code>document.tex</code> with the following content:</p> <div class="sourceCode" id="cb4"><pre class="sourceCode tex"><code class="sourceCode latex"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> hello</span> -<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> hello</span> +<span id="cb4-6"><a href="#cb4-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb4-7"><a href="#cb4-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <h4 data-number="1.3.1.1" id="using-the-lua-module"><span class="header-section-number">1.3.1.1</span> Using the Lua Module</h4> <p>Using a text editor, create a text document named <code>hello.lua</code> with the following content:</p> <div class="sourceCode" id="cb5"><pre class="sourceCode lua"><code class="sourceCode lua"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="co">#!/usr/bin/env texlua</span></span> -<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> ran_ok<span class="op">,</span> kpse <span class="op">=</span> <span class="fu">pcall</span><span class="op">(</span><span class="fu">require</span><span class="op">,</span> <span class="st">"kpse"</span><span class="op">)</span></span> -<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> ran_ok <span class="cf">then</span> kpse<span class="op">.</span>set_program_name<span class="op">(</span><span class="st">"luatex"</span><span class="op">)</span> <span class="cf">end</span></span> -<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> markdown <span class="op">=</span> <span class="fu">require</span><span class="op">(</span><span class="st">"markdown"</span><span class="op">)</span></span> -<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> convert <span class="op">=</span> markdown<span class="op">.</span>new<span class="op">()</span></span> +<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> <span class="va">kpse</span> <span class="op">=</span> <span class="fu">require</span><span class="op">(</span><span class="st">"kpse"</span><span class="op">)</span></span> +<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a><span class="va">kpse</span><span class="op">.</span>set_program_name<span class="op">(</span><span class="st">"luatex"</span><span class="op">)</span></span> +<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> <span class="va">markdown</span> <span class="op">=</span> <span class="fu">require</span><span class="op">(</span><span class="st">"markdown"</span><span class="op">)</span></span> +<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> <span class="va">convert</span> <span class="op">=</span> <span class="va">markdown</span><span class="op">.</span>new<span class="op">()</span></span> <span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a><span class="fu">print</span><span class="op">(</span>convert<span class="op">(</span><span class="st">"Hello *world*!"</span><span class="op">))</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> <div class="sourceCode" id="cb6"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> hello.lua <span class="op">></span> hello.tex</span> @@ -344,77 +389,144 @@ class="sourceCode tex"><code class="sourceCode latex"><span id="cb11-1"><a href= <div class="sourceCode" id="cb12"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and -contain the text “Hello <em>world</em>!” Invoking pdfTeX should have the -same effect:</p> +contain the text “Hello <em>world</em>!”</p> +<p>Instead of LuaTeX, you may also use pdfTeX:</p> <div class="sourceCode" id="cb13"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdftex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> +<p>This should also produce a PDF document named +<code>document.pdf</code> with the same content.</p> +<hr /> +<p>Instead of writing your markdown document between +<code>\markdownBegin</code> and <code>\markdownEnd</code>, you can also +include markdown documents using the <code>\markdownInput</code> macro, +similarly to how you might use the <code>\input</code> TeX primitive to +include <span class="tex">T<sub>e</sub>X</span> documents.</p> +<p>Using a text editor, create a text document named +<code>hello.md</code> with the following content:</p> +<div class="sourceCode" id="cb14"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span></code></pre></div> +<p>Create also a text document named <code>document.tex</code> with the +following content:</p> +<div class="sourceCode" id="cb15"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb15-2"><a href="#cb15-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{hello.md}</span> +<span id="cb15-3"><a href="#cb15-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<p>Next, invoke LuaTeX or pdfTeX from the terminal like in the previous +example. A PDF document named <code>document.pdf</code> should be +produced and contain the text “Hello <em>world</em>!”</p> <h3 data-number="1.3.3" id="using-latex"><span class="header-section-number">1.3.3</span> Using <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span></h3> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb14"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb14-2"><a href="#cb14-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb14-3"><a href="#cb14-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb14-4"><a href="#cb14-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb14-5"><a href="#cb14-5" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb14-6"><a href="#cb14-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb14-7"><a href="#cb14-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb16"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb16-2"><a href="#cb16-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb16-3"><a href="#cb16-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb16-4"><a href="#cb16-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb16-5"><a href="#cb16-5" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> +<span id="cb16-6"><a href="#cb16-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb16-7"><a href="#cb16-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb15"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb17"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and -contain the text “Hello <em>world</em>!” Invoking pdfTeX should have the -same effect:</p> -<div class="sourceCode" id="cb16"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdflatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> +contain the text “Hello <em>world</em>!”</p> +<p>Instead of LuaTeX, you may also use pdfTeX:</p> +<div class="sourceCode" id="cb18"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdflatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> +<p>This should also produce a PDF document named +<code>document.pdf</code> with the same content.</p> +<hr /> +<p>Instead of writing your markdown document between +<code>\begin{markdown}</code> and <code>\end{markdown}</code>, you can +also include markdown documents using the <code>\markdownInput</code> +macro, similarly to how you might use the <code>\input</code> TeX +primitive to include <span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> documents.</p> +<p>Using a text editor, create a text document named +<code>hello.md</code> with the following content:</p> +<div class="sourceCode" id="cb19"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span></code></pre></div> +<p>Create also a text document named <code>document.tex</code> with the +following content:</p> +<div class="sourceCode" id="cb20"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb20-2"><a href="#cb20-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb20-3"><a href="#cb20-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb20-4"><a href="#cb20-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb20-5"><a href="#cb20-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{hello.md}</span> +<span id="cb20-6"><a href="#cb20-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb20-7"><a href="#cb20-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX or pdfTeX from the terminal like in the previous +example. A PDF document named <code>document.pdf</code> should be +produced and contain the text “Hello <em>world</em>!”</p> <hr /> <p>As the next step, try typesetting the example documents distributed along with the Markdown package:</p> -<div class="sourceCode" id="cb17"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> clone https://github.com/witiko/markdown</span> -<span id="cb17-2"><a href="#cb17-2" aria-hidden="true" tabindex="-1"></a><span class="bu">cd</span> markdown/examples</span> -<span id="cb17-3"><a href="#cb17-3" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> latex-luatex.tex</span></code></pre></div> +<div class="sourceCode" id="cb21"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb21-1"><a href="#cb21-1" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> clone https://github.com/witiko/markdown</span> +<span id="cb21-2"><a href="#cb21-2" aria-hidden="true" tabindex="-1"></a><span class="bu">cd</span> markdown/examples</span> +<span id="cb21-3"><a href="#cb21-3" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> latex-luatex.tex</span></code></pre></div> <p>A PDF document named <code>latex-luatex.pdf</code> should be produced. Open the text documents <code>latex-luatex.tex</code> and <code>example.md</code> in a text editor to see how the example documents are structured. Try changing the documents and typesetting them as follows:</p> -<div class="sourceCode" id="cb18"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> latex-luatex.tex</span></code></pre></div> +<div class="sourceCode" id="cb22"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> latex-luatex.tex</span></code></pre></div> <p>to see the effect of your changes.</p> <h3 data-number="1.3.4" id="using-context"><span class="header-section-number">1.3.4</span> Using Con<span class="tex">T<sub>e</sub>X</span>t</h3> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb19"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb19-2"><a href="#cb19-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb19-3"><a href="#cb19-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb19-4"><a href="#cb19-4" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb19-5"><a href="#cb19-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb19-6"><a href="#cb19-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb23"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb23-1"><a href="#cb23-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb23-2"><a href="#cb23-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb23-3"><a href="#cb23-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb23-4"><a href="#cb23-4" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> +<span id="cb23-5"><a href="#cb23-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb23-6"><a href="#cb23-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb20"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb24"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb24-1"><a href="#cb24-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!”</p> <hr /> +<p>Instead of writing your markdown document between +<code>\startmarkdown</code> and <code>\stopmarkdown</code>, you can also +include markdown documents using the <code>\inputmarkdown</code> macro, +similarly to how you might use the <code>\input</code> TeX primitive to +include Con<span class="tex">T<sub>e</sub>X</span>t documents.</p> +<p>Using a text editor, create a text document named +<code>hello.md</code> with the following content:</p> +<div class="sourceCode" id="cb25"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span></code></pre></div> +<p>Create also a text document named <code>document.tex</code> with the +following content:</p> +<div class="sourceCode" id="cb26"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb26-1"><a href="#cb26-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb26-2"><a href="#cb26-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb26-3"><a href="#cb26-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\inputmarkdown</span>{hello.md}</span> +<span id="cb26-4"><a href="#cb26-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal like in the previous example. A +PDF document named <code>document.pdf</code> should be produced and +contain the text “Hello <em>world</em>!”</p> +<hr /> <p>As the next step, try typesetting the example documents distributed along with the Markdown package:</p> -<div class="sourceCode" id="cb21"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb21-1"><a href="#cb21-1" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> clone https://github.com/witiko/markdown</span> -<span id="cb21-2"><a href="#cb21-2" aria-hidden="true" tabindex="-1"></a><span class="bu">cd</span> markdown/examples</span> -<span id="cb21-3"><a href="#cb21-3" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> context.tex</span></code></pre></div> +<div class="sourceCode" id="cb27"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb27-1"><a href="#cb27-1" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> clone https://github.com/witiko/markdown</span> +<span id="cb27-2"><a href="#cb27-2" aria-hidden="true" tabindex="-1"></a><span class="bu">cd</span> markdown/examples</span> +<span id="cb27-3"><a href="#cb27-3" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> context.tex</span></code></pre></div> <p>A PDF document named <code>context.pdf</code> should be produced. Open the text documents <code>context.tex</code> and <code>example.md</code> in a text editor to see how the example documents are structured. Try changing the documents and typesetting them as follows:</p> -<div class="sourceCode" id="cb22"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> context.tex</span></code></pre></div> +<div class="sourceCode" id="cb28"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb28-1"><a href="#cb28-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> context.tex</span></code></pre></div> <p>to see the effect of your changes.</p> <h1 data-number="2" id="examples"><span class="header-section-number">2</span> Examples</h1> @@ -457,33 +569,37 @@ parameter is optional; when unspecified, the behaviour will be the same as if ⟨<em>options</em>⟩ were an empty table.</p> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb23"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb23-1"><a href="#cb23-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb23-2"><a href="#cb23-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb23-3"><a href="#cb23-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> example</span> -<span id="cb23-4"><a href="#cb23-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb29"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb29-1"><a href="#cb29-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb29-2"><a href="#cb29-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb29-3"><a href="#cb29-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb29-4"><a href="#cb29-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb29-5"><a href="#cb29-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb29-6"><a href="#cb29-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> example</span> +<span id="cb29-7"><a href="#cb29-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb29-8"><a href="#cb29-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>example.lua</code> with the following content:</p> -<div class="sourceCode" id="cb24"><pre -class="sourceCode lua"><code class="sourceCode lua"><span id="cb24-1"><a href="#cb24-1" aria-hidden="true" tabindex="-1"></a><span class="co">#!/usr/bin/env texlua</span></span> -<span id="cb24-2"><a href="#cb24-2" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> ran_ok<span class="op">,</span> kpse <span class="op">=</span> <span class="fu">pcall</span><span class="op">(</span><span class="fu">require</span><span class="op">,</span> <span class="st">"kpse"</span><span class="op">)</span></span> -<span id="cb24-3"><a href="#cb24-3" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> ran_ok <span class="cf">then</span> kpse<span class="op">.</span>set_program_name<span class="op">(</span><span class="st">"luatex"</span><span class="op">)</span> <span class="cf">end</span></span> -<span id="cb24-4"><a href="#cb24-4" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> markdown <span class="op">=</span> <span class="fu">require</span><span class="op">(</span><span class="st">"markdown"</span><span class="op">)</span></span> -<span id="cb24-5"><a href="#cb24-5" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> input<span class="op">,</span> convert_safe<span class="op">,</span> convert_unsafe<span class="op">,</span> paragraph</span> -<span id="cb24-6"><a href="#cb24-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb24-7"><a href="#cb24-7" aria-hidden="true" tabindex="-1"></a>input <span class="op">=</span> <span class="vs">[[$\sqrt{-1}$ *equals* $i$.]]</span></span> -<span id="cb24-8"><a href="#cb24-8" aria-hidden="true" tabindex="-1"></a>convert_safe <span class="op">=</span> markdown<span class="op">.</span>new<span class="op">()</span></span> -<span id="cb24-9"><a href="#cb24-9" aria-hidden="true" tabindex="-1"></a>convert_unsafe <span class="op">=</span> markdown<span class="op">.</span>new<span class="op">({</span>hybrid <span class="op">=</span> <span class="kw">true</span><span class="op">})</span></span> -<span id="cb24-10"><a href="#cb24-10" aria-hidden="true" tabindex="-1"></a>paragraph <span class="op">=</span> <span class="vs">[[\par]]</span></span> -<span id="cb24-11"><a href="#cb24-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb24-12"><a href="#cb24-12" aria-hidden="true" tabindex="-1"></a><span class="fu">print</span><span class="op">(</span></span> -<span id="cb24-13"><a href="#cb24-13" aria-hidden="true" tabindex="-1"></a> convert_safe<span class="op">(</span>input<span class="op">)</span> <span class="op">..</span> paragraph <span class="op">..</span></span> -<span id="cb24-14"><a href="#cb24-14" aria-hidden="true" tabindex="-1"></a> convert_unsafe<span class="op">(</span>input<span class="op">)</span></span> -<span id="cb24-15"><a href="#cb24-15" aria-hidden="true" tabindex="-1"></a><span class="op">)</span></span></code></pre></div> +<div class="sourceCode" id="cb30"><pre +class="sourceCode lua"><code class="sourceCode lua"><span id="cb30-1"><a href="#cb30-1" aria-hidden="true" tabindex="-1"></a><span class="co">#!/usr/bin/env texlua</span></span> +<span id="cb30-2"><a href="#cb30-2" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> <span class="va">kpse</span> <span class="op">=</span> <span class="fu">require</span><span class="op">(</span><span class="st">"kpse"</span><span class="op">)</span></span> +<span id="cb30-3"><a href="#cb30-3" aria-hidden="true" tabindex="-1"></a><span class="va">kpse</span><span class="op">.</span>set_program_name<span class="op">(</span><span class="st">"luatex"</span><span class="op">)</span></span> +<span id="cb30-4"><a href="#cb30-4" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> <span class="va">markdown</span> <span class="op">=</span> <span class="fu">require</span><span class="op">(</span><span class="st">"markdown"</span><span class="op">)</span></span> +<span id="cb30-5"><a href="#cb30-5" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> <span class="va">input</span><span class="op">,</span> <span class="va">convert_nomath</span><span class="op">,</span> <span class="va">convert_math</span><span class="op">,</span> <span class="va">paragraph</span></span> +<span id="cb30-6"><a href="#cb30-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb30-7"><a href="#cb30-7" aria-hidden="true" tabindex="-1"></a><span class="va">input</span> <span class="op">=</span> <span class="vs">[[$\sqrt{-1}$ *equals* $i$.]]</span></span> +<span id="cb30-8"><a href="#cb30-8" aria-hidden="true" tabindex="-1"></a><span class="va">convert_nomath</span> <span class="op">=</span> <span class="va">markdown</span><span class="op">.</span>new<span class="op">()</span></span> +<span id="cb30-9"><a href="#cb30-9" aria-hidden="true" tabindex="-1"></a><span class="va">convert_math</span> <span class="op">=</span> <span class="va">markdown</span><span class="op">.</span>new<span class="op">({</span><span class="va">texMathDollars</span> <span class="op">=</span> <span class="kw">true</span><span class="op">})</span></span> +<span id="cb30-10"><a href="#cb30-10" aria-hidden="true" tabindex="-1"></a><span class="va">paragraph</span> <span class="op">=</span> <span class="vs">[[\par]]</span></span> +<span id="cb30-11"><a href="#cb30-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb30-12"><a href="#cb30-12" aria-hidden="true" tabindex="-1"></a><span class="fu">print</span><span class="op">(</span></span> +<span id="cb30-13"><a href="#cb30-13" aria-hidden="true" tabindex="-1"></a> convert_nomath<span class="op">(</span><span class="va">input</span><span class="op">)</span> <span class="op">..</span> <span class="va">paragraph</span> <span class="op">..</span></span> +<span id="cb30-14"><a href="#cb30-14" aria-hidden="true" tabindex="-1"></a> convert_math<span class="op">(</span><span class="va">input</span><span class="op">)</span></span> +<span id="cb30-15"><a href="#cb30-15" aria-hidden="true" tabindex="-1"></a><span class="op">)</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb25"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> example.lua <span class="op">></span> example.tex</span> -<span id="cb25-2"><a href="#cb25-2" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb31"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb31-1"><a href="#cb31-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> example.lua <span class="op">></span> example.tex</span> +<span id="cb31-2"><a href="#cb31-2" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -492,35 +608,35 @@ contain the following text:</p> <em>equals</em> <math><mi>i</mi></math>.</p> </blockquote> <p>Invoking pdfTeX should have the same effect:</p> -<div class="sourceCode" id="cb26"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb26-1"><a href="#cb26-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> example.lua <span class="op">></span> example.tex</span> -<span id="cb26-2"><a href="#cb26-2" aria-hidden="true" tabindex="-1"></a><span class="ex">pdftex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb32"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb32-1"><a href="#cb32-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> example.lua <span class="op">></span> example.tex</span> +<span id="cb32-2"><a href="#cb32-2" aria-hidden="true" tabindex="-1"></a><span class="ex">pdftex</span> document.tex</span></code></pre></div> <hr /> <p>Rather than use the <code>texlua</code> interpreter, we can also access the <code>markdown</code> Lua module directly from our document. Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb27"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb27-1"><a href="#cb27-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb27-2"><a href="#cb27-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb27-3"><a href="#cb27-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb27-4"><a href="#cb27-4" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb27-5"><a href="#cb27-5" aria-hidden="true" tabindex="-1"></a> local input, convert_safe, convert_unsafe, paragraph</span> -<span id="cb27-6"><a href="#cb27-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb27-7"><a href="#cb27-7" aria-hidden="true" tabindex="-1"></a> input = [[<span class="ss">$</span><span class="sc">\string\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.]]</span> -<span id="cb27-8"><a href="#cb27-8" aria-hidden="true" tabindex="-1"></a> convert_safe = markdown.new()</span> -<span id="cb27-9"><a href="#cb27-9" aria-hidden="true" tabindex="-1"></a> convert_unsafe = markdown.new({hybrid = true})</span> -<span id="cb27-10"><a href="#cb27-10" aria-hidden="true" tabindex="-1"></a> paragraph = [[<span class="fu">\par</span>]]</span> -<span id="cb27-11"><a href="#cb27-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb27-12"><a href="#cb27-12" aria-hidden="true" tabindex="-1"></a> tex.sprint(</span> -<span id="cb27-13"><a href="#cb27-13" aria-hidden="true" tabindex="-1"></a> convert_safe(input) .. paragraph ..</span> -<span id="cb27-14"><a href="#cb27-14" aria-hidden="true" tabindex="-1"></a> convert_unsafe(input)</span> -<span id="cb27-15"><a href="#cb27-15" aria-hidden="true" tabindex="-1"></a> )</span> -<span id="cb27-16"><a href="#cb27-16" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb27-17"><a href="#cb27-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb33"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb33-1"><a href="#cb33-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb33-2"><a href="#cb33-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb33-3"><a href="#cb33-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb33-4"><a href="#cb33-4" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb33-5"><a href="#cb33-5" aria-hidden="true" tabindex="-1"></a> local input, convert_nomath, convert_math, paragraph</span> +<span id="cb33-6"><a href="#cb33-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb33-7"><a href="#cb33-7" aria-hidden="true" tabindex="-1"></a> input = [[<span class="ss">$</span><span class="sc">\string\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.]]</span> +<span id="cb33-8"><a href="#cb33-8" aria-hidden="true" tabindex="-1"></a> convert_nomath = markdown.new()</span> +<span id="cb33-9"><a href="#cb33-9" aria-hidden="true" tabindex="-1"></a> convert_math = markdown.new({texMathDollars = true})</span> +<span id="cb33-10"><a href="#cb33-10" aria-hidden="true" tabindex="-1"></a> paragraph = [[<span class="fu">\par</span>]]</span> +<span id="cb33-11"><a href="#cb33-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb33-12"><a href="#cb33-12" aria-hidden="true" tabindex="-1"></a> tex.sprint(</span> +<span id="cb33-13"><a href="#cb33-13" aria-hidden="true" tabindex="-1"></a> convert_nomath(input) .. paragraph ..</span> +<span id="cb33-14"><a href="#cb33-14" aria-hidden="true" tabindex="-1"></a> convert_math(input)</span> +<span id="cb33-15"><a href="#cb33-15" aria-hidden="true" tabindex="-1"></a> )</span> +<span id="cb33-16"><a href="#cb33-16" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb33-17"><a href="#cb33-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb28"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb28-1"><a href="#cb28-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb34"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb34-1"><a href="#cb34-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -544,25 +660,26 @@ Lua programming language.</p> command-line parameters.</p> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb29"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb29-1"><a href="#cb29-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb29-2"><a href="#cb29-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb29-3"><a href="#cb29-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> safe</span> -<span id="cb29-4"><a href="#cb29-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb29-5"><a href="#cb29-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> -<span id="cb29-6"><a href="#cb29-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> -<span id="cb29-7"><a href="#cb29-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> unsafe</span> -<span id="cb29-8"><a href="#cb29-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> -<span id="cb29-9"><a href="#cb29-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb35"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb35-1"><a href="#cb35-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb35-2"><a href="#cb35-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb35-3"><a href="#cb35-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb35-4"><a href="#cb35-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb35-5"><a href="#cb35-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb35-6"><a href="#cb35-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> nomath</span> +<span id="cb35-7"><a href="#cb35-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> +<span id="cb35-8"><a href="#cb35-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> math</span> +<span id="cb35-9"><a href="#cb35-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb35-10"><a href="#cb35-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>example.md</code> with the following content:</p> -<div class="sourceCode" id="cb30"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb30-1"><a href="#cb30-1" aria-hidden="true" tabindex="-1"></a>$\sqrt{-1}$ *equals* $i$.</span></code></pre></div> +<div class="sourceCode" id="cb36"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb36-1"><a href="#cb36-1" aria-hidden="true" tabindex="-1"></a>$\sqrt{-1}$ *equals* $i$.</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb31"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb31-1"><a href="#cb31-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> example.md safe.tex</span> -<span id="cb31-2"><a href="#cb31-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ hybrid=true <span class="at">--</span> example.md unsafe.tex</span> -<span id="cb31-3"><a href="#cb31-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb37"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb37-1"><a href="#cb37-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> example.md nomath.tex</span> +<span id="cb37-2"><a href="#cb37-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ tex_math_dollars=true <span class="at">--</span> example.md math.tex</span> +<span id="cb37-3"><a href="#cb37-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems @@ -580,10 +697,10 @@ contain the following text:</p> <em>equals</em> <math><mi>i</mi></math>.</p> </blockquote> <p>Invoking pdfTeX should have the same effect:</p> -<div class="sourceCode" id="cb32"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb32-1"><a href="#cb32-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> example.md safe.tex</span> -<span id="cb32-2"><a href="#cb32-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ hybrid=true <span class="at">--</span> example.md unsafe.tex</span> -<span id="cb32-3"><a href="#cb32-3" aria-hidden="true" tabindex="-1"></a><span class="ex">pdftex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb38"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb38-1"><a href="#cb38-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> example.md nomath.tex</span> +<span id="cb38-2"><a href="#cb38-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ tex_math_dollars=true <span class="at">--</span> example.md math.tex</span> +<span id="cb38-3"><a href="#cb38-3" aria-hidden="true" tabindex="-1"></a><span class="ex">pdftex</span> document.tex</span></code></pre></div> <h3 data-number="2.1.2" id="plain-tex"><span class="header-section-number">2.1.2</span> Plain <span class="tex">T<sub>e</sub>X</span></h3> @@ -599,23 +716,23 @@ its own options, but now the options are specified as <span class="tex">T<sub>e</sub>X</span> commands.</p> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb33"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb33-1"><a href="#cb33-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb33-2"><a href="#cb33-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb33-3"><a href="#cb33-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb33-4"><a href="#cb33-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb33-5"><a href="#cb33-5" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> -<span id="cb33-6"><a href="#cb33-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb33-7"><a href="#cb33-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb33-8"><a href="#cb33-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionHybrid</span>{true}</span> -<span id="cb33-9"><a href="#cb33-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb33-10"><a href="#cb33-10" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> -<span id="cb33-11"><a href="#cb33-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb33-12"><a href="#cb33-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb33-13"><a href="#cb33-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb39"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb39-1"><a href="#cb39-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb39-2"><a href="#cb39-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb39-3"><a href="#cb39-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb39-4"><a href="#cb39-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb39-5"><a href="#cb39-5" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> +<span id="cb39-6"><a href="#cb39-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb39-7"><a href="#cb39-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb39-8"><a href="#cb39-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTexMathDollars</span>{true}</span> +<span id="cb39-9"><a href="#cb39-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb39-10"><a href="#cb39-10" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> +<span id="cb39-11"><a href="#cb39-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb39-12"><a href="#cb39-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb39-13"><a href="#cb39-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb34"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb34-1"><a href="#cb34-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb40"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb40-1"><a href="#cb40-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -624,8 +741,8 @@ contain the following text:</p> <em>equals</em> <math><mi>i</mi></math>.</p> </blockquote> <p>Invoking pdfTeX should have the same effect:</p> -<div class="sourceCode" id="cb35"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb35-1"><a href="#cb35-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdftex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb41"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb41-1"><a href="#cb41-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdftex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> <h3 data-number="2.1.3" id="latex"><span class="header-section-number">2.1.3</span> <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span></h3> @@ -647,23 +764,23 @@ or as parameters for the <code>markdown*</code> <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> environment.</p> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb36"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb36-1"><a href="#cb36-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb36-2"><a href="#cb36-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb36-3"><a href="#cb36-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb36-4"><a href="#cb36-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb36-5"><a href="#cb36-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb36-6"><a href="#cb36-6" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> -<span id="cb36-7"><a href="#cb36-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb36-8"><a href="#cb36-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb36-9"><a href="#cb36-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{hybrid}</span> -<span id="cb36-10"><a href="#cb36-10" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> -<span id="cb36-11"><a href="#cb36-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb36-12"><a href="#cb36-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb36-13"><a href="#cb36-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb42"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb42-1"><a href="#cb42-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb42-2"><a href="#cb42-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb42-3"><a href="#cb42-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb42-4"><a href="#cb42-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb42-5"><a href="#cb42-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb42-6"><a href="#cb42-6" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> +<span id="cb42-7"><a href="#cb42-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb42-8"><a href="#cb42-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb42-9"><a href="#cb42-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[texMathDollars]</span> +<span id="cb42-10"><a href="#cb42-10" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> +<span id="cb42-11"><a href="#cb42-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb42-12"><a href="#cb42-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb42-13"><a href="#cb42-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb37"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb37-1"><a href="#cb37-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb43"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb43-1"><a href="#cb43-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -672,8 +789,8 @@ contain the following text:</p> <em>equals</em> <math><mi>i</mi></math>.</p> </blockquote> <p>Invoking pdfTeX should have the same effect:</p> -<div class="sourceCode" id="cb38"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb38-1"><a href="#cb38-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdflatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb44"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb44-1"><a href="#cb44-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdflatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> <h3 data-number="2.1.4" id="context"><span class="header-section-number">2.1.4</span> Con<span class="tex">T<sub>e</sub>X</span>t</h3> @@ -690,23 +807,23 @@ same options as the plain <span class="tex">T<sub>e</sub>X</span> interface.</p> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb39"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb39-1"><a href="#cb39-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb39-2"><a href="#cb39-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb39-3"><a href="#cb39-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb39-4"><a href="#cb39-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb39-5"><a href="#cb39-5" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> -<span id="cb39-6"><a href="#cb39-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb39-7"><a href="#cb39-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb39-8"><a href="#cb39-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[hybrid = yes]</span> -<span id="cb39-9"><a href="#cb39-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb39-10"><a href="#cb39-10" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> -<span id="cb39-11"><a href="#cb39-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb39-12"><a href="#cb39-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb39-13"><a href="#cb39-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb45"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb45-1"><a href="#cb45-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb45-2"><a href="#cb45-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb45-3"><a href="#cb45-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb45-4"><a href="#cb45-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb45-5"><a href="#cb45-5" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> +<span id="cb45-6"><a href="#cb45-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb45-7"><a href="#cb45-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb45-8"><a href="#cb45-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[texmathdollars = yes]</span> +<span id="cb45-9"><a href="#cb45-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb45-10"><a href="#cb45-10" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> +<span id="cb45-11"><a href="#cb45-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb45-12"><a href="#cb45-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb45-13"><a href="#cb45-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb40"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb40-1"><a href="#cb40-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb46"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb46-1"><a href="#cb46-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -726,8 +843,143 @@ of the Markdown package starting with the low-level Lua interfaces and all the way up to the <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> and Con<span class="tex">T<sub>e</sub>X</span>t interfaces.</p> -<h4 data-number="2.2.1.1" id="option-cachedir"><span +<h4 data-number="2.2.1.1" id="option-eagercache"><span class="header-section-number">2.2.1.1</span> Option +<code>eagerCache</code></h4> +<dl> +<dt><code>eagerCache</code> (default value: <code>false</code>)</dt> +<dd> +<dl> +<dt>true</dt> +<dd> +<p>Converted markdown documents will be cached in +<strong><code>cacheDir</code></strong>. This can be useful for +post-processing the converted documents and for recovering historical +versions of the documents from the cache. However, it also produces a +large number of auxiliary files on the disk and obscures the output of +the Lua command-line interface when it is used for plumbing.</p> +<p>This behavior will always be used if the +<strong><code>finalizeCache</code></strong> option is enabled.</p> +</dd> +</dl> +</dd> +<dd> +<dl> +<dt>false</dt> +<dd> +<p>Converted markdown documents will not be cached. This decreases the +number of auxiliary files that we produce and makes it easier to use the +Lua command-line interface for plumbing.</p> +<p>This behavior will only be used when the +<strong><code>finalizeCache</code></strong> option is disabled.</p> +</dd> +</dl> +</dd> +</dl> +<h5 class="unnumbered" id="lua-cli-example">Lua CLI Example</h5> +<p>Using a text editor, create a text document named +<code>hello.md</code> with the following content:</p> +<div class="sourceCode" id="cb47"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb47-1"><a href="#cb47-1" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal with the +<strong><code>eagerCache</code></strong> option disabled:</p> +<div class="sourceCode" id="cb48"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb48-1"><a href="#cb48-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ eagerCache=false <span class="at">--</span> hello.md hello.tex</span></code></pre></div> +<p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua +CLI script file, such as +<code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems +or <code>C:\Users\</code>⟨<em>Your +username</em>⟩<code>\texmf\scripts\markdown\markdown-cli.lua</code> on +Windows systems. Use the command +<code>kpsewhich -a markdown-cli.lua</code> to locate the Lua CLI script +file using <a href="https://tug.org/kpathsea/" +title="Kpathsea - TeX Users Group">Kpathsea</a>.</p> +<p>A <span class="tex">T<sub>e</sub>X</span> document named +<code>hello.tex</code> should be produced and contain the following +code:</p> +<div class="sourceCode" id="cb49"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb49-1"><a href="#cb49-1" aria-hidden="true" tabindex="-1"></a>Hello <span class="fu">\markdownRendererEmphasis</span>{world}!<span class="fu">\relax</span></span></code></pre></div> +<hr /> +<p>Invoke LuaTeX from the terminal again, this time with the +<strong><code>eagerCache</code></strong> option enabled:</p> +<div class="sourceCode" id="cb50"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb50-1"><a href="#cb50-1" aria-hidden="true" tabindex="-1"></a>texlua ⟨CLI pathname⟩ eagerCache=true -- hello.md hello.tex</span></code></pre></div> +<p>A <span class="tex">T<sub>e</sub>X</span> document named +<code>hello.tex</code> should be produced and contain the following +code:</p> +<div class="sourceCode" id="cb51"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb51-1"><a href="#cb51-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> ./⟨hash⟩.md.tex<span class="fu">\relax</span></span></code></pre></div> +<p>Additionally, a <span class="tex">T<sub>e</sub>X</span> document +named <code>⟨hash⟩.md.tex</code> should be produced and contain the +following code:</p> +<div class="sourceCode" id="cb52"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb52-1"><a href="#cb52-1" aria-hidden="true" tabindex="-1"></a>Hello <span class="fu">\markdownRendererEmphasis</span>{world}!<span class="fu">\relax</span></span></code></pre></div> +<h4 data-number="2.2.1.2" id="option-singletoncache"><span +class="header-section-number">2.2.1.2</span> Option +<code>singletonCache</code></h4> +<dl> +<dt><code>singletonCache</code> (default value: <code>true</code>)</dt> +<dd> +<dl> +<dt>true</dt> +<dd> +<p>Conversion functions produced by the function +\luamref{new}<code>(options)</code> will be cached in an LRU cache of +size 1 keyed by <code>options</code>. This is more time- and +space-efficient than always producing a new conversion function but may +expose bugs related to the idempotence of conversion functions.</p> +<p>This has been the default behavior since version 3.0.0 of the +Markdown package.</p> +</dd> +</dl> +</dd> +<dd> +<dl> +<dt>false</dt> +<dd> +<p>Every call to the function \luamref{new}<code>(options)</code> will +produce a new conversion function that will not be cached. This is +slower than caching conversion functions and may expose bugs related to +memory leaks in the creation of conversion functions, see also issue <a +href="https://datatracker.ietf.org/doc/html/rfc3986#section-4.2">#226</a>.</p> +<p>This was the default behavior until version 3.0.0 of the Markdown +package.</p> +</dd> +</dl> +</dd> +</dl> +<h5 class="unnumbered" id="lua-module-example">Lua Module Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb53"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb53-1"><a href="#cb53-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb53-2"><a href="#cb53-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb53-3"><a href="#cb53-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb53-4"><a href="#cb53-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb53-5"><a href="#cb53-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb53-6"><a href="#cb53-6" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb53-7"><a href="#cb53-7" aria-hidden="true" tabindex="-1"></a> local convert1 = markdown.new({})</span> +<span id="cb53-8"><a href="#cb53-8" aria-hidden="true" tabindex="-1"></a> local convert2 = markdown.new({singletonCache=false})</span> +<span id="cb53-9"><a href="#cb53-9" aria-hidden="true" tabindex="-1"></a> local convert3 = markdown.new({singletonCache=true})</span> +<span id="cb53-10"><a href="#cb53-10" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> +<span id="cb53-11"><a href="#cb53-11" aria-hidden="true" tabindex="-1"></a> tex.print(tostring(convert1) .. ", ")</span> +<span id="cb53-12"><a href="#cb53-12" aria-hidden="true" tabindex="-1"></a> tex.print(tostring(convert2) .. ", ")</span> +<span id="cb53-13"><a href="#cb53-13" aria-hidden="true" tabindex="-1"></a> tex.print(tostring(convert3))</span> +<span id="cb53-14"><a href="#cb53-14" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb53-15"><a href="#cb53-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb53-16"><a href="#cb53-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<p>Then, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb54"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb54-1"><a href="#cb54-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>function: 0x1a4a038, function: 0x1a52b18, function: 0x1a4a038</p> +</blockquote> +<p>As you can see, the caching causes <code>convert1</code> and +<code>convert3</code> to be the same conversion function.</p> +<h4 data-number="2.2.1.3" id="option-cachedir"><span +class="header-section-number">2.2.1.3</span> Option <code>cacheDir</code></h4> <dl> <dt><code>cacheDir</code> (default value: <code>"."</code>)</dt> @@ -744,40 +996,48 @@ filesystem (such as <code>/tmp</code> on UN*X systems), which gets periodically emptied.</p> </dd> </dl> -<h5 class="unnumbered" id="lua-module-example">Lua Module Example</h5> +<h5 class="unnumbered" id="lua-module-example-1">Lua Module Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb41"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb41-1"><a href="#cb41-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb41-2"><a href="#cb41-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb41-3"><a href="#cb41-3" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb41-4"><a href="#cb41-4" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({cacheDir = "cache"})</span> -<span id="cb41-5"><a href="#cb41-5" aria-hidden="true" tabindex="-1"></a> local input = "Hello *world*!"</span> -<span id="cb41-6"><a href="#cb41-6" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb41-7"><a href="#cb41-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb55"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb55-1"><a href="#cb55-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb55-2"><a href="#cb55-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb55-3"><a href="#cb55-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb55-4"><a href="#cb55-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb55-5"><a href="#cb55-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb55-6"><a href="#cb55-6" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb55-7"><a href="#cb55-7" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({cacheDir = "cache"})</span> +<span id="cb55-8"><a href="#cb55-8" aria-hidden="true" tabindex="-1"></a> local input = "Hello *world*!"</span> +<span id="cb55-9"><a href="#cb55-9" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb55-10"><a href="#cb55-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb55-11"><a href="#cb55-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Create an empty directory named <code>cache</code> next to our text document. Then, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb42"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb42-1"><a href="#cb42-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb56"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb56-1"><a href="#cb56-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” Several cache files of the Markdown package will also be produced in the <code>cache</code> directory as we requested using the <code>cacheDir</code> option.</p> -<h5 class="unnumbered" id="lua-cli-example">Lua CLI Example</h5> +<h5 class="unnumbered" id="lua-cli-example-1">Lua CLI Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb43"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb43-1"><a href="#cb43-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb43-2"><a href="#cb43-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> hello</span> -<span id="cb43-3"><a href="#cb43-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb57"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb57-1"><a href="#cb57-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb57-2"><a href="#cb57-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb57-3"><a href="#cb57-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb57-4"><a href="#cb57-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb57-5"><a href="#cb57-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> hello</span> +<span id="cb57-6"><a href="#cb57-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb57-7"><a href="#cb57-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>hello.md</code> with the following content:</p> -<div class="sourceCode" id="cb44"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb44-1"><a href="#cb44-1" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span></code></pre></div> +<div class="sourceCode" id="cb58"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb58-1"><a href="#cb58-1" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb45"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb45-1"><a href="#cb45-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ cacheDir=cache <span class="at">--</span> hello.md hello.tex</span> -<span id="cb45-2"><a href="#cb45-2" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb59"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb59-1"><a href="#cb59-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ cacheDir=cache <span class="at">--</span> hello.md hello.tex</span> +<span id="cb59-2"><a href="#cb59-2" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems @@ -796,16 +1056,16 @@ package will also be produced as we requested using the class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb46"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb46-1"><a href="#cb46-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb46-2"><a href="#cb46-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionCacheDir</span>{cache}</span> -<span id="cb46-3"><a href="#cb46-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb46-4"><a href="#cb46-4" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb46-5"><a href="#cb46-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb46-6"><a href="#cb46-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb60"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb60-1"><a href="#cb60-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb60-2"><a href="#cb60-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionCacheDir</span>{cache}</span> +<span id="cb60-3"><a href="#cb60-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb60-4"><a href="#cb60-4" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> +<span id="cb60-5"><a href="#cb60-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb60-6"><a href="#cb60-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb47"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb47-1"><a href="#cb47-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb61"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb61-1"><a href="#cb61-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” A directory named <code>cache</code> containing several cache files of the Markdown @@ -815,17 +1075,17 @@ package will also be produced as we requested using the class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb48"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb48-1"><a href="#cb48-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb48-2"><a href="#cb48-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[cacheDir=cache]{<span class="ex">markdown</span>}</span> -<span id="cb48-3"><a href="#cb48-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb48-4"><a href="#cb48-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb48-5"><a href="#cb48-5" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb48-6"><a href="#cb48-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb48-7"><a href="#cb48-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb62"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb62-1"><a href="#cb62-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb62-2"><a href="#cb62-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[cacheDir=cache]{<span class="ex">markdown</span>}</span> +<span id="cb62-3"><a href="#cb62-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb62-4"><a href="#cb62-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb62-5"><a href="#cb62-5" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> +<span id="cb62-6"><a href="#cb62-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb62-7"><a href="#cb62-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb49"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb49-1"><a href="#cb49-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb63"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb63-1"><a href="#cb63-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” A directory named <code>cache</code> containing several cache files of the Markdown @@ -835,31 +1095,31 @@ package will also be produced as we requested using the class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb50"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb50-1"><a href="#cb50-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb50-2"><a href="#cb50-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[cacheDir = cache]</span> -<span id="cb50-3"><a href="#cb50-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb50-4"><a href="#cb50-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb50-5"><a href="#cb50-5" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb50-6"><a href="#cb50-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb50-7"><a href="#cb50-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb64"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb64-1"><a href="#cb64-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb64-2"><a href="#cb64-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[cacheDir = cache]</span> +<span id="cb64-3"><a href="#cb64-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb64-4"><a href="#cb64-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb64-5"><a href="#cb64-5" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> +<span id="cb64-6"><a href="#cb64-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb64-7"><a href="#cb64-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb51"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb51-1"><a href="#cb51-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb65"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb65-1"><a href="#cb65-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” A directory named <code>cache</code> containing several cache files of the Markdown package will also be produced as we requested using the <code>cacheDir</code> option.</p> -<h4 data-number="2.2.1.2" id="option-contentblockslanguagemap"><span -class="header-section-number">2.2.1.2</span> Option +<h4 data-number="2.2.1.4" id="option-contentblockslanguagemap"><span +class="header-section-number">2.2.1.4</span> Option <code>contentBlocksLanguageMap</code></h4> <dl> <dt><code>contentBlocksLanguageMap</code> (default value: <code>"markdown-languages.json"</code>)</dt> <dd> <p>The filename of the <abbr>JSON</abbr> file that maps filename -extensions to programming language names in the iA Writer content blocks +extensions to programming language names in the iA Writer content blocks when the <strong><code>contentBlocks</code></strong> option is enabled.</p> </dd> @@ -874,37 +1134,37 @@ Marie,Curie,1867 Thomas,Edison,1847</code></pre> <p>Create also a text document named <code>language-map.json</code> with the following content:</p> -<div class="sourceCode" id="cb53"><pre -class="sourceCode js"><code class="sourceCode javascript"><span id="cb53-1"><a href="#cb53-1" aria-hidden="true" tabindex="-1"></a>{</span> -<span id="cb53-2"><a href="#cb53-2" aria-hidden="true" tabindex="-1"></a> <span class="st">"tex"</span><span class="op">:</span> <span class="st">"LaTeX"</span></span> -<span id="cb53-3"><a href="#cb53-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> +<div class="sourceCode" id="cb67"><pre +class="sourceCode js"><code class="sourceCode javascript"><span id="cb67-1"><a href="#cb67-1" aria-hidden="true" tabindex="-1"></a>{</span> +<span id="cb67-2"><a href="#cb67-2" aria-hidden="true" tabindex="-1"></a> <span class="st">"tex"</span><span class="op">:</span> <span class="st">"LaTeX"</span></span> +<span id="cb67-3"><a href="#cb67-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> <p>Create also a text document named <code>code.tex</code> with the following content:</p> -<div class="sourceCode" id="cb54"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb54-1"><a href="#cb54-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\LaTeX</span>.</span></code></pre></div> +<div class="sourceCode" id="cb68"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb68-1"><a href="#cb68-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\LaTeX</span>.</span></code></pre></div> <p>Create also a text document named <code>part.md</code> with the following content:</p> -<div class="sourceCode" id="cb55"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb55-1"><a href="#cb55-1" aria-hidden="true" tabindex="-1"></a>This is a *transcluded markdown document*.</span></code></pre></div> +<div class="sourceCode" id="cb69"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb69-1"><a href="#cb69-1" aria-hidden="true" tabindex="-1"></a>This is a *transcluded markdown document*.</span></code></pre></div> <p>Create also a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb56"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb56-1"><a href="#cb56-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb56-2"><a href="#cb56-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</span> -<span id="cb56-3"><a href="#cb56-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[contentBlocks]{<span class="ex">markdown</span>}</span> -<span id="cb56-4"><a href="#cb56-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb56-5"><a href="#cb56-5" aria-hidden="true" tabindex="-1"></a> contentBlocksLanguageMap = {language-map.json},</span> -<span id="cb56-6"><a href="#cb56-6" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb56-7"><a href="#cb56-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb56-8"><a href="#cb56-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb56-9"><a href="#cb56-9" aria-hidden="true" tabindex="-1"></a>/table.csv (An example table)</span> -<span id="cb56-10"><a href="#cb56-10" aria-hidden="true" tabindex="-1"></a>/code.tex (An example code listing)</span> -<span id="cb56-11"><a href="#cb56-11" aria-hidden="true" tabindex="-1"></a>/part.md (A file transclusion example)</span> -<span id="cb56-12"><a href="#cb56-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb56-13"><a href="#cb56-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb70"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb70-1"><a href="#cb70-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb70-2"><a href="#cb70-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</span> +<span id="cb70-3"><a href="#cb70-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[contentBlocks]{<span class="ex">markdown</span>}</span> +<span id="cb70-4"><a href="#cb70-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb70-5"><a href="#cb70-5" aria-hidden="true" tabindex="-1"></a> contentBlocksLanguageMap = {language-map.json},</span> +<span id="cb70-6"><a href="#cb70-6" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb70-7"><a href="#cb70-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb70-8"><a href="#cb70-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb70-9"><a href="#cb70-9" aria-hidden="true" tabindex="-1"></a>/table.csv (An example table)</span> +<span id="cb70-10"><a href="#cb70-10" aria-hidden="true" tabindex="-1"></a>/code.tex (An example code listing)</span> +<span id="cb70-11"><a href="#cb70-11" aria-hidden="true" tabindex="-1"></a>/part.md (A file transclusion example)</span> +<span id="cb70-12"><a href="#cb70-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb70-13"><a href="#cb70-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb57"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb57-1"><a href="#cb57-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb71"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb71-1"><a href="#cb71-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -935,8 +1195,8 @@ contain the following text:</p> </tbody> </table> <p>Table 1: An example table</p> -<div class="sourceCode" id="cb58"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb58-1"><a href="#cb58-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\LaTeX</span>.</span></code></pre></div> +<div class="sourceCode" id="cb72"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb72-1"><a href="#cb72-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\LaTeX</span>.</span></code></pre></div> <p>This is a <em>transcluded markdown document</em>.</p> </blockquote> <h5 class="unnumbered" id="context-example-1">Con<span @@ -949,39 +1209,39 @@ Marie,Curie,1867 Thomas,Edison,1847</code></pre> <p>Create also a text document named <code>language-map.json</code> with the following content:</p> -<div class="sourceCode" id="cb60"><pre -class="sourceCode js"><code class="sourceCode javascript"><span id="cb60-1"><a href="#cb60-1" aria-hidden="true" tabindex="-1"></a>{</span> -<span id="cb60-2"><a href="#cb60-2" aria-hidden="true" tabindex="-1"></a> <span class="st">"tex"</span><span class="op">:</span> <span class="st">"ConTeXt"</span></span> -<span id="cb60-3"><a href="#cb60-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> +<div class="sourceCode" id="cb74"><pre +class="sourceCode js"><code class="sourceCode javascript"><span id="cb74-1"><a href="#cb74-1" aria-hidden="true" tabindex="-1"></a>{</span> +<span id="cb74-2"><a href="#cb74-2" aria-hidden="true" tabindex="-1"></a> <span class="st">"tex"</span><span class="op">:</span> <span class="st">"ConTeXt"</span></span> +<span id="cb74-3"><a href="#cb74-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> <p>Create also a text document named <code>code.tex</code> with the following content:</p> -<div class="sourceCode" id="cb61"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb61-1"><a href="#cb61-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\ConTeXt</span>.</span></code></pre></div> +<div class="sourceCode" id="cb75"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb75-1"><a href="#cb75-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\ConTeXt</span>.</span></code></pre></div> <p>Create also a text document named <code>part.md</code> with the following content:</p> -<div class="sourceCode" id="cb62"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb62-1"><a href="#cb62-1" aria-hidden="true" tabindex="-1"></a>This is a *transcluded markdown document*.</span></code></pre></div> +<div class="sourceCode" id="cb76"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb76-1"><a href="#cb76-1" aria-hidden="true" tabindex="-1"></a>This is a *transcluded markdown document*.</span></code></pre></div> <p>Create also a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb63"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb63-1"><a href="#cb63-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb63-2"><a href="#cb63-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span></span> -<span id="cb63-3"><a href="#cb63-3" aria-hidden="true" tabindex="-1"></a> [</span> -<span id="cb63-4"><a href="#cb63-4" aria-hidden="true" tabindex="-1"></a> contentBlocks = yes,</span> -<span id="cb63-5"><a href="#cb63-5" aria-hidden="true" tabindex="-1"></a> contentBlocksLanguageMap = language-map.json,</span> -<span id="cb63-6"><a href="#cb63-6" aria-hidden="true" tabindex="-1"></a> ]</span> -<span id="cb63-7"><a href="#cb63-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\definetyping</span> [ConTeXt]</span> -<span id="cb63-8"><a href="#cb63-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\setuptyping</span> [ConTeXt] [option=TEX]</span> -<span id="cb63-9"><a href="#cb63-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb63-10"><a href="#cb63-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb63-11"><a href="#cb63-11" aria-hidden="true" tabindex="-1"></a>/table.csv (An example table)</span> -<span id="cb63-12"><a href="#cb63-12" aria-hidden="true" tabindex="-1"></a>/code.tex (An example code listing)</span> -<span id="cb63-13"><a href="#cb63-13" aria-hidden="true" tabindex="-1"></a>/part.md (A file transclusion example)</span> -<span id="cb63-14"><a href="#cb63-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb63-15"><a href="#cb63-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb77"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb77-1"><a href="#cb77-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb77-2"><a href="#cb77-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span></span> +<span id="cb77-3"><a href="#cb77-3" aria-hidden="true" tabindex="-1"></a> [</span> +<span id="cb77-4"><a href="#cb77-4" aria-hidden="true" tabindex="-1"></a> contentBlocks = yes,</span> +<span id="cb77-5"><a href="#cb77-5" aria-hidden="true" tabindex="-1"></a> contentBlocksLanguageMap = language-map.json,</span> +<span id="cb77-6"><a href="#cb77-6" aria-hidden="true" tabindex="-1"></a> ]</span> +<span id="cb77-7"><a href="#cb77-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\definetyping</span> [ConTeXt]</span> +<span id="cb77-8"><a href="#cb77-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\setuptyping</span> [ConTeXt] [option=TEX]</span> +<span id="cb77-9"><a href="#cb77-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb77-10"><a href="#cb77-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb77-11"><a href="#cb77-11" aria-hidden="true" tabindex="-1"></a>/table.csv (An example table)</span> +<span id="cb77-12"><a href="#cb77-12" aria-hidden="true" tabindex="-1"></a>/code.tex (An example code listing)</span> +<span id="cb77-13"><a href="#cb77-13" aria-hidden="true" tabindex="-1"></a>/part.md (A file transclusion example)</span> +<span id="cb77-14"><a href="#cb77-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb77-15"><a href="#cb77-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb64"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb64-1"><a href="#cb64-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb78"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb78-1"><a href="#cb78-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1012,12 +1272,12 @@ contain the following text:</p> </tbody> </table> <p>Table 1: An example table</p> -<div class="sourceCode" id="cb65"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb65-1"><a href="#cb65-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\ConTeXt</span>.</span></code></pre></div> +<div class="sourceCode" id="cb79"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb79-1"><a href="#cb79-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\ConTeXt</span>.</span></code></pre></div> <p>This is a <em>transcluded markdown document</em>.</p> </blockquote> -<h4 data-number="2.2.1.3" id="option-debugextensionsfilename"><span -class="header-section-number">2.2.1.3</span> Option +<h4 data-number="2.2.1.5" id="option-debugextensionsfilename"><span +class="header-section-number">2.2.1.5</span> Option <code>debugExtensionsFileName</code></h4> <dl> <dt><code>debugExtensionsFileName</code> (default value: @@ -1034,8 +1294,8 @@ syntax extensions (see option <strong><code>extensions</code></strong>) have been applied.</p> </dd> </dl> -<h4 data-number="2.2.1.4" id="option-frozencachefilename"><span -class="header-section-number">2.2.1.4</span> Option +<h4 data-number="2.2.1.6" id="option-frozencachefilename"><span +class="header-section-number">2.2.1.6</span> Option <code>frozenCacheFileName</code></h4> <dl> <dt><code>frozenCacheFileName</code> (default value: @@ -1055,40 +1315,48 @@ further changes in the order and the content of markdown documents will not be reflected.</p> </dd> </dl> -<h5 class="unnumbered" id="lua-module-example-1">Lua Module Example</h5> +<h5 class="unnumbered" id="lua-module-example-2">Lua Module Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb66"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb66-1"><a href="#cb66-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb66-2"><a href="#cb66-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb66-3"><a href="#cb66-3" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb66-4"><a href="#cb66-4" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({finalizeCache = true, frozenCacheFileName = "cache.tex"})</span> -<span id="cb66-5"><a href="#cb66-5" aria-hidden="true" tabindex="-1"></a> local input = "Hello *world*!"</span> -<span id="cb66-6"><a href="#cb66-6" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb66-7"><a href="#cb66-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb80"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb80-1"><a href="#cb80-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb80-2"><a href="#cb80-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb80-3"><a href="#cb80-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb80-4"><a href="#cb80-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb80-5"><a href="#cb80-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb80-6"><a href="#cb80-6" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb80-7"><a href="#cb80-7" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({finalizeCache = true, frozenCacheFileName = "cache.tex"})</span> +<span id="cb80-8"><a href="#cb80-8" aria-hidden="true" tabindex="-1"></a> local input = "Hello *world*!"</span> +<span id="cb80-9"><a href="#cb80-9" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb80-10"><a href="#cb80-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb80-11"><a href="#cb80-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Then, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb67"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb67-1"><a href="#cb67-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb81"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb81-1"><a href="#cb81-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” A frozen cache will also be produced in the <code>cache.tex</code> output file as we requested using the <code>finalizeCache</code> and <code>frozenCacheFileName</code> options.</p> -<h5 class="unnumbered" id="lua-cli-example-1">Lua CLI Example</h5> +<h5 class="unnumbered" id="lua-cli-example-2">Lua CLI Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb68"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb68-1"><a href="#cb68-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb68-2"><a href="#cb68-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> hello</span> -<span id="cb68-3"><a href="#cb68-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb82"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb82-1"><a href="#cb82-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb82-2"><a href="#cb82-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb82-3"><a href="#cb82-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb82-4"><a href="#cb82-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb82-5"><a href="#cb82-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> hello</span> +<span id="cb82-6"><a href="#cb82-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb82-7"><a href="#cb82-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>hello.md</code> with the following content:</p> -<div class="sourceCode" id="cb69"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb69-1"><a href="#cb69-1" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span></code></pre></div> +<div class="sourceCode" id="cb83"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb83-1"><a href="#cb83-1" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb70"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb70-1"><a href="#cb70-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ finalizeCache=true frozenCacheFileName=cache.tex <span class="at">--</span> hello.md hello.tex</span> -<span id="cb70-2"><a href="#cb70-2" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb84"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb84-1"><a href="#cb84-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ finalizeCache=true frozenCacheFileName=cache.tex <span class="at">--</span> hello.md hello.tex</span> +<span id="cb84-2"><a href="#cb84-2" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems @@ -1107,17 +1375,17 @@ options.</p> class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb71"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb71-1"><a href="#cb71-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb71-2"><a href="#cb71-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFinalizeCache</span>{true}</span> -<span id="cb71-3"><a href="#cb71-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFrozenCacheFileName</span>{cache.tex}</span> -<span id="cb71-4"><a href="#cb71-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb71-5"><a href="#cb71-5" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb71-6"><a href="#cb71-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb71-7"><a href="#cb71-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb85"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb85-1"><a href="#cb85-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb85-2"><a href="#cb85-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFinalizeCache</span>{true}</span> +<span id="cb85-3"><a href="#cb85-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFrozenCacheFileName</span>{cache.tex}</span> +<span id="cb85-4"><a href="#cb85-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb85-5"><a href="#cb85-5" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> +<span id="cb85-6"><a href="#cb85-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb85-7"><a href="#cb85-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb72"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb72-1"><a href="#cb72-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb86"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb86-1"><a href="#cb86-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” A frozen cache will also be produced in the <code>cache.tex</code> output file as we requested using @@ -1125,17 +1393,17 @@ the <code>finalizeCache</code> and <code>frozenCacheFileName</code> options.</p> <p>Next, create a new text document <code>frozen-document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb73"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb73-1"><a href="#cb73-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb73-2"><a href="#cb73-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFrozenCache</span>{true}</span> -<span id="cb73-3"><a href="#cb73-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFrozenCacheFileName</span>{cache.tex}</span> -<span id="cb73-4"><a href="#cb73-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb73-5"><a href="#cb73-5" aria-hidden="true" tabindex="-1"></a>Hi *world*!</span> -<span id="cb73-6"><a href="#cb73-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb73-7"><a href="#cb73-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb87"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb87-1"><a href="#cb87-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb87-2"><a href="#cb87-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFrozenCache</span>{true}</span> +<span id="cb87-3"><a href="#cb87-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFrozenCacheFileName</span>{cache.tex}</span> +<span id="cb87-4"><a href="#cb87-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb87-5"><a href="#cb87-5" aria-hidden="true" tabindex="-1"></a>Hi *world*!</span> +<span id="cb87-6"><a href="#cb87-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb87-7"><a href="#cb87-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Last, invoke pdfTeX without shell access from the terminal:</p> -<div class="sourceCode" id="cb74"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb74-1"><a href="#cb74-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdftex</span> <span class="at">-no-shell-escape</span> frozen-document.tex</span></code></pre></div> +<div class="sourceCode" id="cb88"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb88-1"><a href="#cb88-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdftex</span> <span class="at">-no-shell-escape</span> frozen-document.tex</span></code></pre></div> <p>A PDF document named <code>frozen-document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” Since we used the contents of the frozen cache using the @@ -1147,17 +1415,17 @@ in the content of the markdown document from “Hello <em>world</em>!” to class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb75"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb75-1"><a href="#cb75-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>[finalizecache]{<span class="ex">article</span>}</span> -<span id="cb75-2"><a href="#cb75-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[frozenCacheFileName=cache.tex]{<span class="ex">markdown</span>}</span> -<span id="cb75-3"><a href="#cb75-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb75-4"><a href="#cb75-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb75-5"><a href="#cb75-5" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb75-6"><a href="#cb75-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb75-7"><a href="#cb75-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb89"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb89-1"><a href="#cb89-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>[finalizecache]{<span class="ex">article</span>}</span> +<span id="cb89-2"><a href="#cb89-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[frozenCacheFileName=cache.tex]{<span class="ex">markdown</span>}</span> +<span id="cb89-3"><a href="#cb89-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb89-4"><a href="#cb89-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb89-5"><a href="#cb89-5" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> +<span id="cb89-6"><a href="#cb89-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb89-7"><a href="#cb89-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb76"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb76-1"><a href="#cb76-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb90"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb90-1"><a href="#cb90-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” A frozen cache will also be produced in the <code>cache.tex</code> output file as we requested using @@ -1165,17 +1433,17 @@ the <code>finalizecache</code> and <code>frozenCacheFileName</code> options.</p> <p>Next, create a new text document <code>frozen-document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb77"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb77-1"><a href="#cb77-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>[frozencache]{<span class="ex">article</span>}</span> -<span id="cb77-2"><a href="#cb77-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[frozenCacheFileName=cache.tex]{<span class="ex">markdown</span>}</span> -<span id="cb77-3"><a href="#cb77-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb77-4"><a href="#cb77-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb77-5"><a href="#cb77-5" aria-hidden="true" tabindex="-1"></a>Hi *world*!</span> -<span id="cb77-6"><a href="#cb77-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb77-7"><a href="#cb77-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb91"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb91-1"><a href="#cb91-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>[frozencache]{<span class="ex">article</span>}</span> +<span id="cb91-2"><a href="#cb91-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[frozenCacheFileName=cache.tex]{<span class="ex">markdown</span>}</span> +<span id="cb91-3"><a href="#cb91-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb91-4"><a href="#cb91-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb91-5"><a href="#cb91-5" aria-hidden="true" tabindex="-1"></a>Hi *world*!</span> +<span id="cb91-6"><a href="#cb91-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb91-7"><a href="#cb91-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Last, invoke pdfTeX without shell access from the terminal:</p> -<div class="sourceCode" id="cb78"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb78-1"><a href="#cb78-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdflatex</span> <span class="at">-no-shell-escape</span> frozen-document.tex</span></code></pre></div> +<div class="sourceCode" id="cb92"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb92-1"><a href="#cb92-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdflatex</span> <span class="at">-no-shell-escape</span> frozen-document.tex</span></code></pre></div> <p>A PDF document named <code>frozen-document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” Since we used the contents of the frozen cache using the <code>frozencache</code> option, @@ -1187,21 +1455,21 @@ reflected.</p> class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb79"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb79-1"><a href="#cb79-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb79-2"><a href="#cb79-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span></span> -<span id="cb79-3"><a href="#cb79-3" aria-hidden="true" tabindex="-1"></a> [</span> -<span id="cb79-4"><a href="#cb79-4" aria-hidden="true" tabindex="-1"></a> finalizeCache = yes,</span> -<span id="cb79-5"><a href="#cb79-5" aria-hidden="true" tabindex="-1"></a> frozenCacheFileName = cache.tex,</span> -<span id="cb79-6"><a href="#cb79-6" aria-hidden="true" tabindex="-1"></a> ]</span> -<span id="cb79-7"><a href="#cb79-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb79-8"><a href="#cb79-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb79-9"><a href="#cb79-9" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb79-10"><a href="#cb79-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb79-11"><a href="#cb79-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb93"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb93-1"><a href="#cb93-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb93-2"><a href="#cb93-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span></span> +<span id="cb93-3"><a href="#cb93-3" aria-hidden="true" tabindex="-1"></a> [</span> +<span id="cb93-4"><a href="#cb93-4" aria-hidden="true" tabindex="-1"></a> finalizeCache = yes,</span> +<span id="cb93-5"><a href="#cb93-5" aria-hidden="true" tabindex="-1"></a> frozenCacheFileName = cache.tex,</span> +<span id="cb93-6"><a href="#cb93-6" aria-hidden="true" tabindex="-1"></a> ]</span> +<span id="cb93-7"><a href="#cb93-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb93-8"><a href="#cb93-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb93-9"><a href="#cb93-9" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> +<span id="cb93-10"><a href="#cb93-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb93-11"><a href="#cb93-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb80"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb80-1"><a href="#cb80-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb94"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb94-1"><a href="#cb94-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” A frozen cache will also be produced in the <code>cache.tex</code> output file as we requested using @@ -1209,21 +1477,21 @@ the <code>finalizeCache</code> and <code>frozenCacheFileName</code> options.</p> <p>Next, create a new text document <code>frozen-document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb81"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb81-1"><a href="#cb81-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb81-2"><a href="#cb81-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span></span> -<span id="cb81-3"><a href="#cb81-3" aria-hidden="true" tabindex="-1"></a> [</span> -<span id="cb81-4"><a href="#cb81-4" aria-hidden="true" tabindex="-1"></a> frozenCache = yes,</span> -<span id="cb81-5"><a href="#cb81-5" aria-hidden="true" tabindex="-1"></a> frozenCacheFileName = cache.tex,</span> -<span id="cb81-6"><a href="#cb81-6" aria-hidden="true" tabindex="-1"></a> ]</span> -<span id="cb81-7"><a href="#cb81-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb81-8"><a href="#cb81-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb81-9"><a href="#cb81-9" aria-hidden="true" tabindex="-1"></a>Hi *world*!</span> -<span id="cb81-10"><a href="#cb81-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb81-11"><a href="#cb81-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> -<p>Last, invoke pdfTeX without shell access from the terminal:</p> -<div class="sourceCode" id="cb82"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb82-1"><a href="#cb82-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> frozen-document.tex</span></code></pre></div> +<div class="sourceCode" id="cb95"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb95-1"><a href="#cb95-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb95-2"><a href="#cb95-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span></span> +<span id="cb95-3"><a href="#cb95-3" aria-hidden="true" tabindex="-1"></a> [</span> +<span id="cb95-4"><a href="#cb95-4" aria-hidden="true" tabindex="-1"></a> frozenCache = yes,</span> +<span id="cb95-5"><a href="#cb95-5" aria-hidden="true" tabindex="-1"></a> frozenCacheFileName = cache.tex,</span> +<span id="cb95-6"><a href="#cb95-6" aria-hidden="true" tabindex="-1"></a> ]</span> +<span id="cb95-7"><a href="#cb95-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb95-8"><a href="#cb95-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb95-9"><a href="#cb95-9" aria-hidden="true" tabindex="-1"></a>Hi *world*!</span> +<span id="cb95-10"><a href="#cb95-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb95-11"><a href="#cb95-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<p>Last, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb96"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb96-1"><a href="#cb96-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> frozen-document.tex</span></code></pre></div> <p>A PDF document named <code>frozen-document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” Since we used the contents of the frozen cache using the @@ -1231,8 +1499,35 @@ contents of the frozen cache using the the document without accessing the shell or invoking Lua, but the change in the content of the markdown document from “Hello <em>world</em>!” to “Hi <em>world</em>!” was not reflected.</p> -<h4 data-number="2.2.1.5" id="option-blankbeforeblockquote"><span -class="header-section-number">2.2.1.5</span> Option +<h4 data-number="2.2.1.7" id="option-autoidentifiers"><span +class="header-section-number">2.2.1.7</span> Option +<code>autoIdentifiers</code></h4> +<dl> +<dt><code>autoIdentifiers</code> (default value: +<code>false</code>)</dt> +<dd> +<dl> +<dt>true</dt> +<dd> +<p>Enable the Pandoc <a +href="https://pandoc.org/MANUAL.html#extension-auto_identifiers">auto +identifiers syntax extension</a>:</p> +<div class="sourceCode" id="cb97"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb97-1"><a href="#cb97-1" aria-hidden="true" tabindex="-1"></a>The following heading received the identifier <span class="in">`sesame-street`</span>:</span> +<span id="cb97-2"><a href="#cb97-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb97-3"><a href="#cb97-3" aria-hidden="true" tabindex="-1"></a><span class="fu"># 123 Sesame Street</span></span></code></pre></div> +</dd> +<dt>false</dt> +<dd> +<p>Disable the Pandoc auto identifiers syntax extension.</p> +</dd> +</dl> +</dd> +</dl> +<p>See also the option +<strong><code>gfmAutoIdentifiers</code></strong>.</p> +<h4 data-number="2.2.1.8" id="option-blankbeforeblockquote"><span +class="header-section-number">2.2.1.8</span> Option <code>blankBeforeBlockquote</code></h4> <dl> <dt><code>blankBeforeBlockquote</code> (default value: @@ -1252,30 +1547,34 @@ blockquote.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="lua-module-example-2">Lua Module Example</h5> +<h5 class="unnumbered" id="lua-module-example-3">Lua Module Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb83"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb83-1"><a href="#cb83-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb83-2"><a href="#cb83-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb83-3"><a href="#cb83-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb83-4"><a href="#cb83-4" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb83-5"><a href="#cb83-5" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> -<span id="cb83-6"><a href="#cb83-6" aria-hidden="true" tabindex="-1"></a> local convert, input</span> -<span id="cb83-7"><a href="#cb83-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb83-8"><a href="#cb83-8" aria-hidden="true" tabindex="-1"></a> convert = markdown.new()</span> -<span id="cb83-9"><a href="#cb83-9" aria-hidden="true" tabindex="-1"></a> input = "A paragraph." .. newline ..</span> -<span id="cb83-10"><a href="#cb83-10" aria-hidden="true" tabindex="-1"></a> "> A quote." .. newline</span> -<span id="cb83-11"><a href="#cb83-11" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input))</span> -<span id="cb83-12"><a href="#cb83-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb83-13"><a href="#cb83-13" aria-hidden="true" tabindex="-1"></a> convert = markdown.new({blankBeforeBlockquote = true})</span> -<span id="cb83-14"><a href="#cb83-14" aria-hidden="true" tabindex="-1"></a> input = "A paragraph." .. newline ..</span> -<span id="cb83-15"><a href="#cb83-15" aria-hidden="true" tabindex="-1"></a> "> Not a quote." .. newline</span> -<span id="cb83-16"><a href="#cb83-16" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb83-17"><a href="#cb83-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb98"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb98-1"><a href="#cb98-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb98-2"><a href="#cb98-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb98-3"><a href="#cb98-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb98-4"><a href="#cb98-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb98-5"><a href="#cb98-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb98-6"><a href="#cb98-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb98-7"><a href="#cb98-7" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb98-8"><a href="#cb98-8" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> +<span id="cb98-9"><a href="#cb98-9" aria-hidden="true" tabindex="-1"></a> local convert, input</span> +<span id="cb98-10"><a href="#cb98-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb98-11"><a href="#cb98-11" aria-hidden="true" tabindex="-1"></a> convert = markdown.new()</span> +<span id="cb98-12"><a href="#cb98-12" aria-hidden="true" tabindex="-1"></a> input = "A paragraph." .. newline ..</span> +<span id="cb98-13"><a href="#cb98-13" aria-hidden="true" tabindex="-1"></a> "> A quote." .. newline</span> +<span id="cb98-14"><a href="#cb98-14" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input))</span> +<span id="cb98-15"><a href="#cb98-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb98-16"><a href="#cb98-16" aria-hidden="true" tabindex="-1"></a> convert = markdown.new({blankBeforeBlockquote = true})</span> +<span id="cb98-17"><a href="#cb98-17" aria-hidden="true" tabindex="-1"></a> input = "A paragraph." .. newline ..</span> +<span id="cb98-18"><a href="#cb98-18" aria-hidden="true" tabindex="-1"></a> "> Not a quote." .. newline</span> +<span id="cb98-19"><a href="#cb98-19" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb98-20"><a href="#cb98-20" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb98-21"><a href="#cb98-21" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Then, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb84"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb84-1"><a href="#cb84-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb99"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb99-1"><a href="#cb99-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1285,25 +1584,29 @@ contain the following text:</p> </blockquote> <p>A paragraph > Not a quote.</p> </blockquote> -<h5 class="unnumbered" id="lua-cli-example-2">Lua CLI Example</h5> +<h5 class="unnumbered" id="lua-cli-example-3">Lua CLI Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb85"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb85-1"><a href="#cb85-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb85-2"><a href="#cb85-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb85-3"><a href="#cb85-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> -<span id="cb85-4"><a href="#cb85-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> -<span id="cb85-5"><a href="#cb85-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb100"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb100-1"><a href="#cb100-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb100-2"><a href="#cb100-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb100-3"><a href="#cb100-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb100-4"><a href="#cb100-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb100-5"><a href="#cb100-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb100-6"><a href="#cb100-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> +<span id="cb100-7"><a href="#cb100-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> +<span id="cb100-8"><a href="#cb100-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb100-9"><a href="#cb100-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p> -<div class="sourceCode" id="cb86"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb86-1"><a href="#cb86-1" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb86-2"><a href="#cb86-2" aria-hidden="true" tabindex="-1"></a><span class="at">> A quote?</span></span></code></pre></div> +<div class="sourceCode" id="cb101"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb101-1"><a href="#cb101-1" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb101-2"><a href="#cb101-2" aria-hidden="true" tabindex="-1"></a><span class="at">> A quote?</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb87"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb87-1"><a href="#cb87-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> -<span id="cb87-2"><a href="#cb87-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ blankBeforeBlockquote=true <span class="at">--</span> content.md optiontrue.tex</span> -<span id="cb87-3"><a href="#cb87-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb102"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb102-1"><a href="#cb102-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> +<span id="cb102-2"><a href="#cb102-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ blankBeforeBlockquote=true <span class="at">--</span> content.md optiontrue.tex</span> +<span id="cb102-3"><a href="#cb102-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems @@ -1326,24 +1629,24 @@ contain the following text:</p> class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb88"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb88-1"><a href="#cb88-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb88-2"><a href="#cb88-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb88-3"><a href="#cb88-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb88-4"><a href="#cb88-4" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb88-5"><a href="#cb88-5" aria-hidden="true" tabindex="-1"></a>> A quote.</span> -<span id="cb88-6"><a href="#cb88-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb88-7"><a href="#cb88-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb88-8"><a href="#cb88-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionBlankBeforeBlockquote</span>{true}</span> -<span id="cb88-9"><a href="#cb88-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb88-10"><a href="#cb88-10" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb88-11"><a href="#cb88-11" aria-hidden="true" tabindex="-1"></a>> Not a quote.</span> -<span id="cb88-12"><a href="#cb88-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb88-13"><a href="#cb88-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb88-14"><a href="#cb88-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb103"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb103-1"><a href="#cb103-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb103-2"><a href="#cb103-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb103-3"><a href="#cb103-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb103-4"><a href="#cb103-4" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb103-5"><a href="#cb103-5" aria-hidden="true" tabindex="-1"></a>> A quote.</span> +<span id="cb103-6"><a href="#cb103-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb103-7"><a href="#cb103-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb103-8"><a href="#cb103-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionBlankBeforeBlockquote</span>{true}</span> +<span id="cb103-9"><a href="#cb103-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb103-10"><a href="#cb103-10" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb103-11"><a href="#cb103-11" aria-hidden="true" tabindex="-1"></a>> Not a quote.</span> +<span id="cb103-12"><a href="#cb103-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb103-13"><a href="#cb103-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb103-14"><a href="#cb103-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb89"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb89-1"><a href="#cb89-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb104"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb104-1"><a href="#cb104-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1357,25 +1660,25 @@ contain the following text:</p> class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb90"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb90-1"><a href="#cb90-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb90-2"><a href="#cb90-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb90-3"><a href="#cb90-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb90-4"><a href="#cb90-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb90-5"><a href="#cb90-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb90-6"><a href="#cb90-6" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb90-7"><a href="#cb90-7" aria-hidden="true" tabindex="-1"></a>> A quote.</span> -<span id="cb90-8"><a href="#cb90-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb90-9"><a href="#cb90-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb90-10"><a href="#cb90-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{blankBeforeBlockquote}</span> -<span id="cb90-11"><a href="#cb90-11" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb90-12"><a href="#cb90-12" aria-hidden="true" tabindex="-1"></a>> Not a quote.</span> -<span id="cb90-13"><a href="#cb90-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb90-14"><a href="#cb90-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb90-15"><a href="#cb90-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb91"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb91-1"><a href="#cb91-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb105"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb105-1"><a href="#cb105-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb105-2"><a href="#cb105-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb105-3"><a href="#cb105-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb105-4"><a href="#cb105-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb105-5"><a href="#cb105-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb105-6"><a href="#cb105-6" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb105-7"><a href="#cb105-7" aria-hidden="true" tabindex="-1"></a>> A quote.</span> +<span id="cb105-8"><a href="#cb105-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb105-9"><a href="#cb105-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb105-10"><a href="#cb105-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[blankBeforeBlockquote]</span> +<span id="cb105-11"><a href="#cb105-11" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb105-12"><a href="#cb105-12" aria-hidden="true" tabindex="-1"></a>> Not a quote.</span> +<span id="cb105-13"><a href="#cb105-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb105-14"><a href="#cb105-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb105-15"><a href="#cb105-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb106"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb106-1"><a href="#cb106-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1389,25 +1692,25 @@ contain the following text:</p> class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb92"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb92-1"><a href="#cb92-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb92-2"><a href="#cb92-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb92-3"><a href="#cb92-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb92-4"><a href="#cb92-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb92-5"><a href="#cb92-5" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb92-6"><a href="#cb92-6" aria-hidden="true" tabindex="-1"></a>> A quote.</span> -<span id="cb92-7"><a href="#cb92-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb92-8"><a href="#cb92-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb92-9"><a href="#cb92-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[blankBeforeBlockquote = yes]</span> -<span id="cb92-10"><a href="#cb92-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb92-11"><a href="#cb92-11" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb92-12"><a href="#cb92-12" aria-hidden="true" tabindex="-1"></a>> Not a quote.</span> -<span id="cb92-13"><a href="#cb92-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb92-14"><a href="#cb92-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb92-15"><a href="#cb92-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb107"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb107-1"><a href="#cb107-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb107-2"><a href="#cb107-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb107-3"><a href="#cb107-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb107-4"><a href="#cb107-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb107-5"><a href="#cb107-5" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb107-6"><a href="#cb107-6" aria-hidden="true" tabindex="-1"></a>> A quote.</span> +<span id="cb107-7"><a href="#cb107-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb107-8"><a href="#cb107-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb107-9"><a href="#cb107-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[blankBeforeBlockquote = yes]</span> +<span id="cb107-10"><a href="#cb107-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb107-11"><a href="#cb107-11" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb107-12"><a href="#cb107-12" aria-hidden="true" tabindex="-1"></a>> Not a quote.</span> +<span id="cb107-13"><a href="#cb107-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb107-14"><a href="#cb107-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb107-15"><a href="#cb107-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb93"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb93-1"><a href="#cb93-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb108"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb108-1"><a href="#cb108-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1417,8 +1720,8 @@ contain the following text:</p> </blockquote> <p>A paragraph > Not a quote.</p> </blockquote> -<h4 data-number="2.2.1.6" id="option-blankbeforecodefence"><span -class="header-section-number">2.2.1.6</span> Option +<h4 data-number="2.2.1.9" id="option-blankbeforecodefence"><span +class="header-section-number">2.2.1.9</span> Option <code>blankBeforeCodeFence</code></h4> <dl> <dt><code>blankBeforeCodeFence</code> (default value: @@ -1438,35 +1741,39 @@ fenced code block.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="lua-module-example-3">Lua Module Example</h5> +<h5 class="unnumbered" id="lua-module-example-4">Lua Module Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb94"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb94-1"><a href="#cb94-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb94-2"><a href="#cb94-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb94-3"><a href="#cb94-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb94-4"><a href="#cb94-4" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb94-5"><a href="#cb94-5" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> -<span id="cb94-6"><a href="#cb94-6" aria-hidden="true" tabindex="-1"></a> local convert, input</span> -<span id="cb94-7"><a href="#cb94-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb94-8"><a href="#cb94-8" aria-hidden="true" tabindex="-1"></a> convert = markdown.new({fencedCode = true})</span> -<span id="cb94-9"><a href="#cb94-9" aria-hidden="true" tabindex="-1"></a> input = "A paragraph." .. newline ..</span> -<span id="cb94-10"><a href="#cb94-10" aria-hidden="true" tabindex="-1"></a> "```" .. newline ..</span> -<span id="cb94-11"><a href="#cb94-11" aria-hidden="true" tabindex="-1"></a> "A fenced code." .. newline ..</span> -<span id="cb94-12"><a href="#cb94-12" aria-hidden="true" tabindex="-1"></a> "```" .. newline</span> -<span id="cb94-13"><a href="#cb94-13" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input))</span> -<span id="cb94-14"><a href="#cb94-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb94-15"><a href="#cb94-15" aria-hidden="true" tabindex="-1"></a> convert = markdown.new({</span> -<span id="cb94-16"><a href="#cb94-16" aria-hidden="true" tabindex="-1"></a> fencedCode = true, blankBeforeCodeFence = true})</span> -<span id="cb94-17"><a href="#cb94-17" aria-hidden="true" tabindex="-1"></a> input = "A paragraph." .. newline ..</span> -<span id="cb94-18"><a href="#cb94-18" aria-hidden="true" tabindex="-1"></a> "```" .. newline ..</span> -<span id="cb94-19"><a href="#cb94-19" aria-hidden="true" tabindex="-1"></a> "Not a fenced code." .. newline ..</span> -<span id="cb94-20"><a href="#cb94-20" aria-hidden="true" tabindex="-1"></a> "```" .. newline</span> -<span id="cb94-21"><a href="#cb94-21" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb94-22"><a href="#cb94-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb109"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb109-1"><a href="#cb109-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb109-2"><a href="#cb109-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb109-3"><a href="#cb109-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb109-4"><a href="#cb109-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb109-5"><a href="#cb109-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb109-6"><a href="#cb109-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb109-7"><a href="#cb109-7" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb109-8"><a href="#cb109-8" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> +<span id="cb109-9"><a href="#cb109-9" aria-hidden="true" tabindex="-1"></a> local convert, input</span> +<span id="cb109-10"><a href="#cb109-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb109-11"><a href="#cb109-11" aria-hidden="true" tabindex="-1"></a> convert = markdown.new({fencedCode = true})</span> +<span id="cb109-12"><a href="#cb109-12" aria-hidden="true" tabindex="-1"></a> input = "A paragraph." .. newline ..</span> +<span id="cb109-13"><a href="#cb109-13" aria-hidden="true" tabindex="-1"></a> "```" .. newline ..</span> +<span id="cb109-14"><a href="#cb109-14" aria-hidden="true" tabindex="-1"></a> "A fenced code." .. newline ..</span> +<span id="cb109-15"><a href="#cb109-15" aria-hidden="true" tabindex="-1"></a> "```" .. newline</span> +<span id="cb109-16"><a href="#cb109-16" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input))</span> +<span id="cb109-17"><a href="#cb109-17" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb109-18"><a href="#cb109-18" aria-hidden="true" tabindex="-1"></a> convert = markdown.new({</span> +<span id="cb109-19"><a href="#cb109-19" aria-hidden="true" tabindex="-1"></a> fencedCode = true, blankBeforeCodeFence = true})</span> +<span id="cb109-20"><a href="#cb109-20" aria-hidden="true" tabindex="-1"></a> input = "A paragraph." .. newline ..</span> +<span id="cb109-21"><a href="#cb109-21" aria-hidden="true" tabindex="-1"></a> "```" .. newline ..</span> +<span id="cb109-22"><a href="#cb109-22" aria-hidden="true" tabindex="-1"></a> "Not a fenced code." .. newline ..</span> +<span id="cb109-23"><a href="#cb109-23" aria-hidden="true" tabindex="-1"></a> "```" .. newline</span> +<span id="cb109-24"><a href="#cb109-24" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb109-25"><a href="#cb109-25" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb109-26"><a href="#cb109-26" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Then, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb95"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb95-1"><a href="#cb95-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb110"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb110-1"><a href="#cb110-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1474,27 +1781,31 @@ contain the following text:</p> <pre><code>A fenced code.</code></pre> <p>A paragraph. <code>Not a fenced code.</code></p> </blockquote> -<h5 class="unnumbered" id="lua-cli-example-3">Lua CLI Example</h5> +<h5 class="unnumbered" id="lua-cli-example-4">Lua CLI Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb97"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb97-1"><a href="#cb97-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb97-2"><a href="#cb97-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb97-3"><a href="#cb97-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> -<span id="cb97-4"><a href="#cb97-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> -<span id="cb97-5"><a href="#cb97-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb112"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb112-1"><a href="#cb112-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb112-2"><a href="#cb112-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb112-3"><a href="#cb112-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb112-4"><a href="#cb112-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb112-5"><a href="#cb112-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb112-6"><a href="#cb112-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> +<span id="cb112-7"><a href="#cb112-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> +<span id="cb112-8"><a href="#cb112-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb112-9"><a href="#cb112-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p> -<div class="sourceCode" id="cb98"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb98-1"><a href="#cb98-1" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb98-2"><a href="#cb98-2" aria-hidden="true" tabindex="-1"></a><span class="in">```</span></span> -<span id="cb98-3"><a href="#cb98-3" aria-hidden="true" tabindex="-1"></a><span class="in">A code fence?</span></span> -<span id="cb98-4"><a href="#cb98-4" aria-hidden="true" tabindex="-1"></a><span class="in">```</span></span></code></pre></div> +<div class="sourceCode" id="cb113"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb113-1"><a href="#cb113-1" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb113-2"><a href="#cb113-2" aria-hidden="true" tabindex="-1"></a><span class="in">```</span></span> +<span id="cb113-3"><a href="#cb113-3" aria-hidden="true" tabindex="-1"></a><span class="in">A code fence?</span></span> +<span id="cb113-4"><a href="#cb113-4" aria-hidden="true" tabindex="-1"></a><span class="in">```</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb99"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb99-1"><a href="#cb99-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ fencedCode=true <span class="at">--</span> content.md optionfalse.tex</span> -<span id="cb99-2"><a href="#cb99-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ fencedCode=true blankBeforeCodeFence=true <span class="at">--</span> content.md optiontrue.tex</span> -<span id="cb99-3"><a href="#cb99-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb114"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb114-1"><a href="#cb114-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ fencedCode=true <span class="at">--</span> content.md optionfalse.tex</span> +<span id="cb114-2"><a href="#cb114-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ fencedCode=true blankBeforeCodeFence=true <span class="at">--</span> content.md optiontrue.tex</span> +<span id="cb114-3"><a href="#cb114-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems @@ -1515,29 +1826,29 @@ contain the following text:</p> class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb101"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb101-1"><a href="#cb101-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb101-2"><a href="#cb101-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFencedCode</span>{true}</span> -<span id="cb101-3"><a href="#cb101-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb101-4"><a href="#cb101-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb101-5"><a href="#cb101-5" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb101-6"><a href="#cb101-6" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb101-7"><a href="#cb101-7" aria-hidden="true" tabindex="-1"></a>A fenced code.</span> -<span id="cb101-8"><a href="#cb101-8" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb101-9"><a href="#cb101-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb101-10"><a href="#cb101-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb101-11"><a href="#cb101-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionBlankBeforeCodeFence</span>{true}</span> -<span id="cb101-12"><a href="#cb101-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb101-13"><a href="#cb101-13" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb101-14"><a href="#cb101-14" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb101-15"><a href="#cb101-15" aria-hidden="true" tabindex="-1"></a>Not a fenced code.</span> -<span id="cb101-16"><a href="#cb101-16" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb101-17"><a href="#cb101-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb101-18"><a href="#cb101-18" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb101-19"><a href="#cb101-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb116"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb116-1"><a href="#cb116-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb116-2"><a href="#cb116-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFencedCode</span>{true}</span> +<span id="cb116-3"><a href="#cb116-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb116-4"><a href="#cb116-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb116-5"><a href="#cb116-5" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb116-6"><a href="#cb116-6" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb116-7"><a href="#cb116-7" aria-hidden="true" tabindex="-1"></a>A fenced code.</span> +<span id="cb116-8"><a href="#cb116-8" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb116-9"><a href="#cb116-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb116-10"><a href="#cb116-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb116-11"><a href="#cb116-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionBlankBeforeCodeFence</span>{true}</span> +<span id="cb116-12"><a href="#cb116-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb116-13"><a href="#cb116-13" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb116-14"><a href="#cb116-14" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb116-15"><a href="#cb116-15" aria-hidden="true" tabindex="-1"></a>Not a fenced code.</span> +<span id="cb116-16"><a href="#cb116-16" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb116-17"><a href="#cb116-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb116-18"><a href="#cb116-18" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb116-19"><a href="#cb116-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb102"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb102-1"><a href="#cb102-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb117"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb117-1"><a href="#cb117-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1549,29 +1860,29 @@ contain the following text:</p> class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb104"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb104-1"><a href="#cb104-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb104-2"><a href="#cb104-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedCode]{<span class="ex">markdown</span>}</span> -<span id="cb104-3"><a href="#cb104-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb104-4"><a href="#cb104-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb104-5"><a href="#cb104-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb104-6"><a href="#cb104-6" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb104-7"><a href="#cb104-7" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb104-8"><a href="#cb104-8" aria-hidden="true" tabindex="-1"></a>A fenced code.</span> -<span id="cb104-9"><a href="#cb104-9" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb104-10"><a href="#cb104-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb104-11"><a href="#cb104-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb104-12"><a href="#cb104-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{blankBeforeCodeFence}</span> -<span id="cb104-13"><a href="#cb104-13" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb104-14"><a href="#cb104-14" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb104-15"><a href="#cb104-15" aria-hidden="true" tabindex="-1"></a>Not a fenced code.</span> -<span id="cb104-16"><a href="#cb104-16" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb104-17"><a href="#cb104-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb104-18"><a href="#cb104-18" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb104-19"><a href="#cb104-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb119"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb119-1"><a href="#cb119-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb119-2"><a href="#cb119-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedCode]{<span class="ex">markdown</span>}</span> +<span id="cb119-3"><a href="#cb119-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb119-4"><a href="#cb119-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb119-5"><a href="#cb119-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb119-6"><a href="#cb119-6" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb119-7"><a href="#cb119-7" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb119-8"><a href="#cb119-8" aria-hidden="true" tabindex="-1"></a>A fenced code.</span> +<span id="cb119-9"><a href="#cb119-9" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb119-10"><a href="#cb119-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb119-11"><a href="#cb119-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb119-12"><a href="#cb119-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[blankBeforeCodeFence]</span> +<span id="cb119-13"><a href="#cb119-13" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb119-14"><a href="#cb119-14" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb119-15"><a href="#cb119-15" aria-hidden="true" tabindex="-1"></a>Not a fenced code.</span> +<span id="cb119-16"><a href="#cb119-16" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb119-17"><a href="#cb119-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb119-18"><a href="#cb119-18" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb119-19"><a href="#cb119-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb105"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb105-1"><a href="#cb105-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb120"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb120-1"><a href="#cb120-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1583,30 +1894,30 @@ contain the following text:</p> class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb107"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb107-1"><a href="#cb107-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb107-2"><a href="#cb107-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[fencedCode = yes]</span> -<span id="cb107-3"><a href="#cb107-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb107-4"><a href="#cb107-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb107-5"><a href="#cb107-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb107-6"><a href="#cb107-6" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb107-7"><a href="#cb107-7" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb107-8"><a href="#cb107-8" aria-hidden="true" tabindex="-1"></a>A fenced code.</span> -<span id="cb107-9"><a href="#cb107-9" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb107-10"><a href="#cb107-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb107-11"><a href="#cb107-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb107-12"><a href="#cb107-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[blankBeforeCodeFence = yes]</span> -<span id="cb107-13"><a href="#cb107-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb107-14"><a href="#cb107-14" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb107-15"><a href="#cb107-15" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb107-16"><a href="#cb107-16" aria-hidden="true" tabindex="-1"></a>Not a fenced code.</span> -<span id="cb107-17"><a href="#cb107-17" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb107-18"><a href="#cb107-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb107-19"><a href="#cb107-19" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb107-20"><a href="#cb107-20" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb122"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb122-1"><a href="#cb122-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb122-2"><a href="#cb122-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[fencedCode = yes]</span> +<span id="cb122-3"><a href="#cb122-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb122-4"><a href="#cb122-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb122-5"><a href="#cb122-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb122-6"><a href="#cb122-6" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb122-7"><a href="#cb122-7" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb122-8"><a href="#cb122-8" aria-hidden="true" tabindex="-1"></a>A fenced code.</span> +<span id="cb122-9"><a href="#cb122-9" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb122-10"><a href="#cb122-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb122-11"><a href="#cb122-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb122-12"><a href="#cb122-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[blankBeforeCodeFence = yes]</span> +<span id="cb122-13"><a href="#cb122-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb122-14"><a href="#cb122-14" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb122-15"><a href="#cb122-15" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb122-16"><a href="#cb122-16" aria-hidden="true" tabindex="-1"></a>Not a fenced code.</span> +<span id="cb122-17"><a href="#cb122-17" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb122-18"><a href="#cb122-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb122-19"><a href="#cb122-19" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb122-20"><a href="#cb122-20" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb108"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb108-1"><a href="#cb108-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb123"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb123-1"><a href="#cb123-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1614,8 +1925,8 @@ contain the following text:</p> <pre><code>A fenced code.</code></pre> <p>A paragraph. <code>Not a fenced code.</code></p> </blockquote> -<h4 data-number="2.2.1.7" id="option-blankbeforedivfence"><span -class="header-section-number">2.2.1.7</span> Option +<h4 data-number="2.2.1.10" id="option-blankbeforedivfence"><span +class="header-section-number">2.2.1.10</span> Option <code>blankBeforeDivFence</code></h4> <dl> <dt><code>blankBeforeDivFence</code> (default value: @@ -1638,31 +1949,31 @@ div.</p> class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb110"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb110-1"><a href="#cb110-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb110-2"><a href="#cb110-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedDivs]{<span class="ex">markdown</span>}</span> -<span id="cb110-3"><a href="#cb110-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb110-4"><a href="#cb110-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb110-5"><a href="#cb110-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb110-6"><a href="#cb110-6" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb110-7"><a href="#cb110-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb110-8"><a href="#cb110-8" aria-hidden="true" tabindex="-1"></a>::: {.identifier}</span> -<span id="cb110-9"><a href="#cb110-9" aria-hidden="true" tabindex="-1"></a>A fenced div.</span> -<span id="cb110-10"><a href="#cb110-10" aria-hidden="true" tabindex="-1"></a>:::</span> -<span id="cb110-11"><a href="#cb110-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb110-12"><a href="#cb110-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb110-13"><a href="#cb110-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{blankBeforeDivFence}</span> -<span id="cb110-14"><a href="#cb110-14" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb110-15"><a href="#cb110-15" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb110-16"><a href="#cb110-16" aria-hidden="true" tabindex="-1"></a>::: {.identifier}</span> -<span id="cb110-17"><a href="#cb110-17" aria-hidden="true" tabindex="-1"></a>Not a fenced div.</span> -<span id="cb110-18"><a href="#cb110-18" aria-hidden="true" tabindex="-1"></a>:::</span> -<span id="cb110-19"><a href="#cb110-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb110-20"><a href="#cb110-20" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb110-21"><a href="#cb110-21" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb111"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb111-1"><a href="#cb111-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb125"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb125-1"><a href="#cb125-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb125-2"><a href="#cb125-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedDivs]{<span class="ex">markdown</span>}</span> +<span id="cb125-3"><a href="#cb125-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb125-4"><a href="#cb125-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb125-5"><a href="#cb125-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb125-6"><a href="#cb125-6" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb125-7"><a href="#cb125-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb125-8"><a href="#cb125-8" aria-hidden="true" tabindex="-1"></a>::: {.identifier}</span> +<span id="cb125-9"><a href="#cb125-9" aria-hidden="true" tabindex="-1"></a>A fenced div.</span> +<span id="cb125-10"><a href="#cb125-10" aria-hidden="true" tabindex="-1"></a>:::</span> +<span id="cb125-11"><a href="#cb125-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb125-12"><a href="#cb125-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb125-13"><a href="#cb125-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[blankBeforeDivFence]</span> +<span id="cb125-14"><a href="#cb125-14" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb125-15"><a href="#cb125-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb125-16"><a href="#cb125-16" aria-hidden="true" tabindex="-1"></a>::: {.identifier}</span> +<span id="cb125-17"><a href="#cb125-17" aria-hidden="true" tabindex="-1"></a>Not a fenced div.</span> +<span id="cb125-18"><a href="#cb125-18" aria-hidden="true" tabindex="-1"></a>:::</span> +<span id="cb125-19"><a href="#cb125-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb125-20"><a href="#cb125-20" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb125-21"><a href="#cb125-21" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb126"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb126-1"><a href="#cb126-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1671,8 +1982,8 @@ contain the following text:</p> <p>A paragraph.</p> <p>::: {.identifier} Not a fenced div. :::</p> </blockquote> -<h4 data-number="2.2.1.8" id="option-blankbeforeheading"><span -class="header-section-number">2.2.1.8</span> Option +<h4 data-number="2.2.1.11" id="option-blankbeforeheading"><span +class="header-section-number">2.2.1.11</span> Option <code>blankBeforeHeading</code></h4> <dl> <dt><code>blankBeforeHeading</code> (default value: @@ -1692,33 +2003,37 @@ header.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="lua-module-example-4">Lua Module Example</h5> +<h5 class="unnumbered" id="lua-module-example-5">Lua Module Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb112"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb112-1"><a href="#cb112-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb112-2"><a href="#cb112-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb112-3"><a href="#cb112-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingOne</span>#1{{<span class="fu">\bf</span> #1}<span class="fu">\par</span>}</span> -<span id="cb112-4"><a href="#cb112-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb112-5"><a href="#cb112-5" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb112-6"><a href="#cb112-6" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> -<span id="cb112-7"><a href="#cb112-7" aria-hidden="true" tabindex="-1"></a> local convert, input</span> -<span id="cb112-8"><a href="#cb112-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb112-9"><a href="#cb112-9" aria-hidden="true" tabindex="-1"></a> convert = markdown.new()</span> -<span id="cb112-10"><a href="#cb112-10" aria-hidden="true" tabindex="-1"></a> input = "A paragraph." .. newline ..</span> -<span id="cb112-11"><a href="#cb112-11" aria-hidden="true" tabindex="-1"></a> "A heading." .. newline ..</span> -<span id="cb112-12"><a href="#cb112-12" aria-hidden="true" tabindex="-1"></a> "==========" .. newline</span> -<span id="cb112-13"><a href="#cb112-13" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input))</span> -<span id="cb112-14"><a href="#cb112-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb112-15"><a href="#cb112-15" aria-hidden="true" tabindex="-1"></a> convert = markdown.new({blankBeforeHeading = true})</span> -<span id="cb112-16"><a href="#cb112-16" aria-hidden="true" tabindex="-1"></a> input = "A paragraph." .. newline ..</span> -<span id="cb112-17"><a href="#cb112-17" aria-hidden="true" tabindex="-1"></a> "Not a heading." .. newline ..</span> -<span id="cb112-18"><a href="#cb112-18" aria-hidden="true" tabindex="-1"></a> "==============" .. newline</span> -<span id="cb112-19"><a href="#cb112-19" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb112-20"><a href="#cb112-20" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb127"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb127-1"><a href="#cb127-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb127-2"><a href="#cb127-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb127-3"><a href="#cb127-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingOne</span>#1{{<span class="fu">\bf</span> #1}<span class="fu">\par</span>}</span> +<span id="cb127-4"><a href="#cb127-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb127-5"><a href="#cb127-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb127-6"><a href="#cb127-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb127-7"><a href="#cb127-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb127-8"><a href="#cb127-8" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb127-9"><a href="#cb127-9" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> +<span id="cb127-10"><a href="#cb127-10" aria-hidden="true" tabindex="-1"></a> local convert, input</span> +<span id="cb127-11"><a href="#cb127-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb127-12"><a href="#cb127-12" aria-hidden="true" tabindex="-1"></a> convert = markdown.new()</span> +<span id="cb127-13"><a href="#cb127-13" aria-hidden="true" tabindex="-1"></a> input = "A paragraph." .. newline ..</span> +<span id="cb127-14"><a href="#cb127-14" aria-hidden="true" tabindex="-1"></a> "A heading." .. newline ..</span> +<span id="cb127-15"><a href="#cb127-15" aria-hidden="true" tabindex="-1"></a> "==========" .. newline</span> +<span id="cb127-16"><a href="#cb127-16" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input))</span> +<span id="cb127-17"><a href="#cb127-17" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb127-18"><a href="#cb127-18" aria-hidden="true" tabindex="-1"></a> convert = markdown.new({blankBeforeHeading = true})</span> +<span id="cb127-19"><a href="#cb127-19" aria-hidden="true" tabindex="-1"></a> input = "A paragraph." .. newline ..</span> +<span id="cb127-20"><a href="#cb127-20" aria-hidden="true" tabindex="-1"></a> "Not a heading." .. newline ..</span> +<span id="cb127-21"><a href="#cb127-21" aria-hidden="true" tabindex="-1"></a> "==============" .. newline</span> +<span id="cb127-22"><a href="#cb127-22" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb127-23"><a href="#cb127-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb127-24"><a href="#cb127-24" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Then, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb113"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb113-1"><a href="#cb113-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb128"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb128-1"><a href="#cb128-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1726,26 +2041,30 @@ contain the following text:</p> <h1 id="a-heading.">A heading.</h1> <p>A paragraph. Not a heading. ==============</p> </blockquote> -<h5 class="unnumbered" id="lua-cli-example-4">Lua CLI Example</h5> +<h5 class="unnumbered" id="lua-cli-example-5">Lua CLI Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb114"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb114-1"><a href="#cb114-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb114-2"><a href="#cb114-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb114-3"><a href="#cb114-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> -<span id="cb114-4"><a href="#cb114-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> -<span id="cb114-5"><a href="#cb114-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb129"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb129-1"><a href="#cb129-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb129-2"><a href="#cb129-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb129-3"><a href="#cb129-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb129-4"><a href="#cb129-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb129-5"><a href="#cb129-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb129-6"><a href="#cb129-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> +<span id="cb129-7"><a href="#cb129-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> +<span id="cb129-8"><a href="#cb129-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb129-9"><a href="#cb129-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p> -<div class="sourceCode" id="cb115"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb115-1"><a href="#cb115-1" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb115-2"><a href="#cb115-2" aria-hidden="true" tabindex="-1"></a>A heading?</span> -<span id="cb115-3"><a href="#cb115-3" aria-hidden="true" tabindex="-1"></a><span class="fu">==========</span></span></code></pre></div> +<div class="sourceCode" id="cb130"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb130-1"><a href="#cb130-1" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb130-2"><a href="#cb130-2" aria-hidden="true" tabindex="-1"></a>A heading?</span> +<span id="cb130-3"><a href="#cb130-3" aria-hidden="true" tabindex="-1"></a><span class="fu">==========</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb116"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb116-1"><a href="#cb116-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> -<span id="cb116-2"><a href="#cb116-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ blankBeforeHeading=true <span class="at">--</span> content.md optiontrue.tex</span> -<span id="cb116-3"><a href="#cb116-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb131"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb131-1"><a href="#cb131-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> +<span id="cb131-2"><a href="#cb131-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ blankBeforeHeading=true <span class="at">--</span> content.md optiontrue.tex</span> +<span id="cb131-3"><a href="#cb131-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems @@ -1766,26 +2085,26 @@ contain the following text:</p> class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb117"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb117-1"><a href="#cb117-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb117-2"><a href="#cb117-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb117-3"><a href="#cb117-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb117-4"><a href="#cb117-4" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb117-5"><a href="#cb117-5" aria-hidden="true" tabindex="-1"></a>A heading.</span> -<span id="cb117-6"><a href="#cb117-6" aria-hidden="true" tabindex="-1"></a>==========</span> -<span id="cb117-7"><a href="#cb117-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb117-8"><a href="#cb117-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb117-9"><a href="#cb117-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionBlankBeforeHeading</span>{true}</span> -<span id="cb117-10"><a href="#cb117-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb117-11"><a href="#cb117-11" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb117-12"><a href="#cb117-12" aria-hidden="true" tabindex="-1"></a>Not a heading.</span> -<span id="cb117-13"><a href="#cb117-13" aria-hidden="true" tabindex="-1"></a>==============</span> -<span id="cb117-14"><a href="#cb117-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb117-15"><a href="#cb117-15" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb117-16"><a href="#cb117-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb118"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb118-1"><a href="#cb118-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb132"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb132-1"><a href="#cb132-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb132-2"><a href="#cb132-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb132-3"><a href="#cb132-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb132-4"><a href="#cb132-4" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb132-5"><a href="#cb132-5" aria-hidden="true" tabindex="-1"></a>A heading.</span> +<span id="cb132-6"><a href="#cb132-6" aria-hidden="true" tabindex="-1"></a>==========</span> +<span id="cb132-7"><a href="#cb132-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb132-8"><a href="#cb132-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb132-9"><a href="#cb132-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionBlankBeforeHeading</span>{true}</span> +<span id="cb132-10"><a href="#cb132-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb132-11"><a href="#cb132-11" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb132-12"><a href="#cb132-12" aria-hidden="true" tabindex="-1"></a>Not a heading.</span> +<span id="cb132-13"><a href="#cb132-13" aria-hidden="true" tabindex="-1"></a>==============</span> +<span id="cb132-14"><a href="#cb132-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb132-15"><a href="#cb132-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb132-16"><a href="#cb132-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb133"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb133-1"><a href="#cb133-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1797,27 +2116,27 @@ contain the following text:</p> class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb119"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb119-1"><a href="#cb119-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb119-2"><a href="#cb119-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb119-3"><a href="#cb119-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb119-4"><a href="#cb119-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb119-5"><a href="#cb119-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb119-6"><a href="#cb119-6" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb119-7"><a href="#cb119-7" aria-hidden="true" tabindex="-1"></a>A heading.</span> -<span id="cb119-8"><a href="#cb119-8" aria-hidden="true" tabindex="-1"></a>==========</span> -<span id="cb119-9"><a href="#cb119-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb119-10"><a href="#cb119-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb119-11"><a href="#cb119-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{blankBeforeHeading}</span> -<span id="cb119-12"><a href="#cb119-12" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb119-13"><a href="#cb119-13" aria-hidden="true" tabindex="-1"></a>Not a heading.</span> -<span id="cb119-14"><a href="#cb119-14" aria-hidden="true" tabindex="-1"></a>==============</span> -<span id="cb119-15"><a href="#cb119-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb119-16"><a href="#cb119-16" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb119-17"><a href="#cb119-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb134"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb134-1"><a href="#cb134-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb134-2"><a href="#cb134-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb134-3"><a href="#cb134-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb134-4"><a href="#cb134-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb134-5"><a href="#cb134-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb134-6"><a href="#cb134-6" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb134-7"><a href="#cb134-7" aria-hidden="true" tabindex="-1"></a>A heading.</span> +<span id="cb134-8"><a href="#cb134-8" aria-hidden="true" tabindex="-1"></a>==========</span> +<span id="cb134-9"><a href="#cb134-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb134-10"><a href="#cb134-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb134-11"><a href="#cb134-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[blankBeforeHeading]</span> +<span id="cb134-12"><a href="#cb134-12" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb134-13"><a href="#cb134-13" aria-hidden="true" tabindex="-1"></a>Not a heading.</span> +<span id="cb134-14"><a href="#cb134-14" aria-hidden="true" tabindex="-1"></a>==============</span> +<span id="cb134-15"><a href="#cb134-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb134-16"><a href="#cb134-16" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb134-17"><a href="#cb134-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb120"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb120-1"><a href="#cb120-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb135"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb135-1"><a href="#cb135-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1829,27 +2148,27 @@ contain the following text:</p> class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb121"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb121-1"><a href="#cb121-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb121-2"><a href="#cb121-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb121-3"><a href="#cb121-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb121-4"><a href="#cb121-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb121-5"><a href="#cb121-5" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb121-6"><a href="#cb121-6" aria-hidden="true" tabindex="-1"></a>A heading.</span> -<span id="cb121-7"><a href="#cb121-7" aria-hidden="true" tabindex="-1"></a>==========</span> -<span id="cb121-8"><a href="#cb121-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb121-9"><a href="#cb121-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb121-10"><a href="#cb121-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[blankBeforeHeading = yes]</span> -<span id="cb121-11"><a href="#cb121-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb121-12"><a href="#cb121-12" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> -<span id="cb121-13"><a href="#cb121-13" aria-hidden="true" tabindex="-1"></a>Not a heading.</span> -<span id="cb121-14"><a href="#cb121-14" aria-hidden="true" tabindex="-1"></a>==============</span> -<span id="cb121-15"><a href="#cb121-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb121-16"><a href="#cb121-16" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb121-17"><a href="#cb121-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb136"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb136-1"><a href="#cb136-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb136-2"><a href="#cb136-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb136-3"><a href="#cb136-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb136-4"><a href="#cb136-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb136-5"><a href="#cb136-5" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb136-6"><a href="#cb136-6" aria-hidden="true" tabindex="-1"></a>A heading.</span> +<span id="cb136-7"><a href="#cb136-7" aria-hidden="true" tabindex="-1"></a>==========</span> +<span id="cb136-8"><a href="#cb136-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb136-9"><a href="#cb136-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb136-10"><a href="#cb136-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[blankBeforeHeading = yes]</span> +<span id="cb136-11"><a href="#cb136-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb136-12"><a href="#cb136-12" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb136-13"><a href="#cb136-13" aria-hidden="true" tabindex="-1"></a>Not a heading.</span> +<span id="cb136-14"><a href="#cb136-14" aria-hidden="true" tabindex="-1"></a>==============</span> +<span id="cb136-15"><a href="#cb136-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb136-16"><a href="#cb136-16" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb136-17"><a href="#cb136-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb122"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb122-1"><a href="#cb122-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb137"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb137-1"><a href="#cb137-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1857,8 +2176,202 @@ contain the following text:</p> <h1 id="a-heading.-3">A heading.</h1> <p>A paragraph. Not a heading. ==============</p> </blockquote> -<h4 data-number="2.2.1.9" id="option-bracketedspans"><span -class="header-section-number">2.2.1.9</span> Option +<h4 data-number="2.2.1.12" id="option-blankbeforelist"><span +class="header-section-number">2.2.1.12</span> Option +<code>blankBeforeList</code></h4> +<dl> +<dt><code>blankBeforeList</code> (default value: +<code>false</code>)</dt> +<dd> +<dl> +<dt>true</dt> +<dd> +<p>Require a blank line between a paragraph and the following list.</p> +</dd> +<dt>false</dt> +<dd> +<p>Do not require a blank line between a paragraph and the following +list.</p> +</dd> +</dl> +</dd> +</dl> +<h5 class="unnumbered" id="lua-module-example-6">Lua Module Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb138"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb138-1"><a href="#cb138-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb138-2"><a href="#cb138-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb138-3"><a href="#cb138-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb138-4"><a href="#cb138-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb138-5"><a href="#cb138-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb138-6"><a href="#cb138-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb138-7"><a href="#cb138-7" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb138-8"><a href="#cb138-8" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> +<span id="cb138-9"><a href="#cb138-9" aria-hidden="true" tabindex="-1"></a> local convert, input</span> +<span id="cb138-10"><a href="#cb138-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb138-11"><a href="#cb138-11" aria-hidden="true" tabindex="-1"></a> convert = markdown.new()</span> +<span id="cb138-12"><a href="#cb138-12" aria-hidden="true" tabindex="-1"></a> input = "A paragraph." .. newline ..</span> +<span id="cb138-13"><a href="#cb138-13" aria-hidden="true" tabindex="-1"></a> "- a list" .. newline</span> +<span id="cb138-14"><a href="#cb138-14" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input))</span> +<span id="cb138-15"><a href="#cb138-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb138-16"><a href="#cb138-16" aria-hidden="true" tabindex="-1"></a> convert = markdown.new({</span> +<span id="cb138-17"><a href="#cb138-17" aria-hidden="true" tabindex="-1"></a> blankBeforeList = true})</span> +<span id="cb138-18"><a href="#cb138-18" aria-hidden="true" tabindex="-1"></a> input = "A paragraph." .. newline ..</span> +<span id="cb138-19"><a href="#cb138-19" aria-hidden="true" tabindex="-1"></a> "- not a list" .. newline</span> +<span id="cb138-20"><a href="#cb138-20" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb138-21"><a href="#cb138-21" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb138-22"><a href="#cb138-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<p>Then, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb139"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb139-1"><a href="#cb139-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>A paragraph.</p> +<ul> +<li>a list</li> +</ul> +<p>A paragraph. - not a list</p> +</blockquote> +<h5 class="unnumbered" id="lua-cli-example-6">Lua CLI Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb140"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb140-1"><a href="#cb140-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb140-2"><a href="#cb140-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb140-3"><a href="#cb140-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb140-4"><a href="#cb140-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb140-5"><a href="#cb140-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb140-6"><a href="#cb140-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> +<span id="cb140-7"><a href="#cb140-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> +<span id="cb140-8"><a href="#cb140-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb140-9"><a href="#cb140-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<p>Using a text editor, create a text document named +<code>content.md</code> with the following content:</p> +<div class="sourceCode" id="cb141"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb141-1"><a href="#cb141-1" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb141-2"><a href="#cb141-2" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>a list?</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb142"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb142-1"><a href="#cb142-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> +<span id="cb142-2"><a href="#cb142-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ blankBeforeList=true <span class="at">--</span> content.md optiontrue.tex</span> +<span id="cb142-3"><a href="#cb142-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua +CLI script file, such as +<code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems +or <code>C:\Users\</code>⟨<em>Your +username</em>⟩<code>\texmf\scripts\markdown\markdown-cli.lua</code> on +Windows systems. Use the command +<code>kpsewhich -a markdown-cli.lua</code> to locate the Lua CLI script +file using <a href="https://tug.org/kpathsea/" +title="Kpathsea - TeX Users Group">Kpathsea</a>.</p> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>A paragraph.</p> +<ul> +<li>a list?</li> +</ul> +<p>A paragraph. - a list?</p> +</blockquote> +<h5 class="unnumbered" id="plain-tex-example-5">Plain <span +class="tex">T<sub>e</sub>X</span> Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb143"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb143-1"><a href="#cb143-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb143-2"><a href="#cb143-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb143-3"><a href="#cb143-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb143-4"><a href="#cb143-4" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb143-5"><a href="#cb143-5" aria-hidden="true" tabindex="-1"></a>- a list</span> +<span id="cb143-6"><a href="#cb143-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb143-7"><a href="#cb143-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb143-8"><a href="#cb143-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionBlankBeforeList</span>{true}</span> +<span id="cb143-9"><a href="#cb143-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb143-10"><a href="#cb143-10" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb143-11"><a href="#cb143-11" aria-hidden="true" tabindex="-1"></a>- not a list</span> +<span id="cb143-12"><a href="#cb143-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb143-13"><a href="#cb143-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb143-14"><a href="#cb143-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb144"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb144-1"><a href="#cb144-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>A paragraph.</p> +<ul> +<li>a list</li> +</ul> +<p>A paragraph. - not a list</p> +</blockquote> +<h5 class="unnumbered" id="latex-example-7"><span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb145"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb145-1"><a href="#cb145-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb145-2"><a href="#cb145-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb145-3"><a href="#cb145-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb145-4"><a href="#cb145-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb145-5"><a href="#cb145-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb145-6"><a href="#cb145-6" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb145-7"><a href="#cb145-7" aria-hidden="true" tabindex="-1"></a>- a list</span> +<span id="cb145-8"><a href="#cb145-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb145-9"><a href="#cb145-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb145-10"><a href="#cb145-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[blankBeforeList]</span> +<span id="cb145-11"><a href="#cb145-11" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb145-12"><a href="#cb145-12" aria-hidden="true" tabindex="-1"></a>- not a list</span> +<span id="cb145-13"><a href="#cb145-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb145-14"><a href="#cb145-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb145-15"><a href="#cb145-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb146"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb146-1"><a href="#cb146-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>A paragraph.</p> +<ul> +<li>a list</li> +</ul> +<p>A paragraph. - not a list</p> +</blockquote> +<h5 class="unnumbered" id="context-example-6">Con<span +class="tex">T<sub>e</sub>X</span>t Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb147"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb147-1"><a href="#cb147-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb147-2"><a href="#cb147-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb147-3"><a href="#cb147-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb147-4"><a href="#cb147-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb147-5"><a href="#cb147-5" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb147-6"><a href="#cb147-6" aria-hidden="true" tabindex="-1"></a>- a list</span> +<span id="cb147-7"><a href="#cb147-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb147-8"><a href="#cb147-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb147-9"><a href="#cb147-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[blankBeforeList = yes]</span> +<span id="cb147-10"><a href="#cb147-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb147-11"><a href="#cb147-11" aria-hidden="true" tabindex="-1"></a>A paragraph.</span> +<span id="cb147-12"><a href="#cb147-12" aria-hidden="true" tabindex="-1"></a>- not a list</span> +<span id="cb147-13"><a href="#cb147-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb147-14"><a href="#cb147-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb147-15"><a href="#cb147-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb148"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb148-1"><a href="#cb148-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>A paragraph.</p> +<ul> +<li>a list</li> +</ul> +<p>A paragraph. - not a list</p> +</blockquote> +<h4 data-number="2.2.1.13" id="option-bracketedspans"><span +class="header-section-number">2.2.1.13</span> Option <code>bracketedSpans</code></h4> <dl> <dt><code>bracketedSpans</code> (default value: <code>false</code>)</dt> @@ -1869,8 +2382,8 @@ class="header-section-number">2.2.1.9</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-bracketed_spans">bracketed span syntax extension</a>:</p> -<div class="sourceCode" id="cb123"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb123-1"><a href="#cb123-1" aria-hidden="true" tabindex="-1"></a><span class="co">[</span><span class="ot">This is *some text*</span><span class="co">]</span>{.class key=val}</span></code></pre></div> +<div class="sourceCode" id="cb149"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb149-1"><a href="#cb149-1" aria-hidden="true" tabindex="-1"></a><span class="co">[</span><span class="ot">This is *some text*</span><span class="co">]</span>{.class key=val}</span></code></pre></div> </dd> </dl> </dd> @@ -1883,59 +2396,59 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb123-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-7"><span +<h5 class="unnumbered" id="latex-example-8"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb124"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb124-1"><a href="#cb124-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb124-2"><a href="#cb124-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[bracketedSpans]{<span class="ex">markdown</span>}</span> -<span id="cb124-3"><a href="#cb124-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">expl3</span>}</span> -<span id="cb124-4"><a href="#cb124-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> -<span id="cb124-5"><a href="#cb124-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb124-6"><a href="#cb124-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb124-7"><a href="#cb124-7" aria-hidden="true" tabindex="-1"></a> bracketedSpanAttributeContextBegin = {</span> -<span id="cb124-8"><a href="#cb124-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_begin:</span> -<span id="cb124-9"><a href="#cb124-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\color</span>_group_begin:</span> -<span id="cb124-10"><a href="#cb124-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{</span> -<span id="cb124-11"><a href="#cb124-11" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb124-12"><a href="#cb124-12" aria-hidden="true" tabindex="-1"></a> attributeKeyValue = {</span> -<span id="cb124-13"><a href="#cb124-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\str</span>_if_eq:nnT</span> -<span id="cb124-14"><a href="#cb124-14" aria-hidden="true" tabindex="-1"></a> { ##1 }</span> -<span id="cb124-15"><a href="#cb124-15" aria-hidden="true" tabindex="-1"></a> { color }</span> -<span id="cb124-16"><a href="#cb124-16" aria-hidden="true" tabindex="-1"></a> {</span> -<span id="cb124-17"><a href="#cb124-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\color</span>_select:n { ##2 }</span> -<span id="cb124-18"><a href="#cb124-18" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb124-19"><a href="#cb124-19" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb124-20"><a href="#cb124-20" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb124-21"><a href="#cb124-21" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb124-22"><a href="#cb124-22" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb124-23"><a href="#cb124-23" aria-hidden="true" tabindex="-1"></a> bracketedSpanAttributeContextEnd = {</span> -<span id="cb124-24"><a href="#cb124-24" aria-hidden="true" tabindex="-1"></a> <span class="fu">\color</span>_group_end:</span> -<span id="cb124-25"><a href="#cb124-25" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_end:</span> -<span id="cb124-26"><a href="#cb124-26" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb124-27"><a href="#cb124-27" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb124-28"><a href="#cb124-28" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb124-29"><a href="#cb124-29" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> -<span id="cb124-30"><a href="#cb124-30" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb124-31"><a href="#cb124-31" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb124-32"><a href="#cb124-32" aria-hidden="true" tabindex="-1"></a>Here is some [colored text]{color=red}.</span> -<span id="cb124-33"><a href="#cb124-33" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb124-34"><a href="#cb124-34" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb150"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb150-1"><a href="#cb150-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb150-2"><a href="#cb150-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[bracketedSpans]{<span class="ex">markdown</span>}</span> +<span id="cb150-3"><a href="#cb150-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">expl3</span>}</span> +<span id="cb150-4"><a href="#cb150-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> +<span id="cb150-5"><a href="#cb150-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb150-6"><a href="#cb150-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb150-7"><a href="#cb150-7" aria-hidden="true" tabindex="-1"></a> bracketedSpanAttributeContextBegin = {</span> +<span id="cb150-8"><a href="#cb150-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_begin:</span> +<span id="cb150-9"><a href="#cb150-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\color</span>_group_begin:</span> +<span id="cb150-10"><a href="#cb150-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{</span> +<span id="cb150-11"><a href="#cb150-11" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb150-12"><a href="#cb150-12" aria-hidden="true" tabindex="-1"></a> attributeKeyValue = {</span> +<span id="cb150-13"><a href="#cb150-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\str</span>_if_eq:nnT</span> +<span id="cb150-14"><a href="#cb150-14" aria-hidden="true" tabindex="-1"></a> { ##1 }</span> +<span id="cb150-15"><a href="#cb150-15" aria-hidden="true" tabindex="-1"></a> { color }</span> +<span id="cb150-16"><a href="#cb150-16" aria-hidden="true" tabindex="-1"></a> {</span> +<span id="cb150-17"><a href="#cb150-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\color</span>_select:n { ##2 }</span> +<span id="cb150-18"><a href="#cb150-18" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb150-19"><a href="#cb150-19" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb150-20"><a href="#cb150-20" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb150-21"><a href="#cb150-21" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb150-22"><a href="#cb150-22" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb150-23"><a href="#cb150-23" aria-hidden="true" tabindex="-1"></a> bracketedSpanAttributeContextEnd = {</span> +<span id="cb150-24"><a href="#cb150-24" aria-hidden="true" tabindex="-1"></a> <span class="fu">\color</span>_group_end:</span> +<span id="cb150-25"><a href="#cb150-25" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_end:</span> +<span id="cb150-26"><a href="#cb150-26" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb150-27"><a href="#cb150-27" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb150-28"><a href="#cb150-28" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb150-29"><a href="#cb150-29" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> +<span id="cb150-30"><a href="#cb150-30" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb150-31"><a href="#cb150-31" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb150-32"><a href="#cb150-32" aria-hidden="true" tabindex="-1"></a>Here is some [colored text]{color=red}.</span> +<span id="cb150-33"><a href="#cb150-33" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb150-34"><a href="#cb150-34" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb125"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb125-1"><a href="#cb125-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb151"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb151-1"><a href="#cb151-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Here is some <span style="color: red">colored text</span>.</p> </blockquote> -<h4 data-number="2.2.1.10" id="option-breakableblockquotes"><span -class="header-section-number">2.2.1.10</span> Option +<h4 data-number="2.2.1.14" id="option-breakableblockquotes"><span +class="header-section-number">2.2.1.14</span> Option <code>breakableBlockquotes</code></h4> <dl> <dt><code>breakableBlockquotes</code> (default value: -<code>false</code>)</dt> +<code>true</code>)</dt> <dd> <dl> <dt>true</dt> @@ -1949,31 +2462,35 @@ class="header-section-number">2.2.1.10</span> Option </dl> </dd> </dl> -<h5 class="unnumbered" id="lua-module-example-5">Lua Module Example</h5> +<h5 class="unnumbered" id="lua-module-example-7">Lua Module Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb126"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb126-1"><a href="#cb126-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb126-2"><a href="#cb126-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb126-3"><a href="#cb126-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingOne</span>#1{{<span class="fu">\bf</span> #1}<span class="fu">\par</span>}</span> -<span id="cb126-4"><a href="#cb126-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb126-5"><a href="#cb126-5" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb126-6"><a href="#cb126-6" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> -<span id="cb126-7"><a href="#cb126-7" aria-hidden="true" tabindex="-1"></a> local convert, input</span> -<span id="cb126-8"><a href="#cb126-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb126-9"><a href="#cb126-9" aria-hidden="true" tabindex="-1"></a> convert = markdown.new()</span> -<span id="cb126-10"><a href="#cb126-10" aria-hidden="true" tabindex="-1"></a> input = "> A single" .. newline .. newline ..</span> -<span id="cb126-11"><a href="#cb126-11" aria-hidden="true" tabindex="-1"></a> "> block quote." .. newline</span> -<span id="cb126-12"><a href="#cb126-12" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input))</span> -<span id="cb126-13"><a href="#cb126-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb126-14"><a href="#cb126-14" aria-hidden="true" tabindex="-1"></a> convert = markdown.new({breakableBlockquotes = true})</span> -<span id="cb126-15"><a href="#cb126-15" aria-hidden="true" tabindex="-1"></a> input = "> A block quote." .. newline .. newline ..</span> -<span id="cb126-16"><a href="#cb126-16" aria-hidden="true" tabindex="-1"></a> "> Another block quote." .. newline</span> -<span id="cb126-17"><a href="#cb126-17" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb126-18"><a href="#cb126-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb152"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb152-1"><a href="#cb152-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb152-2"><a href="#cb152-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb152-3"><a href="#cb152-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingOne</span>#1{{<span class="fu">\bf</span> #1}<span class="fu">\par</span>}</span> +<span id="cb152-4"><a href="#cb152-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb152-5"><a href="#cb152-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb152-6"><a href="#cb152-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb152-7"><a href="#cb152-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb152-8"><a href="#cb152-8" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb152-9"><a href="#cb152-9" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> +<span id="cb152-10"><a href="#cb152-10" aria-hidden="true" tabindex="-1"></a> local convert, input</span> +<span id="cb152-11"><a href="#cb152-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb152-12"><a href="#cb152-12" aria-hidden="true" tabindex="-1"></a> convert = markdown.new({breakableBlockquotes = false})</span> +<span id="cb152-13"><a href="#cb152-13" aria-hidden="true" tabindex="-1"></a> input = "> A single" .. newline .. newline ..</span> +<span id="cb152-14"><a href="#cb152-14" aria-hidden="true" tabindex="-1"></a> "> block quote." .. newline</span> +<span id="cb152-15"><a href="#cb152-15" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input))</span> +<span id="cb152-16"><a href="#cb152-16" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb152-17"><a href="#cb152-17" aria-hidden="true" tabindex="-1"></a> convert = markdown.new()</span> +<span id="cb152-18"><a href="#cb152-18" aria-hidden="true" tabindex="-1"></a> input = "> A block quote." .. newline .. newline ..</span> +<span id="cb152-19"><a href="#cb152-19" aria-hidden="true" tabindex="-1"></a> "> Another block quote." .. newline</span> +<span id="cb152-20"><a href="#cb152-20" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb152-21"><a href="#cb152-21" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb152-22"><a href="#cb152-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Then, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb127"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb127-1"><a href="#cb127-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb153"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb153-1"><a href="#cb153-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -1987,26 +2504,30 @@ contain the following text:</p> <p>Another block quote.</p> </blockquote> </blockquote> -<h5 class="unnumbered" id="lua-cli-example-5">Lua CLI Example</h5> +<h5 class="unnumbered" id="lua-cli-example-7">Lua CLI Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb128"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb128-1"><a href="#cb128-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb128-2"><a href="#cb128-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb128-3"><a href="#cb128-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> -<span id="cb128-4"><a href="#cb128-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> -<span id="cb128-5"><a href="#cb128-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb154"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb154-1"><a href="#cb154-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb154-2"><a href="#cb154-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb154-3"><a href="#cb154-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb154-4"><a href="#cb154-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb154-5"><a href="#cb154-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb154-6"><a href="#cb154-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> +<span id="cb154-7"><a href="#cb154-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> +<span id="cb154-8"><a href="#cb154-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb154-9"><a href="#cb154-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p> -<div class="sourceCode" id="cb129"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb129-1"><a href="#cb129-1" aria-hidden="true" tabindex="-1"></a><span class="at">> A single block quote</span></span> -<span id="cb129-2"><a href="#cb129-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb129-3"><a href="#cb129-3" aria-hidden="true" tabindex="-1"></a><span class="at">> or two block quotes?</span></span></code></pre></div> +<div class="sourceCode" id="cb155"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb155-1"><a href="#cb155-1" aria-hidden="true" tabindex="-1"></a><span class="at">> A single block quote</span></span> +<span id="cb155-2"><a href="#cb155-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb155-3"><a href="#cb155-3" aria-hidden="true" tabindex="-1"></a><span class="at">> or two block quotes?</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb130"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb130-1"><a href="#cb130-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> -<span id="cb130-2"><a href="#cb130-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ breakableBlockquotes=true <span class="at">--</span> content.md optiontrue.tex</span> -<span id="cb130-3"><a href="#cb130-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb156"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb156-1"><a href="#cb156-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ breakableBlockquotes=false <span class="at">--</span> content.md optionfalse.tex</span> +<span id="cb156-2"><a href="#cb156-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optiontrue.tex</span> +<span id="cb156-3"><a href="#cb156-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems @@ -2029,30 +2550,31 @@ contain the following text:</p> <p>or two block quotes?</p> </blockquote> </blockquote> -<h5 class="unnumbered" id="plain-tex-example-5">Plain <span +<h5 class="unnumbered" id="plain-tex-example-6">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb131"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb131-1"><a href="#cb131-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb131-2"><a href="#cb131-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb131-3"><a href="#cb131-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb131-4"><a href="#cb131-4" aria-hidden="true" tabindex="-1"></a>> A single</span> -<span id="cb131-5"><a href="#cb131-5" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb131-6"><a href="#cb131-6" aria-hidden="true" tabindex="-1"></a>> block quote.</span> -<span id="cb131-7"><a href="#cb131-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb131-8"><a href="#cb131-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb131-9"><a href="#cb131-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionBreakableBlockquotes</span>{true}</span> -<span id="cb131-10"><a href="#cb131-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb131-11"><a href="#cb131-11" aria-hidden="true" tabindex="-1"></a>> A block quote.</span> -<span id="cb131-12"><a href="#cb131-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb131-13"><a href="#cb131-13" aria-hidden="true" tabindex="-1"></a>> Another block quote.</span> -<span id="cb131-14"><a href="#cb131-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb131-15"><a href="#cb131-15" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb131-16"><a href="#cb131-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb132"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb132-1"><a href="#cb132-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb157"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb157-1"><a href="#cb157-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb157-2"><a href="#cb157-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb157-3"><a href="#cb157-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionBreakableBlockquotes</span>{false}</span> +<span id="cb157-4"><a href="#cb157-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb157-5"><a href="#cb157-5" aria-hidden="true" tabindex="-1"></a>> A single</span> +<span id="cb157-6"><a href="#cb157-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb157-7"><a href="#cb157-7" aria-hidden="true" tabindex="-1"></a>> block quote.</span> +<span id="cb157-8"><a href="#cb157-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb157-9"><a href="#cb157-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb157-10"><a href="#cb157-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionBreakableBlockquotes</span>{true}</span> +<span id="cb157-11"><a href="#cb157-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb157-12"><a href="#cb157-12" aria-hidden="true" tabindex="-1"></a>> A block quote.</span> +<span id="cb157-13"><a href="#cb157-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb157-14"><a href="#cb157-14" aria-hidden="true" tabindex="-1"></a>> Another block quote.</span> +<span id="cb157-15"><a href="#cb157-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb157-16"><a href="#cb157-16" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb157-17"><a href="#cb157-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb158"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb158-1"><a href="#cb158-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -2066,31 +2588,31 @@ contain the following text:</p> <p>Another block quote.</p> </blockquote> </blockquote> -<h5 class="unnumbered" id="latex-example-8"><span +<h5 class="unnumbered" id="latex-example-9"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb133"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb133-1"><a href="#cb133-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb133-2"><a href="#cb133-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb133-3"><a href="#cb133-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb133-4"><a href="#cb133-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb133-5"><a href="#cb133-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb133-6"><a href="#cb133-6" aria-hidden="true" tabindex="-1"></a>> A single</span> -<span id="cb133-7"><a href="#cb133-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb133-8"><a href="#cb133-8" aria-hidden="true" tabindex="-1"></a>> block quote.</span> -<span id="cb133-9"><a href="#cb133-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb133-10"><a href="#cb133-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb133-11"><a href="#cb133-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{breakableBlockquotes}</span> -<span id="cb133-12"><a href="#cb133-12" aria-hidden="true" tabindex="-1"></a>> A block quote.</span> -<span id="cb133-13"><a href="#cb133-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb133-14"><a href="#cb133-14" aria-hidden="true" tabindex="-1"></a>> Another block quote.</span> -<span id="cb133-15"><a href="#cb133-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb133-16"><a href="#cb133-16" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb133-17"><a href="#cb133-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb159"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb159-1"><a href="#cb159-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb159-2"><a href="#cb159-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb159-3"><a href="#cb159-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb159-4"><a href="#cb159-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb159-5"><a href="#cb159-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[breakableBlockquotes = false]</span> +<span id="cb159-6"><a href="#cb159-6" aria-hidden="true" tabindex="-1"></a>> A single</span> +<span id="cb159-7"><a href="#cb159-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb159-8"><a href="#cb159-8" aria-hidden="true" tabindex="-1"></a>> block quote.</span> +<span id="cb159-9"><a href="#cb159-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb159-10"><a href="#cb159-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb159-11"><a href="#cb159-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb159-12"><a href="#cb159-12" aria-hidden="true" tabindex="-1"></a>> A block quote.</span> +<span id="cb159-13"><a href="#cb159-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb159-14"><a href="#cb159-14" aria-hidden="true" tabindex="-1"></a>> Another block quote.</span> +<span id="cb159-15"><a href="#cb159-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb159-16"><a href="#cb159-16" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb159-17"><a href="#cb159-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb134"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb134-1"><a href="#cb134-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb160"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb160-1"><a href="#cb160-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -2104,31 +2626,32 @@ contain the following text:</p> <p>Another block quote.</p> </blockquote> </blockquote> -<h5 class="unnumbered" id="context-example-6">Con<span +<h5 class="unnumbered" id="context-example-7">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb135"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb135-1"><a href="#cb135-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb135-2"><a href="#cb135-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb135-3"><a href="#cb135-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb135-4"><a href="#cb135-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb135-5"><a href="#cb135-5" aria-hidden="true" tabindex="-1"></a>> A single</span> -<span id="cb135-6"><a href="#cb135-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb135-7"><a href="#cb135-7" aria-hidden="true" tabindex="-1"></a>> block quote.</span> -<span id="cb135-8"><a href="#cb135-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb135-9"><a href="#cb135-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb135-10"><a href="#cb135-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[breakableBlockquotes = yes]</span> -<span id="cb135-11"><a href="#cb135-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb135-12"><a href="#cb135-12" aria-hidden="true" tabindex="-1"></a>> A block quote.</span> -<span id="cb135-13"><a href="#cb135-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb135-14"><a href="#cb135-14" aria-hidden="true" tabindex="-1"></a>> Another block quote.</span> -<span id="cb135-15"><a href="#cb135-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb135-16"><a href="#cb135-16" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb135-17"><a href="#cb135-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb161"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb161-1"><a href="#cb161-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb161-2"><a href="#cb161-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb161-3"><a href="#cb161-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb161-4"><a href="#cb161-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[breakableBlockquotes = no]</span> +<span id="cb161-5"><a href="#cb161-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb161-6"><a href="#cb161-6" aria-hidden="true" tabindex="-1"></a>> A single</span> +<span id="cb161-7"><a href="#cb161-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb161-8"><a href="#cb161-8" aria-hidden="true" tabindex="-1"></a>> block quote.</span> +<span id="cb161-9"><a href="#cb161-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb161-10"><a href="#cb161-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb161-11"><a href="#cb161-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[breakableBlockquotes = yes]</span> +<span id="cb161-12"><a href="#cb161-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb161-13"><a href="#cb161-13" aria-hidden="true" tabindex="-1"></a>> A block quote.</span> +<span id="cb161-14"><a href="#cb161-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb161-15"><a href="#cb161-15" aria-hidden="true" tabindex="-1"></a>> Another block quote.</span> +<span id="cb161-16"><a href="#cb161-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb161-17"><a href="#cb161-17" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb161-18"><a href="#cb161-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb136"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb136-1"><a href="#cb136-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb162"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb162-1"><a href="#cb162-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -2142,8 +2665,8 @@ contain the following text:</p> <p>Another block quote.</p> </blockquote> </blockquote> -<h4 data-number="2.2.1.11" id="option-citationnbsps"><span -class="header-section-number">2.2.1.11</span> Option +<h4 data-number="2.2.1.15" id="option-citationnbsps"><span +class="header-section-number">2.2.1.15</span> Option <code>citationNbsps</code></h4> <dl> <dt><code>citationNbsps</code> (default value: <code>true</code>)</dt> @@ -2164,41 +2687,41 @@ syntax extension.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-9"><span +<h5 class="unnumbered" id="latex-example-10"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.bib</code> with the following content:</p> -<div class="sourceCode" id="cb137"><pre -class="sourceCode bib"><code class="sourceCode bibtex"><span id="cb137-1"><a href="#cb137-1" aria-hidden="true" tabindex="-1"></a><span class="va">@book</span>{<span class="ot">knuth:tex</span>,</span> -<span id="cb137-2"><a href="#cb137-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">author</span> = "<span class="st">Knuth, Donald Ervin</span>",</span> -<span id="cb137-3"><a href="#cb137-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">title</span> = "<span class="st">The </span><span class="ch">\TeX</span><span class="st"> book, volume A of Computers and typesetting</span>",</span> -<span id="cb137-4"><a href="#cb137-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">publisher</span> = "<span class="st">Addison-Wesley</span>",</span> -<span id="cb137-5"><a href="#cb137-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">year</span> = "<span class="st">1984</span>"</span> -<span id="cb137-6"><a href="#cb137-6" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> +<div class="sourceCode" id="cb163"><pre +class="sourceCode bib"><code class="sourceCode bibtex"><span id="cb163-1"><a href="#cb163-1" aria-hidden="true" tabindex="-1"></a><span class="va">@book</span>{<span class="ot">knuth:tex</span>,</span> +<span id="cb163-2"><a href="#cb163-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">author</span> = "<span class="st">Knuth, Donald Ervin</span>",</span> +<span id="cb163-3"><a href="#cb163-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">title</span> = "<span class="st">The </span><span class="ch">\TeX</span><span class="st"> book, volume A of Computers and typesetting</span>",</span> +<span id="cb163-4"><a href="#cb163-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">publisher</span> = "<span class="st">Addison-Wesley</span>",</span> +<span id="cb163-5"><a href="#cb163-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">year</span> = "<span class="st">1984</span>"</span> +<span id="cb163-6"><a href="#cb163-6" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb138"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb138-1"><a href="#cb138-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb138-2"><a href="#cb138-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[citations]{<span class="ex">markdown</span>}</span> -<span id="cb138-3"><a href="#cb138-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb138-4"><a href="#cb138-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb138-5"><a href="#cb138-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb138-6"><a href="#cb138-6" aria-hidden="true" tabindex="-1"></a>The TeXbook [@knuth:tex, p. 123 and 130] is good.</span> -<span id="cb138-7"><a href="#cb138-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb138-8"><a href="#cb138-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb138-9"><a href="#cb138-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{citationNbsps = false}</span> -<span id="cb138-10"><a href="#cb138-10" aria-hidden="true" tabindex="-1"></a>The TeXbook [@knuth:tex, p. 123 and 130] is good.</span> -<span id="cb138-11"><a href="#cb138-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb138-12"><a href="#cb138-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb138-13"><a href="#cb138-13" aria-hidden="true" tabindex="-1"></a><span class="bu">\bibliographystyle</span>{<span class="ex">plain</span>}</span> -<span id="cb138-14"><a href="#cb138-14" aria-hidden="true" tabindex="-1"></a><span class="bu">\bibliography</span>{<span class="ex">document.bib</span>}</span> -<span id="cb138-15"><a href="#cb138-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb164"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb164-1"><a href="#cb164-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb164-2"><a href="#cb164-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[citations]{<span class="ex">markdown</span>}</span> +<span id="cb164-3"><a href="#cb164-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb164-4"><a href="#cb164-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb164-5"><a href="#cb164-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb164-6"><a href="#cb164-6" aria-hidden="true" tabindex="-1"></a>The TeXbook [@knuth:tex, p. 123 and 130] is good.</span> +<span id="cb164-7"><a href="#cb164-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb164-8"><a href="#cb164-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb164-9"><a href="#cb164-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[citationNbsps = false]</span> +<span id="cb164-10"><a href="#cb164-10" aria-hidden="true" tabindex="-1"></a>The TeXbook [@knuth:tex, p. 123 and 130] is good.</span> +<span id="cb164-11"><a href="#cb164-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb164-12"><a href="#cb164-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb164-13"><a href="#cb164-13" aria-hidden="true" tabindex="-1"></a><span class="bu">\bibliographystyle</span>{<span class="ex">plain</span>}</span> +<span id="cb164-14"><a href="#cb164-14" aria-hidden="true" tabindex="-1"></a><span class="bu">\bibliography</span>{<span class="ex">document.bib</span>}</span> +<span id="cb164-15"><a href="#cb164-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX and BibTeX from the terminal:</p> -<div class="sourceCode" id="cb139"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb139-1"><a href="#cb139-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> -<span id="cb139-2"><a href="#cb139-2" aria-hidden="true" tabindex="-1"></a><span class="ex">bibtex</span> document.aux</span> -<span id="cb139-3"><a href="#cb139-3" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> -<span id="cb139-4"><a href="#cb139-4" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb165"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb165-1"><a href="#cb165-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> +<span id="cb165-2"><a href="#cb165-2" aria-hidden="true" tabindex="-1"></a><span class="ex">bibtex</span> document.aux</span> +<span id="cb165-3"><a href="#cb165-3" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> +<span id="cb165-4"><a href="#cb165-4" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text, where the middot (<code>·</code>) denotes a non-breaking space:</p> @@ -2211,8 +2734,8 @@ href="https://datatracker.ietf.org/doc/html/rfc3986#section-4.2">1</a> Donald·Ervin Knuth. <em>The TeXbook, volume A of Computers and typesetting.</em> Addison-Wesley, 1984.</p> </blockquote> -<h4 data-number="2.2.1.12" id="option-citations"><span -class="header-section-number">2.2.1.12</span> Option +<h4 data-number="2.2.1.16" id="option-citations"><span +class="header-section-number">2.2.1.16</span> Option <code>citations</code></h4> <dl> <dt><code>citations</code> (default value: <code>false</code>)</dt> @@ -2223,20 +2746,20 @@ class="header-section-number">2.2.1.12</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-citations">citation syntax extension</a>:</p> -<div class="sourceCode" id="cb140"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb140-1"><a href="#cb140-1" aria-hidden="true" tabindex="-1"></a>Here is a simple parenthetical citation <span class="co">[</span><span class="ot">@doe99</span><span class="co">]</span> and here</span> -<span id="cb140-2"><a href="#cb140-2" aria-hidden="true" tabindex="-1"></a>is a string of several [see @doe99, pp. 33-35; also</span> -<span id="cb140-3"><a href="#cb140-3" aria-hidden="true" tabindex="-1"></a>@smith04, chap. 1].</span> -<span id="cb140-4"><a href="#cb140-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb140-5"><a href="#cb140-5" aria-hidden="true" tabindex="-1"></a>A parenthetical citation can have a <span class="co">[</span><span class="ot">prenote @doe99</span><span class="co">]</span> and</span> -<span id="cb140-6"><a href="#cb140-6" aria-hidden="true" tabindex="-1"></a>a <span class="co">[</span><span class="ot">@smith04 postnote</span><span class="co">]</span>. The name of the author can be</span> -<span id="cb140-7"><a href="#cb140-7" aria-hidden="true" tabindex="-1"></a>suppressed by inserting a dash before the name of an</span> -<span id="cb140-8"><a href="#cb140-8" aria-hidden="true" tabindex="-1"></a>author as follows <span class="co">[</span><span class="ot">-@smith04</span><span class="co">]</span>.</span> -<span id="cb140-9"><a href="#cb140-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb140-10"><a href="#cb140-10" aria-hidden="true" tabindex="-1"></a>Here is a simple text citation @doe99 and here is</span> -<span id="cb140-11"><a href="#cb140-11" aria-hidden="true" tabindex="-1"></a>a string of several @doe99 [pp. 33-35; also @smith04,</span> -<span id="cb140-12"><a href="#cb140-12" aria-hidden="true" tabindex="-1"></a>chap. 1]. Here is one with the name of the author</span> -<span id="cb140-13"><a href="#cb140-13" aria-hidden="true" tabindex="-1"></a>suppressed -@doe99.</span></code></pre></div> +<div class="sourceCode" id="cb166"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb166-1"><a href="#cb166-1" aria-hidden="true" tabindex="-1"></a>Here is a simple parenthetical citation <span class="co">[</span><span class="ot">@doe99</span><span class="co">]</span> and here</span> +<span id="cb166-2"><a href="#cb166-2" aria-hidden="true" tabindex="-1"></a>is a string of several [see @doe99, pp. 33-35; also</span> +<span id="cb166-3"><a href="#cb166-3" aria-hidden="true" tabindex="-1"></a>@smith04, chap. 1].</span> +<span id="cb166-4"><a href="#cb166-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb166-5"><a href="#cb166-5" aria-hidden="true" tabindex="-1"></a>A parenthetical citation can have a <span class="co">[</span><span class="ot">prenote @doe99</span><span class="co">]</span> and</span> +<span id="cb166-6"><a href="#cb166-6" aria-hidden="true" tabindex="-1"></a>a <span class="co">[</span><span class="ot">@smith04 postnote</span><span class="co">]</span>. The name of the author can be</span> +<span id="cb166-7"><a href="#cb166-7" aria-hidden="true" tabindex="-1"></a>suppressed by inserting a dash before the name of an</span> +<span id="cb166-8"><a href="#cb166-8" aria-hidden="true" tabindex="-1"></a>author as follows <span class="co">[</span><span class="ot">-@smith04</span><span class="co">]</span>.</span> +<span id="cb166-9"><a href="#cb166-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb166-10"><a href="#cb166-10" aria-hidden="true" tabindex="-1"></a>Here is a simple text citation @doe99 and here is</span> +<span id="cb166-11"><a href="#cb166-11" aria-hidden="true" tabindex="-1"></a>a string of several @doe99 [pp. 33-35; also @smith04,</span> +<span id="cb166-12"><a href="#cb166-12" aria-hidden="true" tabindex="-1"></a>chap. 1]. Here is one with the name of the author</span> +<span id="cb166-13"><a href="#cb166-13" aria-hidden="true" tabindex="-1"></a>suppressed -@doe99.</span></code></pre></div> </dd> </dl> </dd> @@ -2249,38 +2772,38 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb140-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-10"><span +<h5 class="unnumbered" id="latex-example-11"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.bib</code> with the following content:</p> -<div class="sourceCode" id="cb141"><pre -class="sourceCode bib"><code class="sourceCode bibtex"><span id="cb141-1"><a href="#cb141-1" aria-hidden="true" tabindex="-1"></a><span class="va">@book</span>{<span class="ot">knuth:tex</span>,</span> -<span id="cb141-2"><a href="#cb141-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">author</span> = "<span class="st">Knuth, Donald Ervin</span>",</span> -<span id="cb141-3"><a href="#cb141-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">title</span> = "<span class="st">The </span><span class="ch">\TeX</span><span class="st"> book, volume A of Computers and typesetting</span>",</span> -<span id="cb141-4"><a href="#cb141-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">publisher</span> = "<span class="st">Addison-Wesley</span>",</span> -<span id="cb141-5"><a href="#cb141-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">year</span> = "<span class="st">1984</span>"</span> -<span id="cb141-6"><a href="#cb141-6" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> +<div class="sourceCode" id="cb167"><pre +class="sourceCode bib"><code class="sourceCode bibtex"><span id="cb167-1"><a href="#cb167-1" aria-hidden="true" tabindex="-1"></a><span class="va">@book</span>{<span class="ot">knuth:tex</span>,</span> +<span id="cb167-2"><a href="#cb167-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">author</span> = "<span class="st">Knuth, Donald Ervin</span>",</span> +<span id="cb167-3"><a href="#cb167-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">title</span> = "<span class="st">The </span><span class="ch">\TeX</span><span class="st"> book, volume A of Computers and typesetting</span>",</span> +<span id="cb167-4"><a href="#cb167-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">publisher</span> = "<span class="st">Addison-Wesley</span>",</span> +<span id="cb167-5"><a href="#cb167-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">year</span> = "<span class="st">1984</span>"</span> +<span id="cb167-6"><a href="#cb167-6" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb142"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb142-1"><a href="#cb142-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb142-2"><a href="#cb142-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[backend=biber]{<span class="ex">biblatex</span>}</span> -<span id="cb142-3"><a href="#cb142-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\addbibresource</span>{document.bib}</span> -<span id="cb142-4"><a href="#cb142-4" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[citations]{<span class="ex">markdown</span>}</span> -<span id="cb142-5"><a href="#cb142-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb142-6"><a href="#cb142-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb142-7"><a href="#cb142-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb142-8"><a href="#cb142-8" aria-hidden="true" tabindex="-1"></a>The TeXbook [@knuth:tex, p. 123 and 130] was written by @knuth:tex.</span> -<span id="cb142-9"><a href="#cb142-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb142-10"><a href="#cb142-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb142-11"><a href="#cb142-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\printbibliography</span></span> -<span id="cb142-12"><a href="#cb142-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb168"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb168-1"><a href="#cb168-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb168-2"><a href="#cb168-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[backend=biber]{<span class="ex">biblatex</span>}</span> +<span id="cb168-3"><a href="#cb168-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\addbibresource</span>{document.bib}</span> +<span id="cb168-4"><a href="#cb168-4" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[citations]{<span class="ex">markdown</span>}</span> +<span id="cb168-5"><a href="#cb168-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb168-6"><a href="#cb168-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb168-7"><a href="#cb168-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb168-8"><a href="#cb168-8" aria-hidden="true" tabindex="-1"></a>The TeXbook [@knuth:tex, p. 123 and 130] was written by @knuth:tex.</span> +<span id="cb168-9"><a href="#cb168-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb168-10"><a href="#cb168-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb168-11"><a href="#cb168-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\printbibliography</span></span> +<span id="cb168-12"><a href="#cb168-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX and Biber from the terminal:</p> -<div class="sourceCode" id="cb143"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb143-1"><a href="#cb143-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> -<span id="cb143-2"><a href="#cb143-2" aria-hidden="true" tabindex="-1"></a><span class="ex">biber</span> document.bcf</span> -<span id="cb143-3"><a href="#cb143-3" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> -<span id="cb143-4"><a href="#cb143-4" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb169"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb169-1"><a href="#cb169-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> +<span id="cb169-2"><a href="#cb169-2" aria-hidden="true" tabindex="-1"></a><span class="ex">biber</span> document.bcf</span> +<span id="cb169-3"><a href="#cb169-3" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> +<span id="cb169-4"><a href="#cb169-4" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -2292,8 +2815,8 @@ href="https://datatracker.ietf.org/doc/html/rfc3986#section-4.2">1</a> Donald Ervin Knuth. <em>The <span class="tex">T<sub>e</sub>X</span>book, volume A of Computers and typesetting.</em> Addison-Wesley, 1984.</p> </blockquote> -<h4 data-number="2.2.1.13" id="option-codespans"><span -class="header-section-number">2.2.1.13</span> Option +<h4 data-number="2.2.1.17" id="option-codespans"><span +class="header-section-number">2.2.1.17</span> Option <code>codeSpans</code></h4> <dl> <dt><code>codeSpans</code> (default value: <code>true</code>)</dt> @@ -2302,9 +2825,9 @@ class="header-section-number">2.2.1.13</span> Option <dt>true</dt> <dd> <p>Enable the code span syntax:</p> -<div class="sourceCode" id="cb144"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb144-1"><a href="#cb144-1" aria-hidden="true" tabindex="-1"></a>Use the <span class="in">`printf()`</span> function.</span> -<span id="cb144-2"><a href="#cb144-2" aria-hidden="true" tabindex="-1"></a>`<span class="in">`There is a literal backtick (`</span>) here.``</span></code></pre></div> +<div class="sourceCode" id="cb170"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb170-1"><a href="#cb170-1" aria-hidden="true" tabindex="-1"></a>Use the <span class="in">`printf()`</span> function.</span> +<span id="cb170-2"><a href="#cb170-2" aria-hidden="true" tabindex="-1"></a>`<span class="in">`There is a literal backtick (`</span>) here.``</span></code></pre></div> </dd> </dl> </dd> @@ -2319,31 +2842,35 @@ quotation mark ligatures in texts that do not contain code spans:</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="lua-module-example-6">Lua Module Example</h5> +<h5 class="unnumbered" id="lua-module-example-8">Lua Module Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb146"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb146-1"><a href="#cb146-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb146-2"><a href="#cb146-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb146-3"><a href="#cb146-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb146-4"><a href="#cb146-4" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb146-5"><a href="#cb146-5" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new()</span> -<span id="cb146-6"><a href="#cb146-6" aria-hidden="true" tabindex="-1"></a> local input =</span> -<span id="cb146-7"><a href="#cb146-7" aria-hidden="true" tabindex="-1"></a> "``This is a code span.'' " ..</span> -<span id="cb146-8"><a href="#cb146-8" aria-hidden="true" tabindex="-1"></a> "``This is no longer a code span.''"</span> -<span id="cb146-9"><a href="#cb146-9" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb146-10"><a href="#cb146-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> -<span id="cb146-11"><a href="#cb146-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb146-12"><a href="#cb146-12" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb146-13"><a href="#cb146-13" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({codeSpans = false})</span> -<span id="cb146-14"><a href="#cb146-14" aria-hidden="true" tabindex="-1"></a> local input =</span> -<span id="cb146-15"><a href="#cb146-15" aria-hidden="true" tabindex="-1"></a> "``This is a quote.'' " ..</span> -<span id="cb146-16"><a href="#cb146-16" aria-hidden="true" tabindex="-1"></a> "``This is another quote.''"</span> -<span id="cb146-17"><a href="#cb146-17" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb146-18"><a href="#cb146-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb172"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb172-1"><a href="#cb172-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb172-2"><a href="#cb172-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb172-3"><a href="#cb172-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb172-4"><a href="#cb172-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb172-5"><a href="#cb172-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb172-6"><a href="#cb172-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb172-7"><a href="#cb172-7" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb172-8"><a href="#cb172-8" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new()</span> +<span id="cb172-9"><a href="#cb172-9" aria-hidden="true" tabindex="-1"></a> local input =</span> +<span id="cb172-10"><a href="#cb172-10" aria-hidden="true" tabindex="-1"></a> "``This is a code span.'' " ..</span> +<span id="cb172-11"><a href="#cb172-11" aria-hidden="true" tabindex="-1"></a> "``This is no longer a code span.''"</span> +<span id="cb172-12"><a href="#cb172-12" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb172-13"><a href="#cb172-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> +<span id="cb172-14"><a href="#cb172-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb172-15"><a href="#cb172-15" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb172-16"><a href="#cb172-16" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({codeSpans = false})</span> +<span id="cb172-17"><a href="#cb172-17" aria-hidden="true" tabindex="-1"></a> local input =</span> +<span id="cb172-18"><a href="#cb172-18" aria-hidden="true" tabindex="-1"></a> "``This is a quote.'' " ..</span> +<span id="cb172-19"><a href="#cb172-19" aria-hidden="true" tabindex="-1"></a> "``This is another quote.''"</span> +<span id="cb172-20"><a href="#cb172-20" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb172-21"><a href="#cb172-21" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb172-22"><a href="#cb172-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Then, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb147"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb147-1"><a href="#cb147-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb173"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb173-1"><a href="#cb173-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -2351,25 +2878,29 @@ contain the following text:</p> span.’’</p> <p>“This is a quote.” “This is another quote.”</p> </blockquote> -<h5 class="unnumbered" id="lua-cli-example-6">Lua CLI Example</h5> +<h5 class="unnumbered" id="lua-cli-example-8">Lua CLI Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb148"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb148-1"><a href="#cb148-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb148-2"><a href="#cb148-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb148-3"><a href="#cb148-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> -<span id="cb148-4"><a href="#cb148-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> -<span id="cb148-5"><a href="#cb148-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> -<span id="cb148-6"><a href="#cb148-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb174"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb174-1"><a href="#cb174-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb174-2"><a href="#cb174-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb174-3"><a href="#cb174-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb174-4"><a href="#cb174-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb174-5"><a href="#cb174-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb174-6"><a href="#cb174-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> +<span id="cb174-7"><a href="#cb174-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> +<span id="cb174-8"><a href="#cb174-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> +<span id="cb174-9"><a href="#cb174-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb174-10"><a href="#cb174-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p> -<div class="sourceCode" id="cb149"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb149-1"><a href="#cb149-1" aria-hidden="true" tabindex="-1"></a>``Is this a code span?'' ``Or a quote?''</span></code></pre></div> +<div class="sourceCode" id="cb175"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb175-1"><a href="#cb175-1" aria-hidden="true" tabindex="-1"></a>``Is this a code span?'' ``Or a quote?''</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb150"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb150-1"><a href="#cb150-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ codeSpans=false <span class="at">--</span> content.md optionfalse.tex</span> -<span id="cb150-2"><a href="#cb150-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optiontrue.tex</span> -<span id="cb150-3"><a href="#cb150-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb176"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb176-1"><a href="#cb176-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ codeSpans=false <span class="at">--</span> content.md optionfalse.tex</span> +<span id="cb176-2"><a href="#cb176-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optiontrue.tex</span> +<span id="cb176-3"><a href="#cb176-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems @@ -2385,28 +2916,28 @@ contain the following text:</p> <p>“Is this a code span?” “Or a quote?”</p> <p><code>Is this a code span?''</code>Or a quote?’’</p> </blockquote> -<h5 class="unnumbered" id="plain-tex-example-6">Plain <span +<h5 class="unnumbered" id="plain-tex-example-7">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb151"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb151-1"><a href="#cb151-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb151-2"><a href="#cb151-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb151-3"><a href="#cb151-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb151-4"><a href="#cb151-4" aria-hidden="true" tabindex="-1"></a>``This is a code span.''</span> -<span id="cb151-5"><a href="#cb151-5" aria-hidden="true" tabindex="-1"></a>``This is no longer a code span.''</span> -<span id="cb151-6"><a href="#cb151-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb151-7"><a href="#cb151-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb151-8"><a href="#cb151-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionCodeSpans</span>{false}</span> -<span id="cb151-9"><a href="#cb151-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb151-10"><a href="#cb151-10" aria-hidden="true" tabindex="-1"></a>``This is a quote.''</span> -<span id="cb151-11"><a href="#cb151-11" aria-hidden="true" tabindex="-1"></a>``This is another quote.''</span> -<span id="cb151-12"><a href="#cb151-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb151-13"><a href="#cb151-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb151-14"><a href="#cb151-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb177"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb177-1"><a href="#cb177-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb177-2"><a href="#cb177-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb177-3"><a href="#cb177-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb177-4"><a href="#cb177-4" aria-hidden="true" tabindex="-1"></a>``This is a code span.''</span> +<span id="cb177-5"><a href="#cb177-5" aria-hidden="true" tabindex="-1"></a>``This is no longer a code span.''</span> +<span id="cb177-6"><a href="#cb177-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb177-7"><a href="#cb177-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb177-8"><a href="#cb177-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionCodeSpans</span>{false}</span> +<span id="cb177-9"><a href="#cb177-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb177-10"><a href="#cb177-10" aria-hidden="true" tabindex="-1"></a>``This is a quote.''</span> +<span id="cb177-11"><a href="#cb177-11" aria-hidden="true" tabindex="-1"></a>``This is another quote.''</span> +<span id="cb177-12"><a href="#cb177-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb177-13"><a href="#cb177-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb177-14"><a href="#cb177-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb152"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb152-1"><a href="#cb152-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb178"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb178-1"><a href="#cb178-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -2414,29 +2945,29 @@ contain the following text:</p> span.’’</p> <p>“This is a quote.” “This is another quote.”</p> </blockquote> -<h5 class="unnumbered" id="latex-example-11"><span +<h5 class="unnumbered" id="latex-example-12"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb153"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb153-1"><a href="#cb153-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb153-2"><a href="#cb153-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb153-3"><a href="#cb153-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb153-4"><a href="#cb153-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb153-5"><a href="#cb153-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb153-6"><a href="#cb153-6" aria-hidden="true" tabindex="-1"></a>``This is a code span.''</span> -<span id="cb153-7"><a href="#cb153-7" aria-hidden="true" tabindex="-1"></a>``This is no longer a code span.''</span> -<span id="cb153-8"><a href="#cb153-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb153-9"><a href="#cb153-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb153-10"><a href="#cb153-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{codeSpans=false}</span> -<span id="cb153-11"><a href="#cb153-11" aria-hidden="true" tabindex="-1"></a>``This is a quote.''</span> -<span id="cb153-12"><a href="#cb153-12" aria-hidden="true" tabindex="-1"></a>``This is another quote.''</span> -<span id="cb153-13"><a href="#cb153-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb153-14"><a href="#cb153-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb153-15"><a href="#cb153-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb179"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb179-1"><a href="#cb179-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb179-2"><a href="#cb179-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb179-3"><a href="#cb179-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb179-4"><a href="#cb179-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb179-5"><a href="#cb179-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb179-6"><a href="#cb179-6" aria-hidden="true" tabindex="-1"></a>``This is a code span.''</span> +<span id="cb179-7"><a href="#cb179-7" aria-hidden="true" tabindex="-1"></a>``This is no longer a code span.''</span> +<span id="cb179-8"><a href="#cb179-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb179-9"><a href="#cb179-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb179-10"><a href="#cb179-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[codeSpans=false]</span> +<span id="cb179-11"><a href="#cb179-11" aria-hidden="true" tabindex="-1"></a>``This is a quote.''</span> +<span id="cb179-12"><a href="#cb179-12" aria-hidden="true" tabindex="-1"></a>``This is another quote.''</span> +<span id="cb179-13"><a href="#cb179-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb179-14"><a href="#cb179-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb179-15"><a href="#cb179-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb154"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb154-1"><a href="#cb154-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb180"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb180-1"><a href="#cb180-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -2444,29 +2975,29 @@ contain the following text:</p> span.’’</p> <p>“This is a quote.” “This is another quote.”</p> </blockquote> -<h5 class="unnumbered" id="context-example-7">Con<span +<h5 class="unnumbered" id="context-example-8">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb155"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb155-1"><a href="#cb155-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb155-2"><a href="#cb155-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb155-3"><a href="#cb155-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb155-4"><a href="#cb155-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb155-5"><a href="#cb155-5" aria-hidden="true" tabindex="-1"></a>``This is a code span.''</span> -<span id="cb155-6"><a href="#cb155-6" aria-hidden="true" tabindex="-1"></a>``This is no longer a code span.''</span> -<span id="cb155-7"><a href="#cb155-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb155-8"><a href="#cb155-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb155-9"><a href="#cb155-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[codeSpans = no]</span> -<span id="cb155-10"><a href="#cb155-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb155-11"><a href="#cb155-11" aria-hidden="true" tabindex="-1"></a>``This is a quote.''</span> -<span id="cb155-12"><a href="#cb155-12" aria-hidden="true" tabindex="-1"></a>``This is another quote.''</span> -<span id="cb155-13"><a href="#cb155-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb155-14"><a href="#cb155-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb155-15"><a href="#cb155-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb156"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb156-1"><a href="#cb156-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb181"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb181-1"><a href="#cb181-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb181-2"><a href="#cb181-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb181-3"><a href="#cb181-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb181-4"><a href="#cb181-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb181-5"><a href="#cb181-5" aria-hidden="true" tabindex="-1"></a>``This is a code span.''</span> +<span id="cb181-6"><a href="#cb181-6" aria-hidden="true" tabindex="-1"></a>``This is no longer a code span.''</span> +<span id="cb181-7"><a href="#cb181-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb181-8"><a href="#cb181-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb181-9"><a href="#cb181-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[codeSpans = no]</span> +<span id="cb181-10"><a href="#cb181-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb181-11"><a href="#cb181-11" aria-hidden="true" tabindex="-1"></a>``This is a quote.''</span> +<span id="cb181-12"><a href="#cb181-12" aria-hidden="true" tabindex="-1"></a>``This is another quote.''</span> +<span id="cb181-13"><a href="#cb181-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb181-14"><a href="#cb181-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb181-15"><a href="#cb181-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb182"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb182-1"><a href="#cb182-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -2474,8 +3005,8 @@ contain the following text:</p> span.’’</p> <p>“This is a quote.” “This is another quote.”</p> </blockquote> -<h4 data-number="2.2.1.14" id="option-contentblocks"><span -class="header-section-number">2.2.1.14</span> Option +<h4 data-number="2.2.1.18" id="option-contentblocks"><span +class="header-section-number">2.2.1.18</span> Option <code>contentBlocks</code></h4> <dl> <dt><code>contentBlocks</code> (default value: <code>false</code>)</dt> @@ -2483,14 +3014,14 @@ class="header-section-number">2.2.1.14</span> Option <dl> <dt>true</dt> <dd> -<p>Enable the iA Writer content blocks syntax extension:</p> -<div class="sourceCode" id="cb157"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb157-1"><a href="#cb157-1" aria-hidden="true" tabindex="-1"></a>http://example.com/minard.jpg (Napoleon's</span> -<span id="cb157-2"><a href="#cb157-2" aria-hidden="true" tabindex="-1"></a> disastrous Russian campaign of 1812)</span> -<span id="cb157-3"><a href="#cb157-3" aria-hidden="true" tabindex="-1"></a>/Flowchart.png "Engineering Flowchart"</span> -<span id="cb157-4"><a href="#cb157-4" aria-hidden="true" tabindex="-1"></a>/Savings Account.csv 'Recent Transactions'</span> -<span id="cb157-5"><a href="#cb157-5" aria-hidden="true" tabindex="-1"></a>/Example.swift</span> -<span id="cb157-6"><a href="#cb157-6" aria-hidden="true" tabindex="-1"></a>/Lorem Ipsum.txt</span></code></pre></div> +<p>Enable the iA Writer content blocks syntax extension:</p> +<div class="sourceCode" id="cb183"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb183-1"><a href="#cb183-1" aria-hidden="true" tabindex="-1"></a>http://example.com/minard.jpg (Napoleon's</span> +<span id="cb183-2"><a href="#cb183-2" aria-hidden="true" tabindex="-1"></a> disastrous Russian campaign of 1812)</span> +<span id="cb183-3"><a href="#cb183-3" aria-hidden="true" tabindex="-1"></a>/Flowchart.png "Engineering Flowchart"</span> +<span id="cb183-4"><a href="#cb183-4" aria-hidden="true" tabindex="-1"></a>/Savings Account.csv 'Recent Transactions'</span> +<span id="cb183-5"><a href="#cb183-5" aria-hidden="true" tabindex="-1"></a>/Example.swift</span> +<span id="cb183-6"><a href="#cb183-6" aria-hidden="true" tabindex="-1"></a>/Lorem Ipsum.txt</span></code></pre></div> </dd> </dl> </dd> @@ -2498,12 +3029,12 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb157-1"><a hr <dl> <dt>false</dt> <dd> -<p>Disable the iA Writer content blocks syntax extension.</p> +<p>Disable the iA Writer content blocks syntax extension.</p> </dd> </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-12"><span +<h5 class="unnumbered" id="latex-example-13"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>table.csv</code> with the following content:</p> @@ -2513,34 +3044,34 @@ Marie,Curie,1867 Thomas,Edison,1847</code></pre> <p>Create also a text document named <code>markdown-languages.json</code> with the following content:</p> -<div class="sourceCode" id="cb159"><pre -class="sourceCode js"><code class="sourceCode javascript"><span id="cb159-1"><a href="#cb159-1" aria-hidden="true" tabindex="-1"></a>{</span> -<span id="cb159-2"><a href="#cb159-2" aria-hidden="true" tabindex="-1"></a> <span class="st">"tex"</span><span class="op">:</span> <span class="st">"LaTeX"</span></span> -<span id="cb159-3"><a href="#cb159-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> +<div class="sourceCode" id="cb185"><pre +class="sourceCode js"><code class="sourceCode javascript"><span id="cb185-1"><a href="#cb185-1" aria-hidden="true" tabindex="-1"></a>{</span> +<span id="cb185-2"><a href="#cb185-2" aria-hidden="true" tabindex="-1"></a> <span class="st">"tex"</span><span class="op">:</span> <span class="st">"LaTeX"</span></span> +<span id="cb185-3"><a href="#cb185-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> <p>Create also a text document named <code>code.tex</code> with the following content:</p> -<div class="sourceCode" id="cb160"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb160-1"><a href="#cb160-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\LaTeX</span>.</span></code></pre></div> +<div class="sourceCode" id="cb186"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb186-1"><a href="#cb186-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\LaTeX</span>.</span></code></pre></div> <p>Create also a text document named <code>part.md</code> with the following content:</p> -<div class="sourceCode" id="cb161"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb161-1"><a href="#cb161-1" aria-hidden="true" tabindex="-1"></a>This is a *transcluded markdown document*.</span></code></pre></div> +<div class="sourceCode" id="cb187"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb187-1"><a href="#cb187-1" aria-hidden="true" tabindex="-1"></a>This is a *transcluded markdown document*.</span></code></pre></div> <p>Create also a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb162"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb162-1"><a href="#cb162-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb162-2"><a href="#cb162-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</span> -<span id="cb162-3"><a href="#cb162-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[contentBlocks]{<span class="ex">markdown</span>}</span> -<span id="cb162-4"><a href="#cb162-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb162-5"><a href="#cb162-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb162-6"><a href="#cb162-6" aria-hidden="true" tabindex="-1"></a>/table.csv (An example table)</span> -<span id="cb162-7"><a href="#cb162-7" aria-hidden="true" tabindex="-1"></a>/code.tex (An example code listing)</span> -<span id="cb162-8"><a href="#cb162-8" aria-hidden="true" tabindex="-1"></a>/part.md (A file transclusion example)</span> -<span id="cb162-9"><a href="#cb162-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb162-10"><a href="#cb162-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb188"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb188-1"><a href="#cb188-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb188-2"><a href="#cb188-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</span> +<span id="cb188-3"><a href="#cb188-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[contentBlocks]{<span class="ex">markdown</span>}</span> +<span id="cb188-4"><a href="#cb188-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb188-5"><a href="#cb188-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb188-6"><a href="#cb188-6" aria-hidden="true" tabindex="-1"></a>/table.csv (An example table)</span> +<span id="cb188-7"><a href="#cb188-7" aria-hidden="true" tabindex="-1"></a>/code.tex (An example code listing)</span> +<span id="cb188-8"><a href="#cb188-8" aria-hidden="true" tabindex="-1"></a>/part.md (A file transclusion example)</span> +<span id="cb188-9"><a href="#cb188-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb188-10"><a href="#cb188-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb163"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb163-1"><a href="#cb163-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb189"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb189-1"><a href="#cb189-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -2571,11 +3102,11 @@ contain the following text:</p> </tbody> </table> <p>Table 1: An example table</p> -<div class="sourceCode" id="cb164"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb164-1"><a href="#cb164-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\LaTeX</span>.</span></code></pre></div> +<div class="sourceCode" id="cb190"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb190-1"><a href="#cb190-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\LaTeX</span>.</span></code></pre></div> <p>This is a <em>transcluded markdown document</em>.</p> </blockquote> -<h5 class="unnumbered" id="context-example-8">Con<span +<h5 class="unnumbered" id="context-example-9">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>table.csv</code> with the following content:</p> @@ -2585,35 +3116,35 @@ Marie,Curie,1867 Thomas,Edison,1847</code></pre> <p>Create also a text document named <code>markdown-languages.json</code> with the following content:</p> -<div class="sourceCode" id="cb166"><pre -class="sourceCode js"><code class="sourceCode javascript"><span id="cb166-1"><a href="#cb166-1" aria-hidden="true" tabindex="-1"></a>{</span> -<span id="cb166-2"><a href="#cb166-2" aria-hidden="true" tabindex="-1"></a> <span class="st">"tex"</span><span class="op">:</span> <span class="st">"ConTeXt"</span></span> -<span id="cb166-3"><a href="#cb166-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> +<div class="sourceCode" id="cb192"><pre +class="sourceCode js"><code class="sourceCode javascript"><span id="cb192-1"><a href="#cb192-1" aria-hidden="true" tabindex="-1"></a>{</span> +<span id="cb192-2"><a href="#cb192-2" aria-hidden="true" tabindex="-1"></a> <span class="st">"tex"</span><span class="op">:</span> <span class="st">"ConTeXt"</span></span> +<span id="cb192-3"><a href="#cb192-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> <p>Create also a text document named <code>code.tex</code> with the following content:</p> -<div class="sourceCode" id="cb167"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb167-1"><a href="#cb167-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\ConTeXt</span>.</span></code></pre></div> +<div class="sourceCode" id="cb193"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb193-1"><a href="#cb193-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\ConTeXt</span>.</span></code></pre></div> <p>Create also a text document named <code>part.md</code> with the following content:</p> -<div class="sourceCode" id="cb168"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb168-1"><a href="#cb168-1" aria-hidden="true" tabindex="-1"></a>This is a *transcluded markdown document*.</span></code></pre></div> +<div class="sourceCode" id="cb194"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb194-1"><a href="#cb194-1" aria-hidden="true" tabindex="-1"></a>This is a *transcluded markdown document*.</span></code></pre></div> <p>Create also a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb169"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb169-1"><a href="#cb169-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb169-2"><a href="#cb169-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[contentBlocks = yes]</span> -<span id="cb169-3"><a href="#cb169-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\definetyping</span> [ConTeXt]</span> -<span id="cb169-4"><a href="#cb169-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\setuptyping</span> [ConTeXt] [option=TEX]</span> -<span id="cb169-5"><a href="#cb169-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb169-6"><a href="#cb169-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb169-7"><a href="#cb169-7" aria-hidden="true" tabindex="-1"></a>/table.csv (An example table)</span> -<span id="cb169-8"><a href="#cb169-8" aria-hidden="true" tabindex="-1"></a>/code.tex (An example code listing)</span> -<span id="cb169-9"><a href="#cb169-9" aria-hidden="true" tabindex="-1"></a>/part.md (A file transclusion example)</span> -<span id="cb169-10"><a href="#cb169-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb169-11"><a href="#cb169-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb195"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb195-1"><a href="#cb195-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb195-2"><a href="#cb195-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[contentBlocks = yes]</span> +<span id="cb195-3"><a href="#cb195-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\definetyping</span> [ConTeXt]</span> +<span id="cb195-4"><a href="#cb195-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\setuptyping</span> [ConTeXt] [option=TEX]</span> +<span id="cb195-5"><a href="#cb195-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb195-6"><a href="#cb195-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb195-7"><a href="#cb195-7" aria-hidden="true" tabindex="-1"></a>/table.csv (An example table)</span> +<span id="cb195-8"><a href="#cb195-8" aria-hidden="true" tabindex="-1"></a>/code.tex (An example code listing)</span> +<span id="cb195-9"><a href="#cb195-9" aria-hidden="true" tabindex="-1"></a>/part.md (A file transclusion example)</span> +<span id="cb195-10"><a href="#cb195-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb195-11"><a href="#cb195-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb170"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb170-1"><a href="#cb170-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb196"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb196-1"><a href="#cb196-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -2644,12 +3175,124 @@ contain the following text:</p> </tbody> </table> <p>Table 1: An example table</p> -<div class="sourceCode" id="cb171"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb171-1"><a href="#cb171-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\ConTeXt</span>.</span></code></pre></div> +<div class="sourceCode" id="cb197"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb197-1"><a href="#cb197-1" aria-hidden="true" tabindex="-1"></a>This is an example code listing in <span class="fu">\ConTeXt</span>.</span></code></pre></div> <p>This is a <em>transcluded markdown document</em>.</p> </blockquote> -<h4 data-number="2.2.1.15" id="option-debugextensions"><span -class="header-section-number">2.2.1.15</span> Option +<h4 data-number="2.2.1.19" id="option-contentlevel"><span +class="header-section-number">2.2.1.19</span> Option +<code>contentLevel</code></h4> +<dl> +<dt><code>contentLevel</code> (default value: <code>block</code>)</dt> +<dd> +<dl> +<dt>block</dt> +<dd> +<p>Treat content as a sequence of blocks.</p> +<div class="sourceCode" id="cb198"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb198-1"><a href="#cb198-1" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>this is a list</span> +<span id="cb198-2"><a href="#cb198-2" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>it contains two items</span></code></pre></div> +</dd> +</dl> +</dd> +<dd> +<dl> +<dt>inline</dt> +<dd> +<p>Treat all content as inline content.</p> +<div class="sourceCode" id="cb199"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb199-1"><a href="#cb199-1" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>this is a text</span> +<span id="cb199-2"><a href="#cb199-2" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>not a list</span></code></pre></div> +</dd> +</dl> +</dd> +</dl> +<h5 class="unnumbered" id="plain-tex-example-8">Plain <span +class="tex">T<sub>e</sub>X</span> Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb200"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb200-1"><a href="#cb200-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb200-2"><a href="#cb200-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionContentLevel</span>{inline}</span> +<span id="cb200-3"><a href="#cb200-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb200-4"><a href="#cb200-4" aria-hidden="true" tabindex="-1"></a>- this is</span> +<span id="cb200-5"><a href="#cb200-5" aria-hidden="true" tabindex="-1"></a>- a text</span> +<span id="cb200-6"><a href="#cb200-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb200-7"><a href="#cb200-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb201"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb201-1"><a href="#cb201-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>- this is - a text</p> +</blockquote> +<h5 class="unnumbered" id="latex-example-14"><span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb202"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb202-1"><a href="#cb202-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb202-2"><a href="#cb202-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb202-3"><a href="#cb202-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb202-4"><a href="#cb202-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb202-5"><a href="#cb202-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb202-6"><a href="#cb202-6" aria-hidden="true" tabindex="-1"></a>- this is</span> +<span id="cb202-7"><a href="#cb202-7" aria-hidden="true" tabindex="-1"></a>- a list</span> +<span id="cb202-8"><a href="#cb202-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb202-9"><a href="#cb202-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb202-10"><a href="#cb202-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[contentLevel=inline]</span> +<span id="cb202-11"><a href="#cb202-11" aria-hidden="true" tabindex="-1"></a>- this is</span> +<span id="cb202-12"><a href="#cb202-12" aria-hidden="true" tabindex="-1"></a>- a text</span> +<span id="cb202-13"><a href="#cb202-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb202-14"><a href="#cb202-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb202-15"><a href="#cb202-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb203"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb203-1"><a href="#cb203-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<ul> +<li>this is</li> +<li>a list</li> +</ul> +<p>- this is - a text</p> +</blockquote> +<h5 class="unnumbered" id="context-example-10">Con<span +class="tex">T<sub>e</sub>X</span>t Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb204"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb204-1"><a href="#cb204-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb204-2"><a href="#cb204-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb204-3"><a href="#cb204-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb204-4"><a href="#cb204-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb204-5"><a href="#cb204-5" aria-hidden="true" tabindex="-1"></a>- this is</span> +<span id="cb204-6"><a href="#cb204-6" aria-hidden="true" tabindex="-1"></a>- a list</span> +<span id="cb204-7"><a href="#cb204-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb204-8"><a href="#cb204-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb204-9"><a href="#cb204-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[contentLevel = inline]</span> +<span id="cb204-10"><a href="#cb204-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb204-11"><a href="#cb204-11" aria-hidden="true" tabindex="-1"></a>- this is</span> +<span id="cb204-12"><a href="#cb204-12" aria-hidden="true" tabindex="-1"></a>- a text</span> +<span id="cb204-13"><a href="#cb204-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb204-14"><a href="#cb204-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb204-15"><a href="#cb204-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb205"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb205-1"><a href="#cb205-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<ul> +<li>this is</li> +<li>a list</li> +</ul> +<p>- this is - a text</p> +</blockquote> +<h4 data-number="2.2.1.20" id="option-debugextensions"><span +class="header-section-number">2.2.1.20</span> Option <code>debugExtensions</code></h4> <dl> <dt><code>debugExtensions</code> (default value: @@ -2680,49 +3323,49 @@ grammar of markdown.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-13"><span +<h5 class="unnumbered" id="latex-example-15"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>strike-through.lua</code> with the following content:</p> -<div class="sourceCode" id="cb172"><pre -class="sourceCode lua"><code class="sourceCode lua"><span id="cb172-1"><a href="#cb172-1" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> strike_through <span class="op">=</span> <span class="op">{</span></span> -<span id="cb172-2"><a href="#cb172-2" aria-hidden="true" tabindex="-1"></a> api_version <span class="op">=</span> <span class="dv">2</span><span class="op">,</span></span> -<span id="cb172-3"><a href="#cb172-3" aria-hidden="true" tabindex="-1"></a> grammar_version <span class="op">=</span> <span class="dv">2</span><span class="op">,</span></span> -<span id="cb172-4"><a href="#cb172-4" aria-hidden="true" tabindex="-1"></a> finalize_grammar <span class="op">=</span> <span class="kw">function</span><span class="op">(</span>reader<span class="op">)</span></span> -<span id="cb172-5"><a href="#cb172-5" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> nonspacechar <span class="op">=</span> lpeg<span class="op">.</span>P<span class="op">(</span><span class="dv">1</span><span class="op">)</span> <span class="op">-</span> lpeg<span class="op">.</span>S<span class="op">(</span><span class="st">"</span><span class="sc">\t</span><span class="st"> "</span><span class="op">)</span></span> -<span id="cb172-6"><a href="#cb172-6" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> doubleslashes <span class="op">=</span> lpeg<span class="op">.</span>P<span class="op">(</span><span class="st">"//"</span><span class="op">)</span></span> -<span id="cb172-7"><a href="#cb172-7" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> <span class="kw">function</span> between<span class="op">(</span>p<span class="op">,</span> starter<span class="op">,</span> ender<span class="op">)</span></span> -<span id="cb172-8"><a href="#cb172-8" aria-hidden="true" tabindex="-1"></a> ender <span class="op">=</span> lpeg<span class="op">.</span>B<span class="op">(</span>nonspacechar<span class="op">)</span> <span class="op">*</span> ender</span> -<span id="cb172-9"><a href="#cb172-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="op">(</span>starter <span class="op">*</span> <span class="op">#</span>nonspacechar</span> -<span id="cb172-10"><a href="#cb172-10" aria-hidden="true" tabindex="-1"></a> <span class="op">*</span> lpeg<span class="op">.</span>Ct<span class="op">(</span>p <span class="op">*</span> <span class="op">(</span>p <span class="op">-</span> ender<span class="op">)^</span><span class="dv">0</span><span class="op">)</span> <span class="op">*</span> ender<span class="op">)</span></span> -<span id="cb172-11"><a href="#cb172-11" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span> -<span id="cb172-12"><a href="#cb172-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb172-13"><a href="#cb172-13" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> read_strike_through <span class="op">=</span> between<span class="op">(</span></span> -<span id="cb172-14"><a href="#cb172-14" aria-hidden="true" tabindex="-1"></a> lpeg<span class="op">.</span>V<span class="op">(</span><span class="st">"Inline"</span><span class="op">),</span> doubleslashes<span class="op">,</span> doubleslashes</span> -<span id="cb172-15"><a href="#cb172-15" aria-hidden="true" tabindex="-1"></a> <span class="op">)</span> <span class="op">/</span> <span class="kw">function</span><span class="op">(</span>s<span class="op">)</span> <span class="cf">return</span> <span class="op">{</span><span class="st">"</span><span class="sc">\\</span><span class="st">st{"</span><span class="op">,</span> s<span class="op">,</span> <span class="st">"}"</span><span class="op">}</span> <span class="kw">end</span></span> -<span id="cb172-16"><a href="#cb172-16" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb172-17"><a href="#cb172-17" aria-hidden="true" tabindex="-1"></a> reader<span class="op">.</span>insert_pattern<span class="op">(</span><span class="st">"Inline after Emph"</span><span class="op">,</span> read_strike_through<span class="op">,</span></span> -<span id="cb172-18"><a href="#cb172-18" aria-hidden="true" tabindex="-1"></a> <span class="st">"StrikeThrough"</span><span class="op">)</span></span> -<span id="cb172-19"><a href="#cb172-19" aria-hidden="true" tabindex="-1"></a> reader<span class="op">.</span>add_special_character<span class="op">(</span><span class="st">"/"</span><span class="op">)</span></span> -<span id="cb172-20"><a href="#cb172-20" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span> -<span id="cb172-21"><a href="#cb172-21" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span> -<span id="cb172-22"><a href="#cb172-22" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb172-23"><a href="#cb172-23" aria-hidden="true" tabindex="-1"></a><span class="cf">return</span> strike_through</span></code></pre></div> +<div class="sourceCode" id="cb206"><pre +class="sourceCode lua"><code class="sourceCode lua"><span id="cb206-1"><a href="#cb206-1" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> <span class="va">strike_through</span> <span class="op">=</span> <span class="op">{</span></span> +<span id="cb206-2"><a href="#cb206-2" aria-hidden="true" tabindex="-1"></a> <span class="va">api_version</span> <span class="op">=</span> <span class="dv">2</span><span class="op">,</span></span> +<span id="cb206-3"><a href="#cb206-3" aria-hidden="true" tabindex="-1"></a> <span class="va">grammar_version</span> <span class="op">=</span> <span class="dv">4</span><span class="op">,</span></span> +<span id="cb206-4"><a href="#cb206-4" aria-hidden="true" tabindex="-1"></a> <span class="va">finalize_grammar</span> <span class="op">=</span> <span class="kw">function</span><span class="op">(</span><span class="va">reader</span><span class="op">)</span></span> +<span id="cb206-5"><a href="#cb206-5" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> <span class="va">nonspacechar</span> <span class="op">=</span> <span class="va">lpeg</span><span class="op">.</span>P<span class="op">(</span><span class="dv">1</span><span class="op">)</span> <span class="op">-</span> <span class="va">lpeg</span><span class="op">.</span>S<span class="op">(</span><span class="st">"</span><span class="sc">\t</span><span class="st"> "</span><span class="op">)</span></span> +<span id="cb206-6"><a href="#cb206-6" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> <span class="va">doubleslashes</span> <span class="op">=</span> <span class="va">lpeg</span><span class="op">.</span>P<span class="op">(</span><span class="st">"//"</span><span class="op">)</span></span> +<span id="cb206-7"><a href="#cb206-7" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> <span class="kw">function</span> between<span class="op">(</span><span class="va">p</span><span class="op">,</span> <span class="va">starter</span><span class="op">,</span> <span class="va">ender</span><span class="op">)</span></span> +<span id="cb206-8"><a href="#cb206-8" aria-hidden="true" tabindex="-1"></a> <span class="va">ender</span> <span class="op">=</span> <span class="va">lpeg</span><span class="op">.</span>B<span class="op">(</span><span class="va">nonspacechar</span><span class="op">)</span> <span class="op">*</span> <span class="va">ender</span></span> +<span id="cb206-9"><a href="#cb206-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="op">(</span><span class="va">starter</span> <span class="op">*</span> <span class="op">#</span><span class="va">nonspacechar</span></span> +<span id="cb206-10"><a href="#cb206-10" aria-hidden="true" tabindex="-1"></a> <span class="op">*</span> <span class="va">lpeg</span><span class="op">.</span>Ct<span class="op">(</span><span class="va">p</span> <span class="op">*</span> <span class="op">(</span><span class="va">p</span> <span class="op">-</span> <span class="va">ender</span><span class="op">)^</span><span class="dv">0</span><span class="op">)</span> <span class="op">*</span> <span class="va">ender</span><span class="op">)</span></span> +<span id="cb206-11"><a href="#cb206-11" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span> +<span id="cb206-12"><a href="#cb206-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb206-13"><a href="#cb206-13" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> <span class="va">read_strike_through</span> <span class="op">=</span> between<span class="op">(</span></span> +<span id="cb206-14"><a href="#cb206-14" aria-hidden="true" tabindex="-1"></a> <span class="va">lpeg</span><span class="op">.</span>V<span class="op">(</span><span class="st">"Inline"</span><span class="op">),</span> <span class="va">doubleslashes</span><span class="op">,</span> <span class="va">doubleslashes</span></span> +<span id="cb206-15"><a href="#cb206-15" aria-hidden="true" tabindex="-1"></a> <span class="op">)</span> <span class="op">/</span> <span class="kw">function</span><span class="op">(</span><span class="va">s</span><span class="op">)</span> <span class="cf">return</span> <span class="op">{</span><span class="st">"</span><span class="sc">\\</span><span class="st">st{"</span><span class="op">,</span> <span class="va">s</span><span class="op">,</span> <span class="st">"}"</span><span class="op">}</span> <span class="kw">end</span></span> +<span id="cb206-16"><a href="#cb206-16" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb206-17"><a href="#cb206-17" aria-hidden="true" tabindex="-1"></a> <span class="va">reader</span><span class="op">.</span>insert_pattern<span class="op">(</span><span class="st">"Inline after LinkAndEmph"</span><span class="op">,</span> <span class="va">read_strike_through</span><span class="op">,</span></span> +<span id="cb206-18"><a href="#cb206-18" aria-hidden="true" tabindex="-1"></a> <span class="st">"StrikeThrough"</span><span class="op">)</span></span> +<span id="cb206-19"><a href="#cb206-19" aria-hidden="true" tabindex="-1"></a> <span class="va">reader</span><span class="op">.</span>add_special_character<span class="op">(</span><span class="st">"/"</span><span class="op">)</span></span> +<span id="cb206-20"><a href="#cb206-20" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span> +<span id="cb206-21"><a href="#cb206-21" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span> +<span id="cb206-22"><a href="#cb206-22" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb206-23"><a href="#cb206-23" aria-hidden="true" tabindex="-1"></a><span class="cf">return</span> <span class="va">strike_through</span></span></code></pre></div> <p>Using a text editor, create also a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb173"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb173-1"><a href="#cb173-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb173-2"><a href="#cb173-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">soul</span>}</span> -<span id="cb173-3"><a href="#cb173-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[extension = strike-through.lua,</span> -<span id="cb173-4"><a href="#cb173-4" aria-hidden="true" tabindex="-1"></a> debugExtensions]{<span class="ex">markdown</span>}</span> -<span id="cb173-5"><a href="#cb173-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb173-6"><a href="#cb173-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb173-7"><a href="#cb173-7" aria-hidden="true" tabindex="-1"></a>This is //a lunar roving vehicle// strike-through text.</span> -<span id="cb173-8"><a href="#cb173-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb173-9"><a href="#cb173-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb207"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb207-1"><a href="#cb207-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb207-2"><a href="#cb207-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">soul</span>}</span> +<span id="cb207-3"><a href="#cb207-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[extension = strike-through.lua,</span> +<span id="cb207-4"><a href="#cb207-4" aria-hidden="true" tabindex="-1"></a> debugExtensions]{<span class="ex">markdown</span>}</span> +<span id="cb207-5"><a href="#cb207-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb207-6"><a href="#cb207-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb207-7"><a href="#cb207-7" aria-hidden="true" tabindex="-1"></a>This is //a lunar roving vehicle// strike-through text.</span> +<span id="cb207-8"><a href="#cb207-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb207-9"><a href="#cb207-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb174"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb174-1"><a href="#cb174-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb208"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb208-1"><a href="#cb208-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -2731,44 +3374,48 @@ contain the following text:</p> <p>Furthermore, a JSON document named <code>document.debug-extensions.json</code> should also be produced and contain the following text:</p> -<div class="sourceCode" id="cb175"><pre -class="sourceCode json"><code class="sourceCode json"><span id="cb175-1"><a href="#cb175-1" aria-hidden="true" tabindex="-1"></a><span class="fu">{</span></span> -<span id="cb175-2"><a href="#cb175-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">"Block"</span><span class="fu">:</span> <span class="ot">[</span></span> -<span id="cb175-3"><a href="#cb175-3" aria-hidden="true" tabindex="-1"></a> <span class="st">"Blockquote"</span><span class="ot">,</span></span> -<span id="cb175-4"><a href="#cb175-4" aria-hidden="true" tabindex="-1"></a> <span class="st">"Verbatim"</span><span class="ot">,</span></span> -<span id="cb175-5"><a href="#cb175-5" aria-hidden="true" tabindex="-1"></a> <span class="st">"ThematicBreak"</span><span class="ot">,</span></span> -<span id="cb175-6"><a href="#cb175-6" aria-hidden="true" tabindex="-1"></a> <span class="st">"BulletList"</span><span class="ot">,</span></span> -<span id="cb175-7"><a href="#cb175-7" aria-hidden="true" tabindex="-1"></a> <span class="st">"OrderedList"</span><span class="ot">,</span></span> -<span id="cb175-8"><a href="#cb175-8" aria-hidden="true" tabindex="-1"></a> <span class="st">"Heading"</span><span class="ot">,</span></span> -<span id="cb175-9"><a href="#cb175-9" aria-hidden="true" tabindex="-1"></a> <span class="st">"DisplayHtml"</span><span class="ot">,</span></span> -<span id="cb175-10"><a href="#cb175-10" aria-hidden="true" tabindex="-1"></a> <span class="st">"Paragraph"</span><span class="ot">,</span></span> -<span id="cb175-11"><a href="#cb175-11" aria-hidden="true" tabindex="-1"></a> <span class="st">"Plain"</span></span> -<span id="cb175-12"><a href="#cb175-12" aria-hidden="true" tabindex="-1"></a> <span class="ot">]</span><span class="fu">,</span></span> -<span id="cb175-13"><a href="#cb175-13" aria-hidden="true" tabindex="-1"></a> <span class="dt">"Inline"</span><span class="fu">:</span> <span class="ot">[</span></span> -<span id="cb175-14"><a href="#cb175-14" aria-hidden="true" tabindex="-1"></a> <span class="st">"Str"</span><span class="ot">,</span></span> -<span id="cb175-15"><a href="#cb175-15" aria-hidden="true" tabindex="-1"></a> <span class="st">"Space"</span><span class="ot">,</span></span> -<span id="cb175-16"><a href="#cb175-16" aria-hidden="true" tabindex="-1"></a> <span class="st">"Endline"</span><span class="ot">,</span></span> -<span id="cb175-17"><a href="#cb175-17" aria-hidden="true" tabindex="-1"></a> <span class="st">"UlOrStarLine"</span><span class="ot">,</span></span> -<span id="cb175-18"><a href="#cb175-18" aria-hidden="true" tabindex="-1"></a> <span class="st">"Strong"</span><span class="ot">,</span></span> -<span id="cb175-19"><a href="#cb175-19" aria-hidden="true" tabindex="-1"></a> <span class="st">"Emph"</span><span class="ot">,</span></span> -<span id="cb175-20"><a href="#cb175-20" aria-hidden="true" tabindex="-1"></a> <span class="st">"StrikeThrough (user-defined </span><span class="ch">\"</span><span class="st">./strike-through.lua</span><span class="ch">\"</span><span class="st"> syntax extension)"</span><span class="ot">,</span></span> -<span id="cb175-21"><a href="#cb175-21" aria-hidden="true" tabindex="-1"></a> <span class="st">"Link"</span><span class="ot">,</span></span> -<span id="cb175-22"><a href="#cb175-22" aria-hidden="true" tabindex="-1"></a> <span class="st">"Image"</span><span class="ot">,</span></span> -<span id="cb175-23"><a href="#cb175-23" aria-hidden="true" tabindex="-1"></a> <span class="st">"Code"</span><span class="ot">,</span></span> -<span id="cb175-24"><a href="#cb175-24" aria-hidden="true" tabindex="-1"></a> <span class="st">"AutoLinkUrl"</span><span class="ot">,</span></span> -<span id="cb175-25"><a href="#cb175-25" aria-hidden="true" tabindex="-1"></a> <span class="st">"AutoLinkEmail"</span><span class="ot">,</span></span> -<span id="cb175-26"><a href="#cb175-26" aria-hidden="true" tabindex="-1"></a> <span class="st">"AutoLinkRelativeReference"</span><span class="ot">,</span></span> -<span id="cb175-27"><a href="#cb175-27" aria-hidden="true" tabindex="-1"></a> <span class="st">"InlineHtml"</span><span class="ot">,</span></span> -<span id="cb175-28"><a href="#cb175-28" aria-hidden="true" tabindex="-1"></a> <span class="st">"HtmlEntity"</span><span class="ot">,</span></span> -<span id="cb175-29"><a href="#cb175-29" aria-hidden="true" tabindex="-1"></a> <span class="st">"EscapedChar"</span><span class="ot">,</span></span> -<span id="cb175-30"><a href="#cb175-30" aria-hidden="true" tabindex="-1"></a> <span class="st">"Smart"</span><span class="ot">,</span></span> -<span id="cb175-31"><a href="#cb175-31" aria-hidden="true" tabindex="-1"></a> <span class="st">"Symbol"</span></span> -<span id="cb175-32"><a href="#cb175-32" aria-hidden="true" tabindex="-1"></a> <span class="ot">]</span></span> -<span id="cb175-33"><a href="#cb175-33" aria-hidden="true" tabindex="-1"></a><span class="fu">}</span></span></code></pre></div> +<div class="sourceCode" id="cb209"><pre +class="sourceCode json"><code class="sourceCode json"><span id="cb209-1"><a href="#cb209-1" aria-hidden="true" tabindex="-1"></a><span class="fu">{</span></span> +<span id="cb209-2"><a href="#cb209-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">"Block"</span><span class="fu">:</span> <span class="ot">[</span></span> +<span id="cb209-3"><a href="#cb209-3" aria-hidden="true" tabindex="-1"></a> <span class="st">"Blockquote"</span><span class="ot">,</span></span> +<span id="cb209-4"><a href="#cb209-4" aria-hidden="true" tabindex="-1"></a> <span class="st">"Verbatim"</span><span class="ot">,</span></span> +<span id="cb209-5"><a href="#cb209-5" aria-hidden="true" tabindex="-1"></a> <span class="st">"FencedCode (built-in fenced_code syntax extension)"</span><span class="ot">,</span></span> +<span id="cb209-6"><a href="#cb209-6" aria-hidden="true" tabindex="-1"></a> <span class="st">"ThematicBreak"</span><span class="ot">,</span></span> +<span id="cb209-7"><a href="#cb209-7" aria-hidden="true" tabindex="-1"></a> <span class="st">"BulletList"</span><span class="ot">,</span></span> +<span id="cb209-8"><a href="#cb209-8" aria-hidden="true" tabindex="-1"></a> <span class="st">"OrderedList"</span><span class="ot">,</span></span> +<span id="cb209-9"><a href="#cb209-9" aria-hidden="true" tabindex="-1"></a> <span class="st">"DisplayHtml"</span><span class="ot">,</span></span> +<span id="cb209-10"><a href="#cb209-10" aria-hidden="true" tabindex="-1"></a> <span class="st">"Heading"</span></span> +<span id="cb209-11"><a href="#cb209-11" aria-hidden="true" tabindex="-1"></a> <span class="ot">]</span><span class="fu">,</span></span> +<span id="cb209-12"><a href="#cb209-12" aria-hidden="true" tabindex="-1"></a> <span class="dt">"BlockOrParagraph"</span><span class="fu">:</span> <span class="ot">[</span></span> +<span id="cb209-13"><a href="#cb209-13" aria-hidden="true" tabindex="-1"></a> <span class="st">"Block"</span><span class="ot">,</span></span> +<span id="cb209-14"><a href="#cb209-14" aria-hidden="true" tabindex="-1"></a> <span class="st">"Paragraph"</span><span class="ot">,</span></span> +<span id="cb209-15"><a href="#cb209-15" aria-hidden="true" tabindex="-1"></a> <span class="st">"Plain"</span></span> +<span id="cb209-16"><a href="#cb209-16" aria-hidden="true" tabindex="-1"></a> <span class="ot">]</span><span class="fu">,</span></span> +<span id="cb209-17"><a href="#cb209-17" aria-hidden="true" tabindex="-1"></a> <span class="dt">"EndlineExceptions"</span><span class="fu">:</span> <span class="ot">[</span></span> +<span id="cb209-18"><a href="#cb209-18" aria-hidden="true" tabindex="-1"></a> <span class="st">"EndlineExceptions (built-in fenced_code syntax extension)"</span></span> +<span id="cb209-19"><a href="#cb209-19" aria-hidden="true" tabindex="-1"></a> <span class="ot">]</span><span class="fu">,</span></span> +<span id="cb209-20"><a href="#cb209-20" aria-hidden="true" tabindex="-1"></a> <span class="dt">"Inline"</span><span class="fu">:</span> <span class="ot">[</span></span> +<span id="cb209-21"><a href="#cb209-21" aria-hidden="true" tabindex="-1"></a> <span class="st">"Str"</span><span class="ot">,</span></span> +<span id="cb209-22"><a href="#cb209-22" aria-hidden="true" tabindex="-1"></a> <span class="st">"Space"</span><span class="ot">,</span></span> +<span id="cb209-23"><a href="#cb209-23" aria-hidden="true" tabindex="-1"></a> <span class="st">"Endline"</span><span class="ot">,</span></span> +<span id="cb209-24"><a href="#cb209-24" aria-hidden="true" tabindex="-1"></a> <span class="st">"EndlineBreak"</span><span class="ot">,</span></span> +<span id="cb209-25"><a href="#cb209-25" aria-hidden="true" tabindex="-1"></a> <span class="st">"LinkAndEmph"</span><span class="ot">,</span></span> +<span id="cb209-26"><a href="#cb209-26" aria-hidden="true" tabindex="-1"></a> <span class="st">"StrikeThrough (user-defined </span><span class="ch">\"</span><span class="st">./strike-through.lua</span><span class="ch">\"</span><span class="st"> syntax extension)"</span><span class="ot">,</span></span> +<span id="cb209-27"><a href="#cb209-27" aria-hidden="true" tabindex="-1"></a> <span class="st">"Code"</span><span class="ot">,</span></span> +<span id="cb209-28"><a href="#cb209-28" aria-hidden="true" tabindex="-1"></a> <span class="st">"AutoLinkUrl"</span><span class="ot">,</span></span> +<span id="cb209-29"><a href="#cb209-29" aria-hidden="true" tabindex="-1"></a> <span class="st">"AutoLinkEmail"</span><span class="ot">,</span></span> +<span id="cb209-30"><a href="#cb209-30" aria-hidden="true" tabindex="-1"></a> <span class="st">"AutoLinkRelativeReference"</span><span class="ot">,</span></span> +<span id="cb209-31"><a href="#cb209-31" aria-hidden="true" tabindex="-1"></a> <span class="st">"InlineHtml"</span><span class="ot">,</span></span> +<span id="cb209-32"><a href="#cb209-32" aria-hidden="true" tabindex="-1"></a> <span class="st">"HtmlEntity"</span><span class="ot">,</span></span> +<span id="cb209-33"><a href="#cb209-33" aria-hidden="true" tabindex="-1"></a> <span class="st">"EscapedChar"</span><span class="ot">,</span></span> +<span id="cb209-34"><a href="#cb209-34" aria-hidden="true" tabindex="-1"></a> <span class="st">"Smart"</span><span class="ot">,</span></span> +<span id="cb209-35"><a href="#cb209-35" aria-hidden="true" tabindex="-1"></a> <span class="st">"Symbol"</span></span> +<span id="cb209-36"><a href="#cb209-36" aria-hidden="true" tabindex="-1"></a> <span class="ot">]</span></span> +<span id="cb209-37"><a href="#cb209-37" aria-hidden="true" tabindex="-1"></a><span class="fu">}</span></span></code></pre></div> <p>This output shows us that our user-defined syntax extension has been correctly inserted to the grammar of markdown.</p> -<h4 data-number="2.2.1.16" id="option-definitionlists"><span -class="header-section-number">2.2.1.16</span> Option +<h4 data-number="2.2.1.21" id="option-definitionlists"><span +class="header-section-number">2.2.1.21</span> Option <code>definitionLists</code></h4> <dl> <dt><code>definitionLists</code> (default value: @@ -2778,18 +3425,18 @@ class="header-section-number">2.2.1.16</span> Option <dt>true</dt> <dd> <p>Enable the pandoc definition list syntax extension:</p> -<div class="sourceCode" id="cb176"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb176-1"><a href="#cb176-1" aria-hidden="true" tabindex="-1"></a>Term 1</span> -<span id="cb176-2"><a href="#cb176-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb176-3"><a href="#cb176-3" aria-hidden="true" tabindex="-1"></a>: Definition 1</span> -<span id="cb176-4"><a href="#cb176-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb176-5"><a href="#cb176-5" aria-hidden="true" tabindex="-1"></a>Term 2 with *inline markup*</span> -<span id="cb176-6"><a href="#cb176-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb176-7"><a href="#cb176-7" aria-hidden="true" tabindex="-1"></a>: Definition 2</span> -<span id="cb176-8"><a href="#cb176-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb176-9"><a href="#cb176-9" aria-hidden="true" tabindex="-1"></a><span class="in"> { some code, part of Definition 2 }</span></span> -<span id="cb176-10"><a href="#cb176-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb176-11"><a href="#cb176-11" aria-hidden="true" tabindex="-1"></a><span class="in"> Third paragraph of definition 2.</span></span></code></pre></div> +<div class="sourceCode" id="cb210"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb210-1"><a href="#cb210-1" aria-hidden="true" tabindex="-1"></a>Term 1</span> +<span id="cb210-2"><a href="#cb210-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb210-3"><a href="#cb210-3" aria-hidden="true" tabindex="-1"></a>: Definition 1</span> +<span id="cb210-4"><a href="#cb210-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb210-5"><a href="#cb210-5" aria-hidden="true" tabindex="-1"></a>Term 2 with *inline markup*</span> +<span id="cb210-6"><a href="#cb210-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb210-7"><a href="#cb210-7" aria-hidden="true" tabindex="-1"></a>: Definition 2</span> +<span id="cb210-8"><a href="#cb210-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb210-9"><a href="#cb210-9" aria-hidden="true" tabindex="-1"></a><span class="in"> { some code, part of Definition 2 }</span></span> +<span id="cb210-10"><a href="#cb210-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb210-11"><a href="#cb210-11" aria-hidden="true" tabindex="-1"></a><span class="in"> Third paragraph of definition 2.</span></span></code></pre></div> </dd> </dl> </dd> @@ -2802,31 +3449,31 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb176-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-14"><span +<h5 class="unnumbered" id="latex-example-16"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb177"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb177-1"><a href="#cb177-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb177-2"><a href="#cb177-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[definitionLists]{<span class="ex">markdown</span>}</span> -<span id="cb177-3"><a href="#cb177-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb177-4"><a href="#cb177-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb177-5"><a href="#cb177-5" aria-hidden="true" tabindex="-1"></a>Term 1</span> -<span id="cb177-6"><a href="#cb177-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb177-7"><a href="#cb177-7" aria-hidden="true" tabindex="-1"></a>: Definition 1</span> -<span id="cb177-8"><a href="#cb177-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb177-9"><a href="#cb177-9" aria-hidden="true" tabindex="-1"></a>Term 2 with *inline markup*</span> -<span id="cb177-10"><a href="#cb177-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb177-11"><a href="#cb177-11" aria-hidden="true" tabindex="-1"></a>: Definition 2</span> -<span id="cb177-12"><a href="#cb177-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb177-13"><a href="#cb177-13" aria-hidden="true" tabindex="-1"></a> { some code, part of Definition 2 }</span> -<span id="cb177-14"><a href="#cb177-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb177-15"><a href="#cb177-15" aria-hidden="true" tabindex="-1"></a> Third paragraph of definition 2.</span> -<span id="cb177-16"><a href="#cb177-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb177-17"><a href="#cb177-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb211"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb211-1"><a href="#cb211-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb211-2"><a href="#cb211-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[definitionLists]{<span class="ex">markdown</span>}</span> +<span id="cb211-3"><a href="#cb211-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb211-4"><a href="#cb211-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb211-5"><a href="#cb211-5" aria-hidden="true" tabindex="-1"></a>Term 1</span> +<span id="cb211-6"><a href="#cb211-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb211-7"><a href="#cb211-7" aria-hidden="true" tabindex="-1"></a>: Definition 1</span> +<span id="cb211-8"><a href="#cb211-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb211-9"><a href="#cb211-9" aria-hidden="true" tabindex="-1"></a>Term 2 with *inline markup*</span> +<span id="cb211-10"><a href="#cb211-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb211-11"><a href="#cb211-11" aria-hidden="true" tabindex="-1"></a>: Definition 2</span> +<span id="cb211-12"><a href="#cb211-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb211-13"><a href="#cb211-13" aria-hidden="true" tabindex="-1"></a> { some code, part of Definition 2 }</span> +<span id="cb211-14"><a href="#cb211-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb211-15"><a href="#cb211-15" aria-hidden="true" tabindex="-1"></a> Third paragraph of definition 2.</span> +<span id="cb211-16"><a href="#cb211-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb211-17"><a href="#cb211-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb178"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb178-1"><a href="#cb178-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb212"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb212-1"><a href="#cb212-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -2843,31 +3490,31 @@ contain the following text:</p> </dd> </dl> </blockquote> -<h5 class="unnumbered" id="context-example-9">Con<span +<h5 class="unnumbered" id="context-example-11">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb180"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb180-1"><a href="#cb180-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb180-2"><a href="#cb180-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[definitionLists = yes]</span> -<span id="cb180-3"><a href="#cb180-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb180-4"><a href="#cb180-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb180-5"><a href="#cb180-5" aria-hidden="true" tabindex="-1"></a>Term 1</span> -<span id="cb180-6"><a href="#cb180-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb180-7"><a href="#cb180-7" aria-hidden="true" tabindex="-1"></a>: Definition 1</span> -<span id="cb180-8"><a href="#cb180-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb180-9"><a href="#cb180-9" aria-hidden="true" tabindex="-1"></a>Term 2 with *inline markup*</span> -<span id="cb180-10"><a href="#cb180-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb180-11"><a href="#cb180-11" aria-hidden="true" tabindex="-1"></a>: Definition 2</span> -<span id="cb180-12"><a href="#cb180-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb180-13"><a href="#cb180-13" aria-hidden="true" tabindex="-1"></a> { some code, part of Definition 2 }</span> -<span id="cb180-14"><a href="#cb180-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb180-15"><a href="#cb180-15" aria-hidden="true" tabindex="-1"></a> Third paragraph of definition 2.</span> -<span id="cb180-16"><a href="#cb180-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb180-17"><a href="#cb180-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb214"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb214-1"><a href="#cb214-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb214-2"><a href="#cb214-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[definitionLists = yes]</span> +<span id="cb214-3"><a href="#cb214-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb214-4"><a href="#cb214-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb214-5"><a href="#cb214-5" aria-hidden="true" tabindex="-1"></a>Term 1</span> +<span id="cb214-6"><a href="#cb214-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb214-7"><a href="#cb214-7" aria-hidden="true" tabindex="-1"></a>: Definition 1</span> +<span id="cb214-8"><a href="#cb214-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb214-9"><a href="#cb214-9" aria-hidden="true" tabindex="-1"></a>Term 2 with *inline markup*</span> +<span id="cb214-10"><a href="#cb214-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb214-11"><a href="#cb214-11" aria-hidden="true" tabindex="-1"></a>: Definition 2</span> +<span id="cb214-12"><a href="#cb214-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb214-13"><a href="#cb214-13" aria-hidden="true" tabindex="-1"></a> { some code, part of Definition 2 }</span> +<span id="cb214-14"><a href="#cb214-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb214-15"><a href="#cb214-15" aria-hidden="true" tabindex="-1"></a> Third paragraph of definition 2.</span> +<span id="cb214-16"><a href="#cb214-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb214-17"><a href="#cb214-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb181"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb181-1"><a href="#cb181-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb215"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb215-1"><a href="#cb215-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -2884,81 +3531,8 @@ contain the following text:</p> </dd> </dl> </blockquote> -<h4 data-number="2.2.1.17" id="option-eagercache"><span -class="header-section-number">2.2.1.17</span> Option -<code>eagerCache</code></h4> -<dl> -<dt><code>eagerCache</code> (default value: <code>true</code>)</dt> -<dd> -<dl> -<dt>true</dt> -<dd> -<p>Converted markdown documents will be cached in -<strong><code>cacheDir</code></strong>. This can be useful for -post-processing the converted documents and for recovering historical -versions of the documents from the cache. However, it also produces a -large number of auxiliary files on the disk and obscures the output of -the Lua command-line interface when it is used for plumbing.</p> -<p>This behavior will always be used if the -<strong><code>finalizeCache</code></strong> option is enabled.</p> -</dd> -</dl> -</dd> -<dd> -<dl> -<dt>false</dt> -<dd> -<p>Converted markdown documents will not be cached. This decreases the -number of auxiliary files that we produce and makes it easier to use the -Lua command-line interface for plumbing.</p> -<p>This behavior will only be used when the -<strong><code>finalizeCache</code></strong> option is disabled. -Recursive nesting of markdown document fragments is undefined behavior -when <strong><code>eagerCache</code></strong> is disabled.</p> -</dd> -</dl> -</dd> -</dl> -<h5 class="unnumbered" id="lua-module-example-7">Lua Module Example</h5> -<p>Using a text editor, create a text document named -<code>hello.md</code> with the following content:</p> -<div class="sourceCode" id="cb183"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb183-1"><a href="#cb183-1" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal with the -<strong><code>eagerCache</code></strong> option disabled:</p> -<div class="sourceCode" id="cb184"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb184-1"><a href="#cb184-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ eagerCache=false <span class="at">--</span> hello.md hello.tex</span></code></pre></div> -<p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua -CLI script file, such as -<code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems -or <code>C:\Users\</code>⟨<em>Your -username</em>⟩<code>\texmf\scripts\markdown\markdown-cli.lua</code> on -Windows systems. Use the command -<code>kpsewhich -a markdown-cli.lua</code> to locate the Lua CLI script -file using <a href="https://tug.org/kpathsea/" -title="Kpathsea - TeX Users Group">Kpathsea</a>.</p> -<p>A <span class="tex">T<sub>e</sub>X</span> document named -<code>hello.tex</code> should be produced and contain the following -code:</p> -<div class="sourceCode" id="cb185"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb185-1"><a href="#cb185-1" aria-hidden="true" tabindex="-1"></a>Hello <span class="fu">\markdownRendererEmphasis</span>{world}!<span class="fu">\relax</span></span></code></pre></div> -<hr /> -<p>Invoke LuaTeX from the terminal again, this time with the -<strong><code>eagerCache</code></strong> option enabled:</p> -<div class="sourceCode" id="cb186"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb186-1"><a href="#cb186-1" aria-hidden="true" tabindex="-1"></a>texlua ⟨CLI pathname⟩ eagerCache=true -- hello.md hello.tex</span></code></pre></div> -<p>A <span class="tex">T<sub>e</sub>X</span> document named -<code>hello.tex</code> should be produced and contain the following -code:</p> -<div class="sourceCode" id="cb187"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb187-1"><a href="#cb187-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> ./⟨hash⟩.md.tex<span class="fu">\relax</span></span></code></pre></div> -<p>Additionally, a <span class="tex">T<sub>e</sub>X</span> document -named <code>⟨hash⟩.md.tex</code> should be produced and contain the -following code:</p> -<div class="sourceCode" id="cb188"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb188-1"><a href="#cb188-1" aria-hidden="true" tabindex="-1"></a>Hello <span class="fu">\markdownRendererEmphasis</span>{world}!<span class="fu">\relax</span></span></code></pre></div> -<h4 data-number="2.2.1.18" id="option-expectjekylldata"><span -class="header-section-number">2.2.1.18</span> Option +<h4 data-number="2.2.1.22" id="option-expectjekylldata"><span +class="header-section-number">2.2.1.22</span> Option <code>expectJekyllData</code></h4> <dl> <dt><code>expectJekyllData</code> (default value: @@ -2972,26 +3546,26 @@ then a markdown document may begin with <abbr>yaml</abbr> metadata if and only if the metadata begin with the end-of-directives marker (<code>---</code>) and they end with either the end-of-directives or the end-of-document marker (<code>...</code>):</p> -<div class="sourceCode" id="cb189"><pre -class="sourceCode latex"><code class="sourceCode latex"><span id="cb189-1"><a href="#cb189-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb189-2"><a href="#cb189-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[jekyllData]{<span class="ex">markdown</span>}</span> -<span id="cb189-3"><a href="#cb189-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb189-4"><a href="#cb189-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb189-5"><a href="#cb189-5" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb189-6"><a href="#cb189-6" aria-hidden="true" tabindex="-1"></a>- this</span> -<span id="cb189-7"><a href="#cb189-7" aria-hidden="true" tabindex="-1"></a>- is</span> -<span id="cb189-8"><a href="#cb189-8" aria-hidden="true" tabindex="-1"></a>- YAML</span> -<span id="cb189-9"><a href="#cb189-9" aria-hidden="true" tabindex="-1"></a>...</span> -<span id="cb189-10"><a href="#cb189-10" aria-hidden="true" tabindex="-1"></a>- followed</span> -<span id="cb189-11"><a href="#cb189-11" aria-hidden="true" tabindex="-1"></a>- by</span> -<span id="cb189-12"><a href="#cb189-12" aria-hidden="true" tabindex="-1"></a>- Markdown</span> -<span id="cb189-13"><a href="#cb189-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb189-14"><a href="#cb189-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb189-15"><a href="#cb189-15" aria-hidden="true" tabindex="-1"></a>- this</span> -<span id="cb189-16"><a href="#cb189-16" aria-hidden="true" tabindex="-1"></a>- is</span> -<span id="cb189-17"><a href="#cb189-17" aria-hidden="true" tabindex="-1"></a>- Markdown</span> -<span id="cb189-18"><a href="#cb189-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb189-19"><a href="#cb189-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb217"><pre +class="sourceCode latex"><code class="sourceCode latex"><span id="cb217-1"><a href="#cb217-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb217-2"><a href="#cb217-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[jekyllData]{<span class="ex">markdown</span>}</span> +<span id="cb217-3"><a href="#cb217-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb217-4"><a href="#cb217-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb217-5"><a href="#cb217-5" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb217-6"><a href="#cb217-6" aria-hidden="true" tabindex="-1"></a>- this</span> +<span id="cb217-7"><a href="#cb217-7" aria-hidden="true" tabindex="-1"></a>- is</span> +<span id="cb217-8"><a href="#cb217-8" aria-hidden="true" tabindex="-1"></a>- YAML</span> +<span id="cb217-9"><a href="#cb217-9" aria-hidden="true" tabindex="-1"></a>...</span> +<span id="cb217-10"><a href="#cb217-10" aria-hidden="true" tabindex="-1"></a>- followed</span> +<span id="cb217-11"><a href="#cb217-11" aria-hidden="true" tabindex="-1"></a>- by</span> +<span id="cb217-12"><a href="#cb217-12" aria-hidden="true" tabindex="-1"></a>- Markdown</span> +<span id="cb217-13"><a href="#cb217-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb217-14"><a href="#cb217-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb217-15"><a href="#cb217-15" aria-hidden="true" tabindex="-1"></a>- this</span> +<span id="cb217-16"><a href="#cb217-16" aria-hidden="true" tabindex="-1"></a>- is</span> +<span id="cb217-17"><a href="#cb217-17" aria-hidden="true" tabindex="-1"></a>- Markdown</span> +<span id="cb217-18"><a href="#cb217-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb217-19"><a href="#cb217-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> </dd> </dl> </dd> @@ -3002,63 +3576,63 @@ class="sourceCode latex"><code class="sourceCode latex"><span id="cb189-1"><a hr <p>When the <strong><code>jekyllData</code></strong> option is enabled, then a markdown document may begin directly with <abbr>yaml</abbr> metadata and may contain nothing but <abbr>yaml</abbr> metadata.</p> -<div class="sourceCode" id="cb190"><pre -class="sourceCode latex"><code class="sourceCode latex"><span id="cb190-1"><a href="#cb190-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb190-2"><a href="#cb190-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[jekyllData, expectJekyllData]{<span class="ex">markdown</span>}</span> -<span id="cb190-3"><a href="#cb190-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb190-4"><a href="#cb190-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb190-5"><a href="#cb190-5" aria-hidden="true" tabindex="-1"></a>- this</span> -<span id="cb190-6"><a href="#cb190-6" aria-hidden="true" tabindex="-1"></a>- is</span> -<span id="cb190-7"><a href="#cb190-7" aria-hidden="true" tabindex="-1"></a>- YAML</span> -<span id="cb190-8"><a href="#cb190-8" aria-hidden="true" tabindex="-1"></a>...</span> -<span id="cb190-9"><a href="#cb190-9" aria-hidden="true" tabindex="-1"></a>- followed</span> -<span id="cb190-10"><a href="#cb190-10" aria-hidden="true" tabindex="-1"></a>- by</span> -<span id="cb190-11"><a href="#cb190-11" aria-hidden="true" tabindex="-1"></a>- Markdown</span> -<span id="cb190-12"><a href="#cb190-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb190-13"><a href="#cb190-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb190-14"><a href="#cb190-14" aria-hidden="true" tabindex="-1"></a>- this</span> -<span id="cb190-15"><a href="#cb190-15" aria-hidden="true" tabindex="-1"></a>- is</span> -<span id="cb190-16"><a href="#cb190-16" aria-hidden="true" tabindex="-1"></a>- YAML</span> -<span id="cb190-17"><a href="#cb190-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb190-18"><a href="#cb190-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb218"><pre +class="sourceCode latex"><code class="sourceCode latex"><span id="cb218-1"><a href="#cb218-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb218-2"><a href="#cb218-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[jekyllData, expectJekyllData]{<span class="ex">markdown</span>}</span> +<span id="cb218-3"><a href="#cb218-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb218-4"><a href="#cb218-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb218-5"><a href="#cb218-5" aria-hidden="true" tabindex="-1"></a>- this</span> +<span id="cb218-6"><a href="#cb218-6" aria-hidden="true" tabindex="-1"></a>- is</span> +<span id="cb218-7"><a href="#cb218-7" aria-hidden="true" tabindex="-1"></a>- YAML</span> +<span id="cb218-8"><a href="#cb218-8" aria-hidden="true" tabindex="-1"></a>...</span> +<span id="cb218-9"><a href="#cb218-9" aria-hidden="true" tabindex="-1"></a>- followed</span> +<span id="cb218-10"><a href="#cb218-10" aria-hidden="true" tabindex="-1"></a>- by</span> +<span id="cb218-11"><a href="#cb218-11" aria-hidden="true" tabindex="-1"></a>- Markdown</span> +<span id="cb218-12"><a href="#cb218-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb218-13"><a href="#cb218-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb218-14"><a href="#cb218-14" aria-hidden="true" tabindex="-1"></a>- this</span> +<span id="cb218-15"><a href="#cb218-15" aria-hidden="true" tabindex="-1"></a>- is</span> +<span id="cb218-16"><a href="#cb218-16" aria-hidden="true" tabindex="-1"></a>- YAML</span> +<span id="cb218-17"><a href="#cb218-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb218-18"><a href="#cb218-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> </dd> </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-15"><span +<h5 class="unnumbered" id="latex-example-17"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>jane-doe.yml</code> with the following content:</p> -<div class="sourceCode" id="cb191"><pre -class="sourceCode yaml"><code class="sourceCode yaml"><span id="cb191-1"><a href="#cb191-1" aria-hidden="true" tabindex="-1"></a><span class="fu">name</span><span class="kw">:</span><span class="at"> Jane Doe</span></span> -<span id="cb191-2"><a href="#cb191-2" aria-hidden="true" tabindex="-1"></a><span class="fu">age</span><span class="kw">:</span><span class="at"> </span><span class="dv">99</span></span></code></pre></div> +<div class="sourceCode" id="cb219"><pre +class="sourceCode yaml"><code class="sourceCode yaml"><span id="cb219-1"><a href="#cb219-1" aria-hidden="true" tabindex="-1"></a><span class="fu">name</span><span class="kw">:</span><span class="at"> Jane Doe</span></span> +<span id="cb219-2"><a href="#cb219-2" aria-hidden="true" tabindex="-1"></a><span class="fu">age</span><span class="kw">:</span><span class="at"> </span><span class="dv">99</span></span></code></pre></div> <p>Using a text editor, create also a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb192"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb192-1"><a href="#cb192-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb192-2"><a href="#cb192-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[jekyllData]{<span class="ex">markdown</span>}</span> -<span id="cb192-3"><a href="#cb192-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb192-4"><a href="#cb192-4" aria-hidden="true" tabindex="-1"></a> jekyllDataRenderers = {</span> -<span id="cb192-5"><a href="#cb192-5" aria-hidden="true" tabindex="-1"></a> name = {<span class="fu">\gdef\name</span>{#1}},</span> -<span id="cb192-6"><a href="#cb192-6" aria-hidden="true" tabindex="-1"></a> code = {<span class="fu">\gdef\age</span>{#1}},</span> -<span id="cb192-7"><a href="#cb192-7" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb192-8"><a href="#cb192-8" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb192-9"><a href="#cb192-9" aria-hidden="true" tabindex="-1"></a> jekyllDataEnd = {<span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.},</span> -<span id="cb192-10"><a href="#cb192-10" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb192-11"><a href="#cb192-11" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb192-12"><a href="#cb192-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb192-13"><a href="#cb192-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>[expectJekyllData]{jane-doe.yml}</span> -<span id="cb192-14"><a href="#cb192-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb220"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb220-1"><a href="#cb220-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb220-2"><a href="#cb220-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[jekyllData]{<span class="ex">markdown</span>}</span> +<span id="cb220-3"><a href="#cb220-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb220-4"><a href="#cb220-4" aria-hidden="true" tabindex="-1"></a> jekyllDataRenderers = {</span> +<span id="cb220-5"><a href="#cb220-5" aria-hidden="true" tabindex="-1"></a> name = {<span class="fu">\gdef\name</span>{#1}},</span> +<span id="cb220-6"><a href="#cb220-6" aria-hidden="true" tabindex="-1"></a> code = {<span class="fu">\gdef\age</span>{#1}},</span> +<span id="cb220-7"><a href="#cb220-7" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb220-8"><a href="#cb220-8" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb220-9"><a href="#cb220-9" aria-hidden="true" tabindex="-1"></a> jekyllDataEnd = {<span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.},</span> +<span id="cb220-10"><a href="#cb220-10" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb220-11"><a href="#cb220-11" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb220-12"><a href="#cb220-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb220-13"><a href="#cb220-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>[expectJekyllData]{jane-doe.yml}</span> +<span id="cb220-14"><a href="#cb220-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb193"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb193-1"><a href="#cb193-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb221"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb221-1"><a href="#cb221-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Jane Doe is 99 years old.</p> </blockquote> -<h4 data-number="2.2.1.19" id="option-extensions"><span -class="header-section-number">2.2.1.19</span> Option +<h4 data-number="2.2.1.23" id="option-extensions"><span +class="header-section-number">2.2.1.23</span> Option <code>extensions</code></h4> <dl> <dt><code>extensions</code> (default value: <code>{}</code>)</dt> @@ -3070,55 +3644,55 @@ working directory but also in the <span class="tex">T<sub>e</sub>X</span> directory structure.</p> </dd> </dl> -<h5 class="unnumbered" id="latex-example-16"><span +<h5 class="unnumbered" id="latex-example-18"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>strike-through.lua</code> with the following content:</p> -<div class="sourceCode" id="cb194"><pre -class="sourceCode lua"><code class="sourceCode lua"><span id="cb194-1"><a href="#cb194-1" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> strike_through <span class="op">=</span> <span class="op">{</span></span> -<span id="cb194-2"><a href="#cb194-2" aria-hidden="true" tabindex="-1"></a> api_version <span class="op">=</span> <span class="dv">2</span><span class="op">,</span></span> -<span id="cb194-3"><a href="#cb194-3" aria-hidden="true" tabindex="-1"></a> grammar_version <span class="op">=</span> <span class="dv">2</span><span class="op">,</span></span> -<span id="cb194-4"><a href="#cb194-4" aria-hidden="true" tabindex="-1"></a> finalize_grammar <span class="op">=</span> <span class="kw">function</span><span class="op">(</span>reader<span class="op">)</span></span> -<span id="cb194-5"><a href="#cb194-5" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> nonspacechar <span class="op">=</span> lpeg<span class="op">.</span>P<span class="op">(</span><span class="dv">1</span><span class="op">)</span> <span class="op">-</span> lpeg<span class="op">.</span>S<span class="op">(</span><span class="st">"</span><span class="sc">\t</span><span class="st"> "</span><span class="op">)</span></span> -<span id="cb194-6"><a href="#cb194-6" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> doubleslashes <span class="op">=</span> lpeg<span class="op">.</span>P<span class="op">(</span><span class="st">"//"</span><span class="op">)</span></span> -<span id="cb194-7"><a href="#cb194-7" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> <span class="kw">function</span> between<span class="op">(</span>p<span class="op">,</span> starter<span class="op">,</span> ender<span class="op">)</span></span> -<span id="cb194-8"><a href="#cb194-8" aria-hidden="true" tabindex="-1"></a> ender <span class="op">=</span> lpeg<span class="op">.</span>B<span class="op">(</span>nonspacechar<span class="op">)</span> <span class="op">*</span> ender</span> -<span id="cb194-9"><a href="#cb194-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="op">(</span>starter <span class="op">*</span> <span class="op">#</span>nonspacechar</span> -<span id="cb194-10"><a href="#cb194-10" aria-hidden="true" tabindex="-1"></a> <span class="op">*</span> lpeg<span class="op">.</span>Ct<span class="op">(</span>p <span class="op">*</span> <span class="op">(</span>p <span class="op">-</span> ender<span class="op">)^</span><span class="dv">0</span><span class="op">)</span> <span class="op">*</span> ender<span class="op">)</span></span> -<span id="cb194-11"><a href="#cb194-11" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span> -<span id="cb194-12"><a href="#cb194-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb194-13"><a href="#cb194-13" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> read_strike_through <span class="op">=</span> between<span class="op">(</span></span> -<span id="cb194-14"><a href="#cb194-14" aria-hidden="true" tabindex="-1"></a> lpeg<span class="op">.</span>V<span class="op">(</span><span class="st">"Inline"</span><span class="op">),</span> doubleslashes<span class="op">,</span> doubleslashes</span> -<span id="cb194-15"><a href="#cb194-15" aria-hidden="true" tabindex="-1"></a> <span class="op">)</span> <span class="op">/</span> <span class="kw">function</span><span class="op">(</span>s<span class="op">)</span> <span class="cf">return</span> <span class="op">{</span><span class="st">"</span><span class="sc">\\</span><span class="st">st{"</span><span class="op">,</span> s<span class="op">,</span> <span class="st">"}"</span><span class="op">}</span> <span class="kw">end</span></span> -<span id="cb194-16"><a href="#cb194-16" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb194-17"><a href="#cb194-17" aria-hidden="true" tabindex="-1"></a> reader<span class="op">.</span>insert_pattern<span class="op">(</span><span class="st">"Inline after Emph"</span><span class="op">,</span> read_strike_through<span class="op">,</span></span> -<span id="cb194-18"><a href="#cb194-18" aria-hidden="true" tabindex="-1"></a> <span class="st">"StrikeThrough"</span><span class="op">)</span></span> -<span id="cb194-19"><a href="#cb194-19" aria-hidden="true" tabindex="-1"></a> reader<span class="op">.</span>add_special_character<span class="op">(</span><span class="st">"/"</span><span class="op">)</span></span> -<span id="cb194-20"><a href="#cb194-20" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span> -<span id="cb194-21"><a href="#cb194-21" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span> -<span id="cb194-22"><a href="#cb194-22" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb194-23"><a href="#cb194-23" aria-hidden="true" tabindex="-1"></a><span class="cf">return</span> strike_through</span></code></pre></div> +<div class="sourceCode" id="cb222"><pre +class="sourceCode lua"><code class="sourceCode lua"><span id="cb222-1"><a href="#cb222-1" aria-hidden="true" tabindex="-1"></a><span class="kw">local</span> <span class="va">strike_through</span> <span class="op">=</span> <span class="op">{</span></span> +<span id="cb222-2"><a href="#cb222-2" aria-hidden="true" tabindex="-1"></a> <span class="va">api_version</span> <span class="op">=</span> <span class="dv">2</span><span class="op">,</span></span> +<span id="cb222-3"><a href="#cb222-3" aria-hidden="true" tabindex="-1"></a> <span class="va">grammar_version</span> <span class="op">=</span> <span class="dv">4</span><span class="op">,</span></span> +<span id="cb222-4"><a href="#cb222-4" aria-hidden="true" tabindex="-1"></a> <span class="va">finalize_grammar</span> <span class="op">=</span> <span class="kw">function</span><span class="op">(</span><span class="va">reader</span><span class="op">)</span></span> +<span id="cb222-5"><a href="#cb222-5" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> <span class="va">nonspacechar</span> <span class="op">=</span> <span class="va">lpeg</span><span class="op">.</span>P<span class="op">(</span><span class="dv">1</span><span class="op">)</span> <span class="op">-</span> <span class="va">lpeg</span><span class="op">.</span>S<span class="op">(</span><span class="st">"</span><span class="sc">\t</span><span class="st"> "</span><span class="op">)</span></span> +<span id="cb222-6"><a href="#cb222-6" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> <span class="va">doubleslashes</span> <span class="op">=</span> <span class="va">lpeg</span><span class="op">.</span>P<span class="op">(</span><span class="st">"//"</span><span class="op">)</span></span> +<span id="cb222-7"><a href="#cb222-7" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> <span class="kw">function</span> between<span class="op">(</span><span class="va">p</span><span class="op">,</span> <span class="va">starter</span><span class="op">,</span> <span class="va">ender</span><span class="op">)</span></span> +<span id="cb222-8"><a href="#cb222-8" aria-hidden="true" tabindex="-1"></a> <span class="va">ender</span> <span class="op">=</span> <span class="va">lpeg</span><span class="op">.</span>B<span class="op">(</span><span class="va">nonspacechar</span><span class="op">)</span> <span class="op">*</span> <span class="va">ender</span></span> +<span id="cb222-9"><a href="#cb222-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="op">(</span><span class="va">starter</span> <span class="op">*</span> <span class="op">#</span><span class="va">nonspacechar</span></span> +<span id="cb222-10"><a href="#cb222-10" aria-hidden="true" tabindex="-1"></a> <span class="op">*</span> <span class="va">lpeg</span><span class="op">.</span>Ct<span class="op">(</span><span class="va">p</span> <span class="op">*</span> <span class="op">(</span><span class="va">p</span> <span class="op">-</span> <span class="va">ender</span><span class="op">)^</span><span class="dv">0</span><span class="op">)</span> <span class="op">*</span> <span class="va">ender</span><span class="op">)</span></span> +<span id="cb222-11"><a href="#cb222-11" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span> +<span id="cb222-12"><a href="#cb222-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb222-13"><a href="#cb222-13" aria-hidden="true" tabindex="-1"></a> <span class="kw">local</span> <span class="va">read_strike_through</span> <span class="op">=</span> between<span class="op">(</span></span> +<span id="cb222-14"><a href="#cb222-14" aria-hidden="true" tabindex="-1"></a> <span class="va">lpeg</span><span class="op">.</span>V<span class="op">(</span><span class="st">"Inline"</span><span class="op">),</span> <span class="va">doubleslashes</span><span class="op">,</span> <span class="va">doubleslashes</span></span> +<span id="cb222-15"><a href="#cb222-15" aria-hidden="true" tabindex="-1"></a> <span class="op">)</span> <span class="op">/</span> <span class="kw">function</span><span class="op">(</span><span class="va">s</span><span class="op">)</span> <span class="cf">return</span> <span class="op">{</span><span class="st">"</span><span class="sc">\\</span><span class="st">st{"</span><span class="op">,</span> <span class="va">s</span><span class="op">,</span> <span class="st">"}"</span><span class="op">}</span> <span class="kw">end</span></span> +<span id="cb222-16"><a href="#cb222-16" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb222-17"><a href="#cb222-17" aria-hidden="true" tabindex="-1"></a> <span class="va">reader</span><span class="op">.</span>insert_pattern<span class="op">(</span><span class="st">"Inline after LinkAndEmph"</span><span class="op">,</span> <span class="va">read_strike_through</span><span class="op">,</span></span> +<span id="cb222-18"><a href="#cb222-18" aria-hidden="true" tabindex="-1"></a> <span class="st">"StrikeThrough"</span><span class="op">)</span></span> +<span id="cb222-19"><a href="#cb222-19" aria-hidden="true" tabindex="-1"></a> <span class="va">reader</span><span class="op">.</span>add_special_character<span class="op">(</span><span class="st">"/"</span><span class="op">)</span></span> +<span id="cb222-20"><a href="#cb222-20" aria-hidden="true" tabindex="-1"></a> <span class="kw">end</span></span> +<span id="cb222-21"><a href="#cb222-21" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span> +<span id="cb222-22"><a href="#cb222-22" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb222-23"><a href="#cb222-23" aria-hidden="true" tabindex="-1"></a><span class="cf">return</span> <span class="va">strike_through</span></span></code></pre></div> <p>Using a text editor, create also a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb195"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb195-1"><a href="#cb195-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb195-2"><a href="#cb195-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">soul</span>}</span> -<span id="cb195-3"><a href="#cb195-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[extension = strike-through.lua]{<span class="ex">markdown</span>}</span> -<span id="cb195-4"><a href="#cb195-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb195-5"><a href="#cb195-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb195-6"><a href="#cb195-6" aria-hidden="true" tabindex="-1"></a>This is //a lunar roving vehicle// strike-through text.</span> -<span id="cb195-7"><a href="#cb195-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb195-8"><a href="#cb195-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb223"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb223-1"><a href="#cb223-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb223-2"><a href="#cb223-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">soul</span>}</span> +<span id="cb223-3"><a href="#cb223-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[extension = strike-through.lua]{<span class="ex">markdown</span>}</span> +<span id="cb223-4"><a href="#cb223-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb223-5"><a href="#cb223-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb223-6"><a href="#cb223-6" aria-hidden="true" tabindex="-1"></a>This is //a lunar roving vehicle// strike-through text.</span> +<span id="cb223-7"><a href="#cb223-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb223-8"><a href="#cb223-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb196"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb196-1"><a href="#cb196-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb224"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb224-1"><a href="#cb224-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>This is <del>a lunar roving vehicle</del> strike-through text.</p> </blockquote> -<h4 data-number="2.2.1.20" id="option-fancylists"><span -class="header-section-number">2.2.1.20</span> Option +<h4 data-number="2.2.1.24" id="option-fancylists"><span +class="header-section-number">2.2.1.24</span> Option <code>fancyLists</code></h4> <dl> <dt><code>fancyLists</code> (default value: <code>false</code>)</dt> @@ -3129,10 +3703,10 @@ class="header-section-number">2.2.1.20</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#org-fancy-lists">fancy list syntax extension</a>:</p> -<div class="sourceCode" id="cb197"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb197-1"><a href="#cb197-1" aria-hidden="true" tabindex="-1"></a>a) first item</span> -<span id="cb197-2"><a href="#cb197-2" aria-hidden="true" tabindex="-1"></a>b) second item</span> -<span id="cb197-3"><a href="#cb197-3" aria-hidden="true" tabindex="-1"></a>c) third item</span></code></pre></div> +<div class="sourceCode" id="cb225"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb225-1"><a href="#cb225-1" aria-hidden="true" tabindex="-1"></a>a) first item</span> +<span id="cb225-2"><a href="#cb225-2" aria-hidden="true" tabindex="-1"></a>b) second item</span> +<span id="cb225-3"><a href="#cb225-3" aria-hidden="true" tabindex="-1"></a>c) third item</span></code></pre></div> </dd> </dl> </dd> @@ -3145,24 +3719,24 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb197-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-17"><span +<h5 class="unnumbered" id="latex-example-19"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb198"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb198-1"><a href="#cb198-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb198-2"><a href="#cb198-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</span> -<span id="cb198-3"><a href="#cb198-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fancyLists]{<span class="ex">markdown</span>}</span> -<span id="cb198-4"><a href="#cb198-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb198-5"><a href="#cb198-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb198-6"><a href="#cb198-6" aria-hidden="true" tabindex="-1"></a>a) first item</span> -<span id="cb198-7"><a href="#cb198-7" aria-hidden="true" tabindex="-1"></a>b) second item</span> -<span id="cb198-8"><a href="#cb198-8" aria-hidden="true" tabindex="-1"></a>c) third item</span> -<span id="cb198-9"><a href="#cb198-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb198-10"><a href="#cb198-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb226"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb226-1"><a href="#cb226-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb226-2"><a href="#cb226-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</span> +<span id="cb226-3"><a href="#cb226-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fancyLists]{<span class="ex">markdown</span>}</span> +<span id="cb226-4"><a href="#cb226-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb226-5"><a href="#cb226-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb226-6"><a href="#cb226-6" aria-hidden="true" tabindex="-1"></a>a) first item</span> +<span id="cb226-7"><a href="#cb226-7" aria-hidden="true" tabindex="-1"></a>b) second item</span> +<span id="cb226-8"><a href="#cb226-8" aria-hidden="true" tabindex="-1"></a>c) third item</span> +<span id="cb226-9"><a href="#cb226-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb226-10"><a href="#cb226-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb199"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb199-1"><a href="#cb199-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb227"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb227-1"><a href="#cb227-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -3172,23 +3746,23 @@ contain the following text:</p> <li>third item</li> </ol> </blockquote> -<h5 class="unnumbered" id="context-example-10">Con<span +<h5 class="unnumbered" id="context-example-12">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb200"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb200-1"><a href="#cb200-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb200-2"><a href="#cb200-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[fancyLists = yes]</span> -<span id="cb200-3"><a href="#cb200-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb200-4"><a href="#cb200-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb200-5"><a href="#cb200-5" aria-hidden="true" tabindex="-1"></a>a) first item</span> -<span id="cb200-6"><a href="#cb200-6" aria-hidden="true" tabindex="-1"></a>b) second item</span> -<span id="cb200-7"><a href="#cb200-7" aria-hidden="true" tabindex="-1"></a>c) third item</span> -<span id="cb200-8"><a href="#cb200-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb200-9"><a href="#cb200-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb228"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb228-1"><a href="#cb228-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb228-2"><a href="#cb228-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[fancyLists = yes]</span> +<span id="cb228-3"><a href="#cb228-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb228-4"><a href="#cb228-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb228-5"><a href="#cb228-5" aria-hidden="true" tabindex="-1"></a>a) first item</span> +<span id="cb228-6"><a href="#cb228-6" aria-hidden="true" tabindex="-1"></a>b) second item</span> +<span id="cb228-7"><a href="#cb228-7" aria-hidden="true" tabindex="-1"></a>c) third item</span> +<span id="cb228-8"><a href="#cb228-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb228-9"><a href="#cb228-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb201"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb201-1"><a href="#cb201-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb229"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb229-1"><a href="#cb229-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -3198,33 +3772,33 @@ contain the following text:</p> <li>third item</li> </ol> </blockquote> -<h4 data-number="2.2.1.21" id="option-fencedcode"><span -class="header-section-number">2.2.1.21</span> Option +<h4 data-number="2.2.1.25" id="option-fencedcode"><span +class="header-section-number">2.2.1.25</span> Option <code>fencedCode</code></h4> <dl> -<dt><code>fencedCode</code> (default value: <code>false</code>)</dt> +<dt><code>fencedCode</code> (default value: <code>true</code>)</dt> <dd> <dl> <dt>true</dt> <dd> <p>Enable the commonmark fenced code block extension:</p> -<div class="sourceCode" id="cb202"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb202-1"><a href="#cb202-1" aria-hidden="true" tabindex="-1"></a><span class="in">~~~ js</span></span> -<span id="cb202-2"><a href="#cb202-2" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> (a <span class="op">></span> <span class="dv">3</span>) {</span> -<span id="cb202-3"><a href="#cb202-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">moveShip</span>(<span class="dv">5</span> <span class="op">*</span> gravity<span class="op">,</span> DOWN)<span class="op">;</span></span> -<span id="cb202-4"><a href="#cb202-4" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb202-5"><a href="#cb202-5" aria-hidden="true" tabindex="-1"></a><span class="op">~~~~~~</span></span> -<span id="cb202-6"><a href="#cb202-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb202-7"><a href="#cb202-7" aria-hidden="true" tabindex="-1"></a> <span class="vs">``` html</span></span> -<span id="cb202-8"><a href="#cb202-8" aria-hidden="true" tabindex="-1"></a><span class="vs"> <pre></span></span> -<span id="cb202-9"><a href="#cb202-9" aria-hidden="true" tabindex="-1"></a><span class="vs"> <code></span></span> -<span id="cb202-10"><a href="#cb202-10" aria-hidden="true" tabindex="-1"></a><span class="vs"> // Some comments</span></span> -<span id="cb202-11"><a href="#cb202-11" aria-hidden="true" tabindex="-1"></a><span class="vs"> line 1 of code</span></span> -<span id="cb202-12"><a href="#cb202-12" aria-hidden="true" tabindex="-1"></a><span class="vs"> line 2 of code</span></span> -<span id="cb202-13"><a href="#cb202-13" aria-hidden="true" tabindex="-1"></a><span class="vs"> line 3 of code</span></span> -<span id="cb202-14"><a href="#cb202-14" aria-hidden="true" tabindex="-1"></a><span class="vs"> </code></span></span> -<span id="cb202-15"><a href="#cb202-15" aria-hidden="true" tabindex="-1"></a><span class="vs"> </pre></span></span> -<span id="cb202-16"><a href="#cb202-16" aria-hidden="true" tabindex="-1"></a><span class="vs"> ```</span></span></code></pre></div> +<div class="sourceCode" id="cb230"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb230-1"><a href="#cb230-1" aria-hidden="true" tabindex="-1"></a><span class="in">~~~ js</span></span> +<span id="cb230-2"><a href="#cb230-2" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> (a <span class="op">></span> <span class="dv">3</span>) {</span> +<span id="cb230-3"><a href="#cb230-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">moveShip</span>(<span class="dv">5</span> <span class="op">*</span> gravity<span class="op">,</span> DOWN)<span class="op">;</span></span> +<span id="cb230-4"><a href="#cb230-4" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb230-5"><a href="#cb230-5" aria-hidden="true" tabindex="-1"></a><span class="in">~~~~~~</span></span> +<span id="cb230-6"><a href="#cb230-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb230-7"><a href="#cb230-7" aria-hidden="true" tabindex="-1"></a> <span class="in">``` html</span></span> +<span id="cb230-8"><a href="#cb230-8" aria-hidden="true" tabindex="-1"></a> <span class="dt"><</span><span class="kw">pre</span><span class="dt">></span></span> +<span id="cb230-9"><a href="#cb230-9" aria-hidden="true" tabindex="-1"></a> <span class="dt"><</span><span class="kw">code</span><span class="dt">></span></span> +<span id="cb230-10"><a href="#cb230-10" aria-hidden="true" tabindex="-1"></a> // Some comments</span> +<span id="cb230-11"><a href="#cb230-11" aria-hidden="true" tabindex="-1"></a> line 1 of code</span> +<span id="cb230-12"><a href="#cb230-12" aria-hidden="true" tabindex="-1"></a> line 2 of code</span> +<span id="cb230-13"><a href="#cb230-13" aria-hidden="true" tabindex="-1"></a> line 3 of code</span> +<span id="cb230-14"><a href="#cb230-14" aria-hidden="true" tabindex="-1"></a> <span class="dt"></</span><span class="kw">code</span><span class="dt">></span></span> +<span id="cb230-15"><a href="#cb230-15" aria-hidden="true" tabindex="-1"></a> <span class="dt"></</span><span class="kw">pre</span><span class="dt">></span></span> +<span id="cb230-16"><a href="#cb230-16" aria-hidden="true" tabindex="-1"></a> <span class="in">```</span></span></code></pre></div> </dd> </dl> </dd> @@ -3237,106 +3811,105 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb202-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-18"><span +<h5 class="unnumbered" id="latex-example-20"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb203"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb203-1"><a href="#cb203-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb203-2"><a href="#cb203-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</span> -<span id="cb203-3"><a href="#cb203-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedCode]{<span class="ex">markdown</span>}</span> -<span id="cb203-4"><a href="#cb203-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb203-5"><a href="#cb203-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb203-6"><a href="#cb203-6" aria-hidden="true" tabindex="-1"></a>~~~ js</span> -<span id="cb203-7"><a href="#cb203-7" aria-hidden="true" tabindex="-1"></a>if (a > 3) {</span> -<span id="cb203-8"><a href="#cb203-8" aria-hidden="true" tabindex="-1"></a> moveShip(5 * gravity, DOWN);</span> -<span id="cb203-9"><a href="#cb203-9" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb203-10"><a href="#cb203-10" aria-hidden="true" tabindex="-1"></a>~~~~~~</span> -<span id="cb203-11"><a href="#cb203-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb203-12"><a href="#cb203-12" aria-hidden="true" tabindex="-1"></a> ``` html</span> -<span id="cb203-13"><a href="#cb203-13" aria-hidden="true" tabindex="-1"></a> <pre></span> -<span id="cb203-14"><a href="#cb203-14" aria-hidden="true" tabindex="-1"></a> <code></span> -<span id="cb203-15"><a href="#cb203-15" aria-hidden="true" tabindex="-1"></a> // Some comments</span> -<span id="cb203-16"><a href="#cb203-16" aria-hidden="true" tabindex="-1"></a> line 1 of code</span> -<span id="cb203-17"><a href="#cb203-17" aria-hidden="true" tabindex="-1"></a> line 2 of code</span> -<span id="cb203-18"><a href="#cb203-18" aria-hidden="true" tabindex="-1"></a> line 3 of code</span> -<span id="cb203-19"><a href="#cb203-19" aria-hidden="true" tabindex="-1"></a> </code></span> -<span id="cb203-20"><a href="#cb203-20" aria-hidden="true" tabindex="-1"></a> </pre></span> -<span id="cb203-21"><a href="#cb203-21" aria-hidden="true" tabindex="-1"></a> ```</span> -<span id="cb203-22"><a href="#cb203-22" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb203-23"><a href="#cb203-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb231"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb231-1"><a href="#cb231-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb231-2"><a href="#cb231-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</span> +<span id="cb231-3"><a href="#cb231-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb231-4"><a href="#cb231-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb231-5"><a href="#cb231-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb231-6"><a href="#cb231-6" aria-hidden="true" tabindex="-1"></a>~~~ js</span> +<span id="cb231-7"><a href="#cb231-7" aria-hidden="true" tabindex="-1"></a>if (a > 3) {</span> +<span id="cb231-8"><a href="#cb231-8" aria-hidden="true" tabindex="-1"></a> moveShip(5 * gravity, DOWN);</span> +<span id="cb231-9"><a href="#cb231-9" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb231-10"><a href="#cb231-10" aria-hidden="true" tabindex="-1"></a>~~~~~~</span> +<span id="cb231-11"><a href="#cb231-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb231-12"><a href="#cb231-12" aria-hidden="true" tabindex="-1"></a> ``` html</span> +<span id="cb231-13"><a href="#cb231-13" aria-hidden="true" tabindex="-1"></a> <pre></span> +<span id="cb231-14"><a href="#cb231-14" aria-hidden="true" tabindex="-1"></a> <code></span> +<span id="cb231-15"><a href="#cb231-15" aria-hidden="true" tabindex="-1"></a> // Some comments</span> +<span id="cb231-16"><a href="#cb231-16" aria-hidden="true" tabindex="-1"></a> line 1 of code</span> +<span id="cb231-17"><a href="#cb231-17" aria-hidden="true" tabindex="-1"></a> line 2 of code</span> +<span id="cb231-18"><a href="#cb231-18" aria-hidden="true" tabindex="-1"></a> line 3 of code</span> +<span id="cb231-19"><a href="#cb231-19" aria-hidden="true" tabindex="-1"></a> </code></span> +<span id="cb231-20"><a href="#cb231-20" aria-hidden="true" tabindex="-1"></a> </pre></span> +<span id="cb231-21"><a href="#cb231-21" aria-hidden="true" tabindex="-1"></a> ```</span> +<span id="cb231-22"><a href="#cb231-22" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb231-23"><a href="#cb231-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb204"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb204-1"><a href="#cb204-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb232"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb232-1"><a href="#cb232-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> -<div class="sourceCode" id="cb205"><pre -class="sourceCode js"><code class="sourceCode javascript"><span id="cb205-1"><a href="#cb205-1" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> (a <span class="op">></span> <span class="dv">3</span>) {</span> -<span id="cb205-2"><a href="#cb205-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">moveShip</span>(<span class="dv">5</span> <span class="op">*</span> gravity<span class="op">,</span> DOWN)<span class="op">;</span></span> -<span id="cb205-3"><a href="#cb205-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> -<div class="sourceCode" id="cb206"><pre -class="sourceCode html"><code class="sourceCode html"><span id="cb206-1"><a href="#cb206-1" aria-hidden="true" tabindex="-1"></a><span class="kw"><pre></span></span> -<span id="cb206-2"><a href="#cb206-2" aria-hidden="true" tabindex="-1"></a> <span class="kw"><code></span></span> -<span id="cb206-3"><a href="#cb206-3" aria-hidden="true" tabindex="-1"></a> // Some comments</span> -<span id="cb206-4"><a href="#cb206-4" aria-hidden="true" tabindex="-1"></a> line 1 of code</span> -<span id="cb206-5"><a href="#cb206-5" aria-hidden="true" tabindex="-1"></a> line 2 of code</span> -<span id="cb206-6"><a href="#cb206-6" aria-hidden="true" tabindex="-1"></a> line 3 of code</span> -<span id="cb206-7"><a href="#cb206-7" aria-hidden="true" tabindex="-1"></a> <span class="kw"></code></span></span> -<span id="cb206-8"><a href="#cb206-8" aria-hidden="true" tabindex="-1"></a><span class="kw"></pre></span></span></code></pre></div> +<div class="sourceCode" id="cb233"><pre +class="sourceCode js"><code class="sourceCode javascript"><span id="cb233-1"><a href="#cb233-1" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> (a <span class="op">></span> <span class="dv">3</span>) {</span> +<span id="cb233-2"><a href="#cb233-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">moveShip</span>(<span class="dv">5</span> <span class="op">*</span> gravity<span class="op">,</span> DOWN)<span class="op">;</span></span> +<span id="cb233-3"><a href="#cb233-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> +<div class="sourceCode" id="cb234"><pre +class="sourceCode html"><code class="sourceCode html"><span id="cb234-1"><a href="#cb234-1" aria-hidden="true" tabindex="-1"></a><span class="dt"><</span><span class="kw">pre</span><span class="dt">></span></span> +<span id="cb234-2"><a href="#cb234-2" aria-hidden="true" tabindex="-1"></a> <span class="dt"><</span><span class="kw">code</span><span class="dt">></span></span> +<span id="cb234-3"><a href="#cb234-3" aria-hidden="true" tabindex="-1"></a> // Some comments</span> +<span id="cb234-4"><a href="#cb234-4" aria-hidden="true" tabindex="-1"></a> line 1 of code</span> +<span id="cb234-5"><a href="#cb234-5" aria-hidden="true" tabindex="-1"></a> line 2 of code</span> +<span id="cb234-6"><a href="#cb234-6" aria-hidden="true" tabindex="-1"></a> line 3 of code</span> +<span id="cb234-7"><a href="#cb234-7" aria-hidden="true" tabindex="-1"></a> <span class="dt"></</span><span class="kw">code</span><span class="dt">></span></span> +<span id="cb234-8"><a href="#cb234-8" aria-hidden="true" tabindex="-1"></a><span class="dt"></</span><span class="kw">pre</span><span class="dt">></span></span></code></pre></div> </blockquote> -<h5 class="unnumbered" id="context-example-11">Con<span +<h5 class="unnumbered" id="context-example-13">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb207"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb207-1"><a href="#cb207-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb207-2"><a href="#cb207-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[fencedCode = yes]</span> -<span id="cb207-3"><a href="#cb207-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\definetyping</span> [js]</span> -<span id="cb207-4"><a href="#cb207-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\definetyping</span> [html]</span> -<span id="cb207-5"><a href="#cb207-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\setuptyping</span> [html] [option=XML]</span> -<span id="cb207-6"><a href="#cb207-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb207-7"><a href="#cb207-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb207-8"><a href="#cb207-8" aria-hidden="true" tabindex="-1"></a>~~~ js</span> -<span id="cb207-9"><a href="#cb207-9" aria-hidden="true" tabindex="-1"></a>if (a > 3) {</span> -<span id="cb207-10"><a href="#cb207-10" aria-hidden="true" tabindex="-1"></a> moveShip(5 * gravity, DOWN);</span> -<span id="cb207-11"><a href="#cb207-11" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb207-12"><a href="#cb207-12" aria-hidden="true" tabindex="-1"></a>~~~~~~</span> -<span id="cb207-13"><a href="#cb207-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb207-14"><a href="#cb207-14" aria-hidden="true" tabindex="-1"></a> ``` html</span> -<span id="cb207-15"><a href="#cb207-15" aria-hidden="true" tabindex="-1"></a> <pre></span> -<span id="cb207-16"><a href="#cb207-16" aria-hidden="true" tabindex="-1"></a> <code></span> -<span id="cb207-17"><a href="#cb207-17" aria-hidden="true" tabindex="-1"></a> // Some comments</span> -<span id="cb207-18"><a href="#cb207-18" aria-hidden="true" tabindex="-1"></a> line 1 of code</span> -<span id="cb207-19"><a href="#cb207-19" aria-hidden="true" tabindex="-1"></a> line 2 of code</span> -<span id="cb207-20"><a href="#cb207-20" aria-hidden="true" tabindex="-1"></a> line 3 of code</span> -<span id="cb207-21"><a href="#cb207-21" aria-hidden="true" tabindex="-1"></a> </code></span> -<span id="cb207-22"><a href="#cb207-22" aria-hidden="true" tabindex="-1"></a> </pre></span> -<span id="cb207-23"><a href="#cb207-23" aria-hidden="true" tabindex="-1"></a> ```</span> -<span id="cb207-24"><a href="#cb207-24" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb207-25"><a href="#cb207-25" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb235"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb235-1"><a href="#cb235-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb235-2"><a href="#cb235-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\definetyping</span> [js]</span> +<span id="cb235-3"><a href="#cb235-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\definetyping</span> [html]</span> +<span id="cb235-4"><a href="#cb235-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\setuptyping</span> [html] [option=XML]</span> +<span id="cb235-5"><a href="#cb235-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb235-6"><a href="#cb235-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb235-7"><a href="#cb235-7" aria-hidden="true" tabindex="-1"></a>~~~ js</span> +<span id="cb235-8"><a href="#cb235-8" aria-hidden="true" tabindex="-1"></a>if (a > 3) {</span> +<span id="cb235-9"><a href="#cb235-9" aria-hidden="true" tabindex="-1"></a> moveShip(5 * gravity, DOWN);</span> +<span id="cb235-10"><a href="#cb235-10" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb235-11"><a href="#cb235-11" aria-hidden="true" tabindex="-1"></a>~~~~~~</span> +<span id="cb235-12"><a href="#cb235-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb235-13"><a href="#cb235-13" aria-hidden="true" tabindex="-1"></a> ``` html</span> +<span id="cb235-14"><a href="#cb235-14" aria-hidden="true" tabindex="-1"></a> <pre></span> +<span id="cb235-15"><a href="#cb235-15" aria-hidden="true" tabindex="-1"></a> <code></span> +<span id="cb235-16"><a href="#cb235-16" aria-hidden="true" tabindex="-1"></a> // Some comments</span> +<span id="cb235-17"><a href="#cb235-17" aria-hidden="true" tabindex="-1"></a> line 1 of code</span> +<span id="cb235-18"><a href="#cb235-18" aria-hidden="true" tabindex="-1"></a> line 2 of code</span> +<span id="cb235-19"><a href="#cb235-19" aria-hidden="true" tabindex="-1"></a> line 3 of code</span> +<span id="cb235-20"><a href="#cb235-20" aria-hidden="true" tabindex="-1"></a> </code></span> +<span id="cb235-21"><a href="#cb235-21" aria-hidden="true" tabindex="-1"></a> </pre></span> +<span id="cb235-22"><a href="#cb235-22" aria-hidden="true" tabindex="-1"></a> ```</span> +<span id="cb235-23"><a href="#cb235-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb235-24"><a href="#cb235-24" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb208"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb208-1"><a href="#cb208-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb236"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb236-1"><a href="#cb236-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> -<div class="sourceCode" id="cb209"><pre -class="sourceCode js"><code class="sourceCode javascript"><span id="cb209-1"><a href="#cb209-1" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> (a <span class="op">></span> <span class="dv">3</span>) {</span> -<span id="cb209-2"><a href="#cb209-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">moveShip</span>(<span class="dv">5</span> <span class="op">*</span> gravity<span class="op">,</span> DOWN)<span class="op">;</span></span> -<span id="cb209-3"><a href="#cb209-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> -<div class="sourceCode" id="cb210"><pre -class="sourceCode html"><code class="sourceCode html"><span id="cb210-1"><a href="#cb210-1" aria-hidden="true" tabindex="-1"></a><span class="kw"><pre></span></span> -<span id="cb210-2"><a href="#cb210-2" aria-hidden="true" tabindex="-1"></a> <span class="kw"><code></span></span> -<span id="cb210-3"><a href="#cb210-3" aria-hidden="true" tabindex="-1"></a> // Some comments</span> -<span id="cb210-4"><a href="#cb210-4" aria-hidden="true" tabindex="-1"></a> line 1 of code</span> -<span id="cb210-5"><a href="#cb210-5" aria-hidden="true" tabindex="-1"></a> line 2 of code</span> -<span id="cb210-6"><a href="#cb210-6" aria-hidden="true" tabindex="-1"></a> line 3 of code</span> -<span id="cb210-7"><a href="#cb210-7" aria-hidden="true" tabindex="-1"></a> <span class="kw"></code></span></span> -<span id="cb210-8"><a href="#cb210-8" aria-hidden="true" tabindex="-1"></a><span class="kw"></pre></span></span></code></pre></div> -</blockquote> -<h4 data-number="2.2.1.22" id="option-fencedcodeattributes"><span -class="header-section-number">2.2.1.22</span> Option +<div class="sourceCode" id="cb237"><pre +class="sourceCode js"><code class="sourceCode javascript"><span id="cb237-1"><a href="#cb237-1" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> (a <span class="op">></span> <span class="dv">3</span>) {</span> +<span id="cb237-2"><a href="#cb237-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">moveShip</span>(<span class="dv">5</span> <span class="op">*</span> gravity<span class="op">,</span> DOWN)<span class="op">;</span></span> +<span id="cb237-3"><a href="#cb237-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> +<div class="sourceCode" id="cb238"><pre +class="sourceCode html"><code class="sourceCode html"><span id="cb238-1"><a href="#cb238-1" aria-hidden="true" tabindex="-1"></a><span class="dt"><</span><span class="kw">pre</span><span class="dt">></span></span> +<span id="cb238-2"><a href="#cb238-2" aria-hidden="true" tabindex="-1"></a> <span class="dt"><</span><span class="kw">code</span><span class="dt">></span></span> +<span id="cb238-3"><a href="#cb238-3" aria-hidden="true" tabindex="-1"></a> // Some comments</span> +<span id="cb238-4"><a href="#cb238-4" aria-hidden="true" tabindex="-1"></a> line 1 of code</span> +<span id="cb238-5"><a href="#cb238-5" aria-hidden="true" tabindex="-1"></a> line 2 of code</span> +<span id="cb238-6"><a href="#cb238-6" aria-hidden="true" tabindex="-1"></a> line 3 of code</span> +<span id="cb238-7"><a href="#cb238-7" aria-hidden="true" tabindex="-1"></a> <span class="dt"></</span><span class="kw">code</span><span class="dt">></span></span> +<span id="cb238-8"><a href="#cb238-8" aria-hidden="true" tabindex="-1"></a><span class="dt"></</span><span class="kw">pre</span><span class="dt">></span></span></code></pre></div> +</blockquote> +<h4 data-number="2.2.1.26" id="option-fencedcodeattributes"><span +class="header-section-number">2.2.1.26</span> Option <code>fencedCodeAttributes</code></h4> <dl> <dt><code>fencedCodeAttributes</code> (default value: @@ -3348,12 +3921,12 @@ class="header-section-number">2.2.1.22</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-fenced_code_attributes">fenced code attribute syntax extension</a>:</p> -<div class="sourceCode" id="cb211"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb211-1"><a href="#cb211-1" aria-hidden="true" tabindex="-1"></a><span class="in">~~~~ {#mycode .haskell .numberLines startFrom=100}</span></span> -<span id="cb211-2"><a href="#cb211-2" aria-hidden="true" tabindex="-1"></a><span class="in">qsort [] = []</span></span> -<span id="cb211-3"><a href="#cb211-3" aria-hidden="true" tabindex="-1"></a><span class="in">qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++</span></span> -<span id="cb211-4"><a href="#cb211-4" aria-hidden="true" tabindex="-1"></a><span class="in"> qsort (filter (>= x) xs)</span></span> -<span id="cb211-5"><a href="#cb211-5" aria-hidden="true" tabindex="-1"></a><span class="in">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</span></span></code></pre></div> +<div class="sourceCode" id="cb239"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb239-1"><a href="#cb239-1" aria-hidden="true" tabindex="-1"></a><span class="in">~~~~ {#mycode .haskell .numberLines startFrom=100}</span></span> +<span id="cb239-2"><a href="#cb239-2" aria-hidden="true" tabindex="-1"></a><span class="in">qsort [] = []</span></span> +<span id="cb239-3"><a href="#cb239-3" aria-hidden="true" tabindex="-1"></a><span class="in">qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++</span></span> +<span id="cb239-4"><a href="#cb239-4" aria-hidden="true" tabindex="-1"></a><span class="in"> qsort (filter (>= x) xs)</span></span> +<span id="cb239-5"><a href="#cb239-5" aria-hidden="true" tabindex="-1"></a><span class="in">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</span></span></code></pre></div> </dd> </dl> </dd> @@ -3366,52 +3939,54 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb211-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-19"><span +<h5 class="unnumbered" id="latex-example-21"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb212"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb212-1"><a href="#cb212-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb212-2"><a href="#cb212-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedCode,</span> -<span id="cb212-3"><a href="#cb212-3" aria-hidden="true" tabindex="-1"></a> fencedCodeAttributes]{<span class="ex">markdown</span>}</span> -<span id="cb212-4"><a href="#cb212-4" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</span> -<span id="cb212-5"><a href="#cb212-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb212-6"><a href="#cb212-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb212-7"><a href="#cb212-7" aria-hidden="true" tabindex="-1"></a> fencedCodeAttributeContextBegin = {<span class="co">%</span></span> -<span id="cb212-8"><a href="#cb212-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\begingroup</span></span> -<span id="cb212-9"><a href="#cb212-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{</span> -<span id="cb212-10"><a href="#cb212-10" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb212-11"><a href="#cb212-11" aria-hidden="true" tabindex="-1"></a> attributeKeyValue = {<span class="co">%</span></span> -<span id="cb212-12"><a href="#cb212-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\setminted</span>{{#1} = {#2}}<span class="co">%</span></span> -<span id="cb212-13"><a href="#cb212-13" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb212-14"><a href="#cb212-14" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb212-15"><a href="#cb212-15" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb212-16"><a href="#cb212-16" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb212-17"><a href="#cb212-17" aria-hidden="true" tabindex="-1"></a> fencedCodeAttributeContextEnd = {<span class="co">%</span></span> -<span id="cb212-18"><a href="#cb212-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">\endgroup</span></span> -<span id="cb212-19"><a href="#cb212-19" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb212-20"><a href="#cb212-20" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb212-21"><a href="#cb212-21" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb212-22"><a href="#cb212-22" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb212-23"><a href="#cb212-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb212-24"><a href="#cb212-24" aria-hidden="true" tabindex="-1"></a>~~~ js {linenos=true}</span> -<span id="cb212-25"><a href="#cb212-25" aria-hidden="true" tabindex="-1"></a>if (a > 3) {</span> -<span id="cb212-26"><a href="#cb212-26" aria-hidden="true" tabindex="-1"></a> moveShip(5 * gravity, DOWN);</span> -<span id="cb212-27"><a href="#cb212-27" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb212-28"><a href="#cb212-28" aria-hidden="true" tabindex="-1"></a>~~~~~~</span> -<span id="cb212-29"><a href="#cb212-29" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb212-30"><a href="#cb212-30" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb213"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb213-1"><a href="#cb213-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> -<p>A PDF document named <code>document.pdf</code> should be produced and -contain the following text:</p> -<blockquote> -<p>``` js {.linenos} 1. if (a > 3) { 2. moveShip(5 * gravity, DOWN); -3. } ``````</p> -</blockquote> -<h4 data-number="2.2.1.23" id="fenced-divs"><span -class="header-section-number">2.2.1.23</span> Option +<div class="sourceCode" id="cb240"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb240-1"><a href="#cb240-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb240-2"><a href="#cb240-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedCode,</span> +<span id="cb240-3"><a href="#cb240-3" aria-hidden="true" tabindex="-1"></a> fencedCodeAttributes]{<span class="ex">markdown</span>}</span> +<span id="cb240-4"><a href="#cb240-4" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</span> +<span id="cb240-5"><a href="#cb240-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb240-6"><a href="#cb240-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb240-7"><a href="#cb240-7" aria-hidden="true" tabindex="-1"></a> fencedCodeAttributeContextBegin = {<span class="co">%</span></span> +<span id="cb240-8"><a href="#cb240-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\begingroup</span></span> +<span id="cb240-9"><a href="#cb240-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{</span> +<span id="cb240-10"><a href="#cb240-10" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb240-11"><a href="#cb240-11" aria-hidden="true" tabindex="-1"></a> attributeKeyValue = {<span class="co">%</span></span> +<span id="cb240-12"><a href="#cb240-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\setminted</span>{{#1} = {#2}}<span class="co">%</span></span> +<span id="cb240-13"><a href="#cb240-13" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb240-14"><a href="#cb240-14" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb240-15"><a href="#cb240-15" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb240-16"><a href="#cb240-16" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb240-17"><a href="#cb240-17" aria-hidden="true" tabindex="-1"></a> fencedCodeAttributeContextEnd = {<span class="co">%</span></span> +<span id="cb240-18"><a href="#cb240-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">\endgroup</span></span> +<span id="cb240-19"><a href="#cb240-19" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb240-20"><a href="#cb240-20" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb240-21"><a href="#cb240-21" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb240-22"><a href="#cb240-22" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb240-23"><a href="#cb240-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb240-24"><a href="#cb240-24" aria-hidden="true" tabindex="-1"></a>~~~ js {linenos=true}</span> +<span id="cb240-25"><a href="#cb240-25" aria-hidden="true" tabindex="-1"></a>if (a > 3) {</span> +<span id="cb240-26"><a href="#cb240-26" aria-hidden="true" tabindex="-1"></a> moveShip(5 * gravity, DOWN);</span> +<span id="cb240-27"><a href="#cb240-27" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb240-28"><a href="#cb240-28" aria-hidden="true" tabindex="-1"></a>~~~~~~</span> +<span id="cb240-29"><a href="#cb240-29" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb240-30"><a href="#cb240-30" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb241"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb241-1"><a href="#cb241-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<div class="sourceCode" id="cb242"><pre +class="sourceCode js linenos"><code class="sourceCode javascript"><span id="cb242-1"><a href="#cb242-1" aria-hidden="true" tabindex="-1"></a><span class="fl">1.</span> <span class="cf">if</span> (a <span class="op">></span> <span class="dv">3</span>) {</span> +<span id="cb242-2"><a href="#cb242-2" aria-hidden="true" tabindex="-1"></a><span class="fl">2.</span> <span class="fu">moveShip</span>(<span class="dv">5</span> <span class="op">*</span> gravity<span class="op">,</span> DOWN)<span class="op">;</span></span> +<span id="cb242-3"><a href="#cb242-3" aria-hidden="true" tabindex="-1"></a><span class="fl">3.</span> }</span></code></pre></div> +</blockquote> +<h4 data-number="2.2.1.27" id="fenced-divs"><span +class="header-section-number">2.2.1.27</span> Option <code>fencedDivs</code></h4> <dl> <dt><code>fencedDivs</code> (default value: <code>false</code>)</dt> @@ -3422,12 +3997,12 @@ class="header-section-number">2.2.1.23</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-fenced_divs">fenced div syntax extension</a>:</p> -<div class="sourceCode" id="cb214"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb214-1"><a href="#cb214-1" aria-hidden="true" tabindex="-1"></a>::::: {#special .sidebar}</span> -<span id="cb214-2"><a href="#cb214-2" aria-hidden="true" tabindex="-1"></a>Here is a paragraph.</span> -<span id="cb214-3"><a href="#cb214-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb214-4"><a href="#cb214-4" aria-hidden="true" tabindex="-1"></a>And another.</span> -<span id="cb214-5"><a href="#cb214-5" aria-hidden="true" tabindex="-1"></a>:::::</span></code></pre></div> +<div class="sourceCode" id="cb243"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb243-1"><a href="#cb243-1" aria-hidden="true" tabindex="-1"></a>::::: {#special .sidebar}</span> +<span id="cb243-2"><a href="#cb243-2" aria-hidden="true" tabindex="-1"></a>Here is a paragraph.</span> +<span id="cb243-3"><a href="#cb243-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb243-4"><a href="#cb243-4" aria-hidden="true" tabindex="-1"></a>And another.</span> +<span id="cb243-5"><a href="#cb243-5" aria-hidden="true" tabindex="-1"></a>:::::</span></code></pre></div> </dd> </dl> </dd> @@ -3440,34 +4015,34 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb214-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-20"><span +<h5 class="unnumbered" id="latex-example-22"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb215"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb215-1"><a href="#cb215-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb215-2"><a href="#cb215-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedDivs]{<span class="ex">markdown</span>}</span> -<span id="cb215-3"><a href="#cb215-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb215-4"><a href="#cb215-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}{slice=special}</span> -<span id="cb215-5"><a href="#cb215-5" aria-hidden="true" tabindex="-1"></a>Here is a regular paragraph.</span> -<span id="cb215-6"><a href="#cb215-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb215-7"><a href="#cb215-7" aria-hidden="true" tabindex="-1"></a>::::: {#special}</span> -<span id="cb215-8"><a href="#cb215-8" aria-hidden="true" tabindex="-1"></a>Here is a special paragraph.</span> -<span id="cb215-9"><a href="#cb215-9" aria-hidden="true" tabindex="-1"></a>:::::</span> -<span id="cb215-10"><a href="#cb215-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb215-11"><a href="#cb215-11" aria-hidden="true" tabindex="-1"></a>And here is another regular paragraph.</span> -<span id="cb215-12"><a href="#cb215-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb215-13"><a href="#cb215-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb244"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb244-1"><a href="#cb244-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb244-2"><a href="#cb244-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedDivs]{<span class="ex">markdown</span>}</span> +<span id="cb244-3"><a href="#cb244-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb244-4"><a href="#cb244-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}{slice=special}</span> +<span id="cb244-5"><a href="#cb244-5" aria-hidden="true" tabindex="-1"></a>Here is a regular paragraph.</span> +<span id="cb244-6"><a href="#cb244-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb244-7"><a href="#cb244-7" aria-hidden="true" tabindex="-1"></a>::::: {#special}</span> +<span id="cb244-8"><a href="#cb244-8" aria-hidden="true" tabindex="-1"></a>Here is a special paragraph.</span> +<span id="cb244-9"><a href="#cb244-9" aria-hidden="true" tabindex="-1"></a>:::::</span> +<span id="cb244-10"><a href="#cb244-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb244-11"><a href="#cb244-11" aria-hidden="true" tabindex="-1"></a>And here is another regular paragraph.</span> +<span id="cb244-12"><a href="#cb244-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb244-13"><a href="#cb244-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb216"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb216-1"><a href="#cb216-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb245"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb245-1"><a href="#cb245-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Here is a special paragraph.</p> </blockquote> -<h4 data-number="2.2.1.24" id="option-finalizecache"><span -class="header-section-number">2.2.1.24</span> Option +<h4 data-number="2.2.1.28" id="option-finalizecache"><span +class="header-section-number">2.2.1.28</span> Option <code>finalizeCache</code></h4> <dl> <dt><code>finalizeCache</code> (default value: <code>false</code>)</dt> @@ -3486,35 +4061,35 @@ further changes in the order and the content of markdown documents will not be reflected.</p> </dd> </dl> -<h5 class="unnumbered" id="plain-tex-example-7">Plain <span +<h5 class="unnumbered" id="plain-tex-example-9">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb217"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb217-1"><a href="#cb217-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb217-2"><a href="#cb217-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFinalizeCache</span>{true}</span> -<span id="cb217-3"><a href="#cb217-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb217-4"><a href="#cb217-4" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb217-5"><a href="#cb217-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb217-6"><a href="#cb217-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb246"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb246-1"><a href="#cb246-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb246-2"><a href="#cb246-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFinalizeCache</span>{true}</span> +<span id="cb246-3"><a href="#cb246-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb246-4"><a href="#cb246-4" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> +<span id="cb246-5"><a href="#cb246-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb246-6"><a href="#cb246-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb218"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb218-1"><a href="#cb218-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb247"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb247-1"><a href="#cb247-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” A frozen cache will also be produced as we requested using the <code>finalizeCache</code> option.</p> <p>Next, change the content of <code>document.tex</code> as follows:</p> -<div class="sourceCode" id="cb219"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb219-1"><a href="#cb219-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb219-2"><a href="#cb219-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFrozenCache</span>{true}</span> -<span id="cb219-3"><a href="#cb219-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb219-4"><a href="#cb219-4" aria-hidden="true" tabindex="-1"></a>Hi *world*!</span> -<span id="cb219-5"><a href="#cb219-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb219-6"><a href="#cb219-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb248"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb248-1"><a href="#cb248-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb248-2"><a href="#cb248-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFrozenCache</span>{true}</span> +<span id="cb248-3"><a href="#cb248-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb248-4"><a href="#cb248-4" aria-hidden="true" tabindex="-1"></a>Hi *world*!</span> +<span id="cb248-5"><a href="#cb248-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb248-6"><a href="#cb248-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Last, invoke pdfTeX without shell access from the terminal:</p> -<div class="sourceCode" id="cb220"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb220-1"><a href="#cb220-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdftex</span> <span class="at">-no-shell-escape</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb249"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb249-1"><a href="#cb249-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdftex</span> <span class="at">-no-shell-escape</span> document.tex</span></code></pre></div> <p>A new PDF document named <code>document.pdf</code> should be produced and contain the same text “Hello <em>world</em>!” Since we used the contents of the frozen cache using the @@ -3522,37 +4097,37 @@ contents of the frozen cache using the the document without accessing the shell or invoking Lua, but the change in the content of the markdown document from “Hello <em>world</em>!” to “Hi <em>world</em>!” was not reflected.</p> -<h5 class="unnumbered" id="latex-example-21"><span +<h5 class="unnumbered" id="latex-example-23"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb221"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb221-1"><a href="#cb221-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>[finalizecache]{<span class="ex">article</span>}</span> -<span id="cb221-2"><a href="#cb221-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb221-3"><a href="#cb221-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb221-4"><a href="#cb221-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb221-5"><a href="#cb221-5" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb221-6"><a href="#cb221-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb221-7"><a href="#cb221-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb250"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb250-1"><a href="#cb250-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>[finalizecache]{<span class="ex">article</span>}</span> +<span id="cb250-2"><a href="#cb250-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb250-3"><a href="#cb250-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb250-4"><a href="#cb250-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb250-5"><a href="#cb250-5" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> +<span id="cb250-6"><a href="#cb250-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb250-7"><a href="#cb250-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb222"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb222-1"><a href="#cb222-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb251"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb251-1"><a href="#cb251-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” A frozen cache will also be produced as we requested using the <code>finalizecache</code> option.</p> <p>Next, change the content of <code>document.tex</code> as follows:</p> -<div class="sourceCode" id="cb223"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb223-1"><a href="#cb223-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>[frozencache]{<span class="ex">article</span>}</span> -<span id="cb223-2"><a href="#cb223-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb223-3"><a href="#cb223-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb223-4"><a href="#cb223-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb223-5"><a href="#cb223-5" aria-hidden="true" tabindex="-1"></a>Hi *world*!</span> -<span id="cb223-6"><a href="#cb223-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb223-7"><a href="#cb223-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb252"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb252-1"><a href="#cb252-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>[frozencache]{<span class="ex">article</span>}</span> +<span id="cb252-2"><a href="#cb252-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb252-3"><a href="#cb252-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb252-4"><a href="#cb252-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb252-5"><a href="#cb252-5" aria-hidden="true" tabindex="-1"></a>Hi *world*!</span> +<span id="cb252-6"><a href="#cb252-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb252-7"><a href="#cb252-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Last, invoke pdfTeX without shell access from the terminal:</p> -<div class="sourceCode" id="cb224"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb224-1"><a href="#cb224-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdflatex</span> <span class="at">-no-shell-escape</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb253"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb253-1"><a href="#cb253-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdflatex</span> <span class="at">-no-shell-escape</span> document.tex</span></code></pre></div> <p>A new PDF document named <code>document.pdf</code> should be produced and contain the same text “Hello <em>world</em>!” Since we used the contents of the frozen cache using the @@ -3560,37 +4135,37 @@ contents of the frozen cache using the the document without accessing the shell or invoking Lua, but the change in the content of the markdown document from “Hello <em>world</em>!” to “Hi <em>world</em>!” was not reflected.</p> -<h5 class="unnumbered" id="context-example-12">Con<span +<h5 class="unnumbered" id="context-example-14">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb225"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb225-1"><a href="#cb225-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb225-2"><a href="#cb225-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[finalizeCache = yes]</span> -<span id="cb225-3"><a href="#cb225-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb225-4"><a href="#cb225-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb225-5"><a href="#cb225-5" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb225-6"><a href="#cb225-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb225-7"><a href="#cb225-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb254"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb254-1"><a href="#cb254-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb254-2"><a href="#cb254-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[finalizeCache = yes]</span> +<span id="cb254-3"><a href="#cb254-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb254-4"><a href="#cb254-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb254-5"><a href="#cb254-5" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> +<span id="cb254-6"><a href="#cb254-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb254-7"><a href="#cb254-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb226"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb226-1"><a href="#cb226-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb255"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb255-1"><a href="#cb255-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” A frozen cache will also be produced in the <code>cache.tex</code> output file as we requested using the <code>finalizeCache</code> option.</p> <p>Next, change the content of <code>document.tex</code> as follows:</p> -<div class="sourceCode" id="cb227"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb227-1"><a href="#cb227-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb227-2"><a href="#cb227-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[frozenCache = yes]</span> -<span id="cb227-3"><a href="#cb227-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb227-4"><a href="#cb227-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb227-5"><a href="#cb227-5" aria-hidden="true" tabindex="-1"></a>Hi *world*!</span> -<span id="cb227-6"><a href="#cb227-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb227-7"><a href="#cb227-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> -<p>Last, invoke pdfTeX without shell access from the terminal:</p> -<div class="sourceCode" id="cb228"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb228-1"><a href="#cb228-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb256"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb256-1"><a href="#cb256-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb256-2"><a href="#cb256-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[frozenCache = yes]</span> +<span id="cb256-3"><a href="#cb256-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb256-4"><a href="#cb256-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb256-5"><a href="#cb256-5" aria-hidden="true" tabindex="-1"></a>Hi *world*!</span> +<span id="cb256-6"><a href="#cb256-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb256-7"><a href="#cb256-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<p>Last, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb257"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb257-1"><a href="#cb257-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A new PDF document named <code>document.pdf</code> should be produced and contain the same text “Hello <em>world</em>!” Since we used the contents of the frozen cache using the @@ -3598,8 +4173,8 @@ contents of the frozen cache using the the document without accessing the shell or invoking Lua, but the change in the content of the markdown document from “Hello <em>world</em>!” to “Hi <em>world</em>!” was not reflected.</p> -<h4 data-number="2.2.1.25" id="option-frozencachecounter"><span -class="header-section-number">2.2.1.25</span> Option +<h4 data-number="2.2.1.29" id="option-frozencachecounter"><span +class="header-section-number">2.2.1.29</span> Option <code>frozenCacheCounter</code></h4> <dl> <dt><code>frozenCacheCounter</code> (default value: <code>0</code>)</dt> @@ -3615,86 +4190,60 @@ class="tex">T<sub>e</sub>X</span> macro markdown document number ⟨<em>number</em>⟩.</p> </dd> </dl> -<h5 class="unnumbered" id="lua-module-example-8">Lua Module Example</h5> +<h5 class="unnumbered" id="lua-module-example-9">Lua Module Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb229"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb229-1"><a href="#cb229-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb229-2"><a href="#cb229-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb229-3"><a href="#cb229-3" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb229-4"><a href="#cb229-4" aria-hidden="true" tabindex="-1"></a> local firstConvert = markdown.new({finalizeCache = true, frozenCacheCounter = 0})</span> -<span id="cb229-5"><a href="#cb229-5" aria-hidden="true" tabindex="-1"></a> local firstInput = "Hello"</span> -<span id="cb229-6"><a href="#cb229-6" aria-hidden="true" tabindex="-1"></a> local secondConvert = markdown.new({finalizeCache = true, frozenCacheCounter = 1})</span> -<span id="cb229-7"><a href="#cb229-7" aria-hidden="true" tabindex="-1"></a> local secondInput = "*world*!"</span> -<span id="cb229-8"><a href="#cb229-8" aria-hidden="true" tabindex="-1"></a> tex.sprint(firstConvert(firstInput) .. [[ ]] .. secondConvert(secondInput)) }</span> -<span id="cb229-9"><a href="#cb229-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb258"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb258-1"><a href="#cb258-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb258-2"><a href="#cb258-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb258-3"><a href="#cb258-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb258-4"><a href="#cb258-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb258-5"><a href="#cb258-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb258-6"><a href="#cb258-6" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb258-7"><a href="#cb258-7" aria-hidden="true" tabindex="-1"></a> local firstConvert = markdown.new({finalizeCache = true, frozenCacheCounter = 0})</span> +<span id="cb258-8"><a href="#cb258-8" aria-hidden="true" tabindex="-1"></a> local firstInput = "Hello"</span> +<span id="cb258-9"><a href="#cb258-9" aria-hidden="true" tabindex="-1"></a> local secondConvert = markdown.new({finalizeCache = true, frozenCacheCounter = 1})</span> +<span id="cb258-10"><a href="#cb258-10" aria-hidden="true" tabindex="-1"></a> local secondInput = "*world*!"</span> +<span id="cb258-11"><a href="#cb258-11" aria-hidden="true" tabindex="-1"></a> tex.sprint(firstConvert(firstInput) .. [[ ]] .. secondConvert(secondInput)) }</span> +<span id="cb258-12"><a href="#cb258-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb258-13"><a href="#cb258-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Then, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb230"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb230-1"><a href="#cb230-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb259"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb259-1"><a href="#cb259-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!” A frozen cache with two entries will also be produced as we requested using the <code>frozenCacheCounter</code> option.</p> -<h4 data-number="2.2.1.26" id="option-hardlinebreaks"><span -class="header-section-number">2.2.1.26</span> Option -<code>hardLineBreaks</code></h4> +<h4 data-number="2.2.1.30" id="option-gfmautoidentifiers"><span +class="header-section-number">2.2.1.30</span> Option +<code>gfmAutoIdentifiers</code></h4> <dl> -<dt><code>hardLineBreaks</code> (default value: <code>false</code>)</dt> +<dt><code>gfmAutoIdentifiers</code> (default value: +<code>false</code>)</dt> <dd> <dl> <dt>true</dt> <dd> -<p>Interpret all newlines within a paragraph as hard line breaks instead -of spaces.</p> -</dd> -</dl> +<p>Enable the Pandoc <a +href="https://pandoc.org/MANUAL.html#extension-gfm_auto_identifiers">GitHub-flavored +auto identifiers syntax extension</a>:</p> +<div class="sourceCode" id="cb260"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb260-1"><a href="#cb260-1" aria-hidden="true" tabindex="-1"></a>The following heading received the identifier <span class="in">`123-sesame-street`</span>:</span> +<span id="cb260-2"><a href="#cb260-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb260-3"><a href="#cb260-3" aria-hidden="true" tabindex="-1"></a><span class="fu"># 123 Sesame Street</span></span></code></pre></div> </dd> -<dd> -<dl> <dt>false</dt> <dd> -<p>Interpret all newlines within a paragraph as spaces.</p> +<p>Disable the Pandoc GitHub-flavored auto identifiers syntax +extension.</p> </dd> </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-22"><span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> -<p>Using a text editor, create a text document named -<code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb231"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb231-1"><a href="#cb231-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb231-2"><a href="#cb231-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb231-3"><a href="#cb231-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb231-4"><a href="#cb231-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb231-5"><a href="#cb231-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb231-6"><a href="#cb231-6" aria-hidden="true" tabindex="-1"></a>'Twas brillig, and the slithy toves</span> -<span id="cb231-7"><a href="#cb231-7" aria-hidden="true" tabindex="-1"></a>Did gyre and gimble in the wabe;</span> -<span id="cb231-8"><a href="#cb231-8" aria-hidden="true" tabindex="-1"></a>All mimsy were the borogoves,</span> -<span id="cb231-9"><a href="#cb231-9" aria-hidden="true" tabindex="-1"></a>And the mome raths outgrabe.</span> -<span id="cb231-10"><a href="#cb231-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb231-11"><a href="#cb231-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb231-12"><a href="#cb231-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{hardLineBreaks}</span> -<span id="cb231-13"><a href="#cb231-13" aria-hidden="true" tabindex="-1"></a>'Twas brillig, and the slithy toves</span> -<span id="cb231-14"><a href="#cb231-14" aria-hidden="true" tabindex="-1"></a>Did gyre and gimble in the wabe;</span> -<span id="cb231-15"><a href="#cb231-15" aria-hidden="true" tabindex="-1"></a>All mimsy were the borogoves,</span> -<span id="cb231-16"><a href="#cb231-16" aria-hidden="true" tabindex="-1"></a>And the mome raths outgrabe.</span> -<span id="cb231-17"><a href="#cb231-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb231-18"><a href="#cb231-18" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb231-19"><a href="#cb231-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb232"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb232-1"><a href="#cb232-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> -<p>A PDF document named <code>document.pdf</code> should be produced and -contain the following text:</p> -<blockquote> -<p>’Twas brillig, and the slithy toves Did gyre and gimble in the wabe; -All mimsy were the borogoves, And the mome raths outgrabe.</p> -<p>’Twas brillig, and the slithy toves Did gyre and gimble in the wabe; -All mimsy were the borogoves, And the mome raths outgrabe.</p> -</blockquote> -<h4 data-number="2.2.1.27" id="option-hashenumerators"><span -class="header-section-number">2.2.1.27</span> Option +<p>See also the option +<strong><code>autoIdentifiers</code></strong>.</p> +<h4 data-number="2.2.1.31" id="option-hashenumerators"><span +class="header-section-number">2.2.1.31</span> Option <code>hashEnumerators</code></h4> <dl> <dt><code>hashEnumerators</code> (default value: @@ -3705,10 +4254,10 @@ class="header-section-number">2.2.1.27</span> Option <dd> <p>Enable the use of hash symbols (<code>#</code>) as ordered item list markers:</p> -<div class="sourceCode" id="cb233"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb233-1"><a href="#cb233-1" aria-hidden="true" tabindex="-1"></a>#. Bird</span> -<span id="cb233-2"><a href="#cb233-2" aria-hidden="true" tabindex="-1"></a>#. McHale</span> -<span id="cb233-3"><a href="#cb233-3" aria-hidden="true" tabindex="-1"></a>#. Parish</span></code></pre></div> +<div class="sourceCode" id="cb261"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb261-1"><a href="#cb261-1" aria-hidden="true" tabindex="-1"></a>#. Bird</span> +<span id="cb261-2"><a href="#cb261-2" aria-hidden="true" tabindex="-1"></a>#. McHale</span> +<span id="cb261-3"><a href="#cb261-3" aria-hidden="true" tabindex="-1"></a>#. Parish</span></code></pre></div> </dd> </dl> </dd> @@ -3722,31 +4271,31 @@ markers.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-23"><span +<h5 class="unnumbered" id="latex-example-24"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb234"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb234-1"><a href="#cb234-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb234-2"><a href="#cb234-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb234-3"><a href="#cb234-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb234-4"><a href="#cb234-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb234-5"><a href="#cb234-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb234-6"><a href="#cb234-6" aria-hidden="true" tabindex="-1"></a>#. Bird</span> -<span id="cb234-7"><a href="#cb234-7" aria-hidden="true" tabindex="-1"></a>#. McHale</span> -<span id="cb234-8"><a href="#cb234-8" aria-hidden="true" tabindex="-1"></a>#. Parish</span> -<span id="cb234-9"><a href="#cb234-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb234-10"><a href="#cb234-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb234-11"><a href="#cb234-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{hashEnumerators}</span> -<span id="cb234-12"><a href="#cb234-12" aria-hidden="true" tabindex="-1"></a>#. Bird</span> -<span id="cb234-13"><a href="#cb234-13" aria-hidden="true" tabindex="-1"></a>#. McHale</span> -<span id="cb234-14"><a href="#cb234-14" aria-hidden="true" tabindex="-1"></a>#. Parish</span> -<span id="cb234-15"><a href="#cb234-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb234-16"><a href="#cb234-16" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb234-17"><a href="#cb234-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb262"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb262-1"><a href="#cb262-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb262-2"><a href="#cb262-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb262-3"><a href="#cb262-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb262-4"><a href="#cb262-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb262-5"><a href="#cb262-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb262-6"><a href="#cb262-6" aria-hidden="true" tabindex="-1"></a>#. Bird</span> +<span id="cb262-7"><a href="#cb262-7" aria-hidden="true" tabindex="-1"></a>#. McHale</span> +<span id="cb262-8"><a href="#cb262-8" aria-hidden="true" tabindex="-1"></a>#. Parish</span> +<span id="cb262-9"><a href="#cb262-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb262-10"><a href="#cb262-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb262-11"><a href="#cb262-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[hashEnumerators]</span> +<span id="cb262-12"><a href="#cb262-12" aria-hidden="true" tabindex="-1"></a>#. Bird</span> +<span id="cb262-13"><a href="#cb262-13" aria-hidden="true" tabindex="-1"></a>#. McHale</span> +<span id="cb262-14"><a href="#cb262-14" aria-hidden="true" tabindex="-1"></a>#. Parish</span> +<span id="cb262-15"><a href="#cb262-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb262-16"><a href="#cb262-16" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb262-17"><a href="#cb262-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb235"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb235-1"><a href="#cb235-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb263"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb263-1"><a href="#cb263-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -3759,31 +4308,31 @@ contain the following text:</p> <li>Parish</li> </ol> </blockquote> -<h5 class="unnumbered" id="context-example-13">Con<span +<h5 class="unnumbered" id="context-example-15">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb236"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb236-1"><a href="#cb236-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb236-2"><a href="#cb236-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb236-3"><a href="#cb236-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb236-4"><a href="#cb236-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb236-5"><a href="#cb236-5" aria-hidden="true" tabindex="-1"></a>#. Bird</span> -<span id="cb236-6"><a href="#cb236-6" aria-hidden="true" tabindex="-1"></a>#. McHale</span> -<span id="cb236-7"><a href="#cb236-7" aria-hidden="true" tabindex="-1"></a>#. Parish</span> -<span id="cb236-8"><a href="#cb236-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb236-9"><a href="#cb236-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb236-10"><a href="#cb236-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[hashEnumerators = yes]</span> -<span id="cb236-11"><a href="#cb236-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb236-12"><a href="#cb236-12" aria-hidden="true" tabindex="-1"></a>#. Bird</span> -<span id="cb236-13"><a href="#cb236-13" aria-hidden="true" tabindex="-1"></a>#. McHale</span> -<span id="cb236-14"><a href="#cb236-14" aria-hidden="true" tabindex="-1"></a>#. Parish</span> -<span id="cb236-15"><a href="#cb236-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb236-16"><a href="#cb236-16" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb236-17"><a href="#cb236-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb264"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb264-1"><a href="#cb264-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb264-2"><a href="#cb264-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb264-3"><a href="#cb264-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb264-4"><a href="#cb264-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb264-5"><a href="#cb264-5" aria-hidden="true" tabindex="-1"></a>#. Bird</span> +<span id="cb264-6"><a href="#cb264-6" aria-hidden="true" tabindex="-1"></a>#. McHale</span> +<span id="cb264-7"><a href="#cb264-7" aria-hidden="true" tabindex="-1"></a>#. Parish</span> +<span id="cb264-8"><a href="#cb264-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb264-9"><a href="#cb264-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb264-10"><a href="#cb264-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[hashEnumerators = yes]</span> +<span id="cb264-11"><a href="#cb264-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb264-12"><a href="#cb264-12" aria-hidden="true" tabindex="-1"></a>#. Bird</span> +<span id="cb264-13"><a href="#cb264-13" aria-hidden="true" tabindex="-1"></a>#. McHale</span> +<span id="cb264-14"><a href="#cb264-14" aria-hidden="true" tabindex="-1"></a>#. Parish</span> +<span id="cb264-15"><a href="#cb264-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb264-16"><a href="#cb264-16" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb264-17"><a href="#cb264-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb237"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb237-1"><a href="#cb237-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb265"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb265-1"><a href="#cb265-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -3796,8 +4345,8 @@ contain the following text:</p> <li>Parish</li> </ol> </blockquote> -<h4 data-number="2.2.1.28" id="header-attributes"><span -class="header-section-number">2.2.1.28</span> Option +<h4 data-number="2.2.1.32" id="header-attributes"><span +class="header-section-number">2.2.1.32</span> Option <code>headerAttributes</code></h4> <dl> <dt><code>headerAttributes</code> (default value: @@ -3807,13 +4356,13 @@ class="header-section-number">2.2.1.28</span> Option <dt>true</dt> <dd> <p>Enable the assignment of HTML attributes to headings:</p> -<div class="sourceCode" id="cb238"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb238-1"><a href="#cb238-1" aria-hidden="true" tabindex="-1"></a><span class="fu"># My first heading {#foo}</span></span> -<span id="cb238-2"><a href="#cb238-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb238-3"><a href="#cb238-3" aria-hidden="true" tabindex="-1"></a><span class="fu">## My second heading ## {#bar .baz}</span></span> -<span id="cb238-4"><a href="#cb238-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb238-5"><a href="#cb238-5" aria-hidden="true" tabindex="-1"></a>Yet another heading {key=value}</span> -<span id="cb238-6"><a href="#cb238-6" aria-hidden="true" tabindex="-1"></a><span class="fu">===================</span></span></code></pre></div> +<div class="sourceCode" id="cb266"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb266-1"><a href="#cb266-1" aria-hidden="true" tabindex="-1"></a><span class="fu"># My first heading {#foo}</span></span> +<span id="cb266-2"><a href="#cb266-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb266-3"><a href="#cb266-3" aria-hidden="true" tabindex="-1"></a><span class="fu">## My second heading ## {#bar .baz}</span></span> +<span id="cb266-4"><a href="#cb266-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb266-5"><a href="#cb266-5" aria-hidden="true" tabindex="-1"></a>Yet another heading {key=value}</span> +<span id="cb266-6"><a href="#cb266-6" aria-hidden="true" tabindex="-1"></a><span class="fu">===================</span></span></code></pre></div> </dd> </dl> </dd> @@ -3826,11 +4375,11 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb238-1"><a hr </dl> </dd> </dl> -<h4 data-number="2.2.1.29" id="option-html"><span -class="header-section-number">2.2.1.29</span> Option +<h4 data-number="2.2.1.33" id="option-html"><span +class="header-section-number">2.2.1.33</span> Option <code>html</code></h4> <dl> -<dt><code>html</code> (default value: <code>false</code>)</dt> +<dt><code>html</code> (default value: <code>true</code>)</dt> <dd> <dl> <dt>true</dt> @@ -3853,36 +4402,41 @@ will be rendered as plain text.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="lua-module-example-9">Lua Module Example</h5> +<h5 class="unnumbered" id="lua-module-example-10">Lua Module +Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb239"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb239-1"><a href="#cb239-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb239-2"><a href="#cb239-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb239-3"><a href="#cb239-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb239-4"><a href="#cb239-4" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb239-5"><a href="#cb239-5" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new()</span> -<span id="cb239-6"><a href="#cb239-6" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> -<span id="cb239-7"><a href="#cb239-7" aria-hidden="true" tabindex="-1"></a> local input =</span> -<span id="cb239-8"><a href="#cb239-8" aria-hidden="true" tabindex="-1"></a> "<div>*There is no block tag support.*</div>" .. newline ..</span> -<span id="cb239-9"><a href="#cb239-9" aria-hidden="true" tabindex="-1"></a> "*There is no <inline tag="tag"></inline> support.*" .. newline ..</span> -<span id="cb239-10"><a href="#cb239-10" aria-hidden="true" tabindex="-1"></a> "_There is no <!-- comment --> support._" .. newline ..</span> -<span id="cb239-11"><a href="#cb239-11" aria-hidden="true" tabindex="-1"></a> "_There is no <? HTML instruction ?> support._"</span> -<span id="cb239-12"><a href="#cb239-12" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb239-13"><a href="#cb239-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> -<span id="cb239-14"><a href="#cb239-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb239-15"><a href="#cb239-15" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb239-16"><a href="#cb239-16" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({html = true})</span> -<span id="cb239-17"><a href="#cb239-17" aria-hidden="true" tabindex="-1"></a> local input =</span> -<span id="cb239-18"><a href="#cb239-18" aria-hidden="true" tabindex="-1"></a> "<div>*There is block tag support.*</div>" .. newline ..</span> -<span id="cb239-19"><a href="#cb239-19" aria-hidden="true" tabindex="-1"></a> "*There is <inline tag="tag"></inline> support.*" .. newline ..</span> -<span id="cb239-20"><a href="#cb239-20" aria-hidden="true" tabindex="-1"></a> "_There is <!-- comment --> support._" .. newline ..</span> -<span id="cb239-21"><a href="#cb239-21" aria-hidden="true" tabindex="-1"></a> "_There is <? HTML instruction ?> support._"</span> -<span id="cb239-22"><a href="#cb239-22" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb239-23"><a href="#cb239-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb267"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb267-1"><a href="#cb267-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb267-2"><a href="#cb267-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb267-3"><a href="#cb267-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb267-4"><a href="#cb267-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb267-5"><a href="#cb267-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb267-6"><a href="#cb267-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb267-7"><a href="#cb267-7" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb267-8"><a href="#cb267-8" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({html = false})</span> +<span id="cb267-9"><a href="#cb267-9" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> +<span id="cb267-10"><a href="#cb267-10" aria-hidden="true" tabindex="-1"></a> local input =</span> +<span id="cb267-11"><a href="#cb267-11" aria-hidden="true" tabindex="-1"></a> "<div>*There is no block tag support.*</div>" .. newline ..</span> +<span id="cb267-12"><a href="#cb267-12" aria-hidden="true" tabindex="-1"></a> "*There is no <inline tag="tag"></inline> support.*" .. newline ..</span> +<span id="cb267-13"><a href="#cb267-13" aria-hidden="true" tabindex="-1"></a> "_There is no <!-- comment --> support._" .. newline ..</span> +<span id="cb267-14"><a href="#cb267-14" aria-hidden="true" tabindex="-1"></a> "_There is no <? HTML instruction ?> support._"</span> +<span id="cb267-15"><a href="#cb267-15" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb267-16"><a href="#cb267-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> +<span id="cb267-17"><a href="#cb267-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb267-18"><a href="#cb267-18" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb267-19"><a href="#cb267-19" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new()</span> +<span id="cb267-20"><a href="#cb267-20" aria-hidden="true" tabindex="-1"></a> local input =</span> +<span id="cb267-21"><a href="#cb267-21" aria-hidden="true" tabindex="-1"></a> "<div>*There is block tag support.*</div>" .. newline ..</span> +<span id="cb267-22"><a href="#cb267-22" aria-hidden="true" tabindex="-1"></a> "*There is <inline tag="tag"></inline> support.*" .. newline ..</span> +<span id="cb267-23"><a href="#cb267-23" aria-hidden="true" tabindex="-1"></a> "_There is <!-- comment --> support._" .. newline ..</span> +<span id="cb267-24"><a href="#cb267-24" aria-hidden="true" tabindex="-1"></a> "_There is <? HTML instruction ?> support._"</span> +<span id="cb267-25"><a href="#cb267-25" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb267-26"><a href="#cb267-26" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb267-27"><a href="#cb267-27" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Then, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb240"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb240-1"><a href="#cb240-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb268"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb268-1"><a href="#cb268-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -3892,30 +4446,34 @@ comment –> support. There is no <? HTML instruction ?> support.</p> <p>There is support. There is support. There is support.</p> </blockquote> -<h5 class="unnumbered" id="lua-cli-example-7">Lua CLI Example</h5> +<h5 class="unnumbered" id="lua-cli-example-9">Lua CLI Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb241"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb241-1"><a href="#cb241-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb241-2"><a href="#cb241-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb241-3"><a href="#cb241-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> -<span id="cb241-4"><a href="#cb241-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> -<span id="cb241-5"><a href="#cb241-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> -<span id="cb241-6"><a href="#cb241-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb269"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb269-1"><a href="#cb269-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb269-2"><a href="#cb269-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb269-3"><a href="#cb269-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb269-4"><a href="#cb269-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb269-5"><a href="#cb269-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb269-6"><a href="#cb269-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> +<span id="cb269-7"><a href="#cb269-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> +<span id="cb269-8"><a href="#cb269-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> +<span id="cb269-9"><a href="#cb269-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb269-10"><a href="#cb269-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p> -<div class="sourceCode" id="cb242"><pre -class="sourceCode html"><code class="sourceCode html"><span id="cb242-1"><a href="#cb242-1" aria-hidden="true" tabindex="-1"></a><span class="kw"><div></span></span> -<span id="cb242-2"><a href="#cb242-2" aria-hidden="true" tabindex="-1"></a>*Is there block tag support?*</span> -<span id="cb242-3"><a href="#cb242-3" aria-hidden="true" tabindex="-1"></a><span class="kw"></div></span></span> -<span id="cb242-4"><a href="#cb242-4" aria-hidden="true" tabindex="-1"></a>*Is there <span class="kw"><inline</span> <span class="er">tag</span><span class="ot">=</span><span class="st">"tag"</span><span class="kw">></inline></span> support?*</span> -<span id="cb242-5"><a href="#cb242-5" aria-hidden="true" tabindex="-1"></a>_Is there <span class="co"><!-- comment --></span> support?_</span> -<span id="cb242-6"><a href="#cb242-6" aria-hidden="true" tabindex="-1"></a>_Is there <span class="kw"><?</span> HTML instruction <span class="kw">?></span> support?_</span></code></pre></div> +<div class="sourceCode" id="cb270"><pre +class="sourceCode html"><code class="sourceCode html"><span id="cb270-1"><a href="#cb270-1" aria-hidden="true" tabindex="-1"></a><span class="dt"><</span><span class="kw">div</span><span class="dt">></span></span> +<span id="cb270-2"><a href="#cb270-2" aria-hidden="true" tabindex="-1"></a>*Is there block tag support?*</span> +<span id="cb270-3"><a href="#cb270-3" aria-hidden="true" tabindex="-1"></a><span class="dt"></</span><span class="kw">div</span><span class="dt">></span></span> +<span id="cb270-4"><a href="#cb270-4" aria-hidden="true" tabindex="-1"></a>*Is there <span class="dt"><</span><span class="kw">inline</span> <span class="er">tag</span><span class="ot">=</span><span class="st">"tag"</span><span class="dt">></</span><span class="kw">inline</span><span class="dt">></span> support?*</span> +<span id="cb270-5"><a href="#cb270-5" aria-hidden="true" tabindex="-1"></a>_Is there <span class="co"><!-- comment --></span> support?_</span> +<span id="cb270-6"><a href="#cb270-6" aria-hidden="true" tabindex="-1"></a>_Is there <span class="kw"><?</span> HTML instruction <span class="kw">?></span> support?_</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb243"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb243-1"><a href="#cb243-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> -<span id="cb243-2"><a href="#cb243-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ html=true <span class="at">--</span> content.md optiontrue.tex</span> -<span id="cb243-3"><a href="#cb243-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb271"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb271-1"><a href="#cb271-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ html=false <span class="at">--</span> content.md optionfalse.tex</span> +<span id="cb271-2"><a href="#cb271-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optiontrue.tex</span> +<span id="cb271-3"><a href="#cb271-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems @@ -3933,37 +4491,38 @@ contain the following text:</p> –> support? Is there <? HTML instruction ?> support?</p> <p>Is there support? Is there support? Is there support?</p> </blockquote> -<h5 class="unnumbered" id="plain-tex-example-8">Plain <span +<h5 class="unnumbered" id="plain-tex-example-10">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb244"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb244-1"><a href="#cb244-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb244-2"><a href="#cb244-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb244-3"><a href="#cb244-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb244-4"><a href="#cb244-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb244-5"><a href="#cb244-5" aria-hidden="true" tabindex="-1"></a><div></span> -<span id="cb244-6"><a href="#cb244-6" aria-hidden="true" tabindex="-1"></a>*There is no block tag support.*</span> -<span id="cb244-7"><a href="#cb244-7" aria-hidden="true" tabindex="-1"></a></div></span> -<span id="cb244-8"><a href="#cb244-8" aria-hidden="true" tabindex="-1"></a>*There is no <inline tag="tag"></inline> support.*</span> -<span id="cb244-9"><a href="#cb244-9" aria-hidden="true" tabindex="-1"></a>_There is no <!-- comment --> support._</span> -<span id="cb244-10"><a href="#cb244-10" aria-hidden="true" tabindex="-1"></a>_There is no <? HTML instruction ?> support._</span> -<span id="cb244-11"><a href="#cb244-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb244-12"><a href="#cb244-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb244-13"><a href="#cb244-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionHtml</span>{true}</span> -<span id="cb244-14"><a href="#cb244-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb244-15"><a href="#cb244-15" aria-hidden="true" tabindex="-1"></a><div></span> -<span id="cb244-16"><a href="#cb244-16" aria-hidden="true" tabindex="-1"></a>*There is block tag support.*</span> -<span id="cb244-17"><a href="#cb244-17" aria-hidden="true" tabindex="-1"></a></div></span> -<span id="cb244-18"><a href="#cb244-18" aria-hidden="true" tabindex="-1"></a>*There is <inline tag="tag"></inline> support.*</span> -<span id="cb244-19"><a href="#cb244-19" aria-hidden="true" tabindex="-1"></a>_There is <!-- comment --> support._</span> -<span id="cb244-20"><a href="#cb244-20" aria-hidden="true" tabindex="-1"></a>_There is <? HTML instruction ?> support._</span> -<span id="cb244-21"><a href="#cb244-21" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb244-22"><a href="#cb244-22" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb244-23"><a href="#cb244-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb272"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb272-1"><a href="#cb272-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb272-2"><a href="#cb272-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb272-3"><a href="#cb272-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb272-4"><a href="#cb272-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionHtml</span>{false}</span> +<span id="cb272-5"><a href="#cb272-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb272-6"><a href="#cb272-6" aria-hidden="true" tabindex="-1"></a><div></span> +<span id="cb272-7"><a href="#cb272-7" aria-hidden="true" tabindex="-1"></a>*There is no block tag support.*</span> +<span id="cb272-8"><a href="#cb272-8" aria-hidden="true" tabindex="-1"></a></div></span> +<span id="cb272-9"><a href="#cb272-9" aria-hidden="true" tabindex="-1"></a>*There is no <inline tag="tag"></inline> support.*</span> +<span id="cb272-10"><a href="#cb272-10" aria-hidden="true" tabindex="-1"></a>_There is no <!-- comment --> support._</span> +<span id="cb272-11"><a href="#cb272-11" aria-hidden="true" tabindex="-1"></a>_There is no <? HTML instruction ?> support._</span> +<span id="cb272-12"><a href="#cb272-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb272-13"><a href="#cb272-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb272-14"><a href="#cb272-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionHtml</span>{true}</span> +<span id="cb272-15"><a href="#cb272-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb272-16"><a href="#cb272-16" aria-hidden="true" tabindex="-1"></a><div></span> +<span id="cb272-17"><a href="#cb272-17" aria-hidden="true" tabindex="-1"></a>*There is block tag support.*</span> +<span id="cb272-18"><a href="#cb272-18" aria-hidden="true" tabindex="-1"></a></div></span> +<span id="cb272-19"><a href="#cb272-19" aria-hidden="true" tabindex="-1"></a>*There is <inline tag="tag"></inline> support.*</span> +<span id="cb272-20"><a href="#cb272-20" aria-hidden="true" tabindex="-1"></a>_There is <!-- comment --> support._</span> +<span id="cb272-21"><a href="#cb272-21" aria-hidden="true" tabindex="-1"></a>_There is <? HTML instruction ?> support._</span> +<span id="cb272-22"><a href="#cb272-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb272-23"><a href="#cb272-23" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb272-24"><a href="#cb272-24" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb245"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb245-1"><a href="#cb245-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb273"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb273-1"><a href="#cb273-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -3973,37 +4532,37 @@ comment –> support. There is no <? HTML instruction ?> support.</p> <p>There is support. There is support. There is support.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-24"><span +<h5 class="unnumbered" id="latex-example-25"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb246"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb246-1"><a href="#cb246-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb246-2"><a href="#cb246-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb246-3"><a href="#cb246-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb246-4"><a href="#cb246-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb246-5"><a href="#cb246-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb246-6"><a href="#cb246-6" aria-hidden="true" tabindex="-1"></a><div></span> -<span id="cb246-7"><a href="#cb246-7" aria-hidden="true" tabindex="-1"></a>*There is no block tag support.*</span> -<span id="cb246-8"><a href="#cb246-8" aria-hidden="true" tabindex="-1"></a></div></span> -<span id="cb246-9"><a href="#cb246-9" aria-hidden="true" tabindex="-1"></a>*There is no <inline tag="tag"></inline> support.*</span> -<span id="cb246-10"><a href="#cb246-10" aria-hidden="true" tabindex="-1"></a>_There is no <!-- comment --> support._</span> -<span id="cb246-11"><a href="#cb246-11" aria-hidden="true" tabindex="-1"></a>_There is no <? HTML instruction ?> support._</span> -<span id="cb246-12"><a href="#cb246-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb246-13"><a href="#cb246-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb246-14"><a href="#cb246-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{html}</span> -<span id="cb246-15"><a href="#cb246-15" aria-hidden="true" tabindex="-1"></a><div></span> -<span id="cb246-16"><a href="#cb246-16" aria-hidden="true" tabindex="-1"></a>*There is block tag support.*</span> -<span id="cb246-17"><a href="#cb246-17" aria-hidden="true" tabindex="-1"></a></div></span> -<span id="cb246-18"><a href="#cb246-18" aria-hidden="true" tabindex="-1"></a>*There is <inline tag="tag"></inline> support.*</span> -<span id="cb246-19"><a href="#cb246-19" aria-hidden="true" tabindex="-1"></a>_There is <!-- comment --> support._</span> -<span id="cb246-20"><a href="#cb246-20" aria-hidden="true" tabindex="-1"></a>_There is <? HTML instruction ?> support._</span> -<span id="cb246-21"><a href="#cb246-21" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb246-22"><a href="#cb246-22" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb246-23"><a href="#cb246-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb274"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb274-1"><a href="#cb274-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb274-2"><a href="#cb274-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb274-3"><a href="#cb274-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb274-4"><a href="#cb274-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb274-5"><a href="#cb274-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[html = false]</span> +<span id="cb274-6"><a href="#cb274-6" aria-hidden="true" tabindex="-1"></a><div></span> +<span id="cb274-7"><a href="#cb274-7" aria-hidden="true" tabindex="-1"></a>*There is no block tag support.*</span> +<span id="cb274-8"><a href="#cb274-8" aria-hidden="true" tabindex="-1"></a></div></span> +<span id="cb274-9"><a href="#cb274-9" aria-hidden="true" tabindex="-1"></a>*There is no <inline tag="tag"></inline> support.*</span> +<span id="cb274-10"><a href="#cb274-10" aria-hidden="true" tabindex="-1"></a>_There is no <!-- comment --> support._</span> +<span id="cb274-11"><a href="#cb274-11" aria-hidden="true" tabindex="-1"></a>_There is no <? HTML instruction ?> support._</span> +<span id="cb274-12"><a href="#cb274-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb274-13"><a href="#cb274-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb274-14"><a href="#cb274-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb274-15"><a href="#cb274-15" aria-hidden="true" tabindex="-1"></a><div></span> +<span id="cb274-16"><a href="#cb274-16" aria-hidden="true" tabindex="-1"></a>*There is block tag support.*</span> +<span id="cb274-17"><a href="#cb274-17" aria-hidden="true" tabindex="-1"></a></div></span> +<span id="cb274-18"><a href="#cb274-18" aria-hidden="true" tabindex="-1"></a>*There is <inline tag="tag"></inline> support.*</span> +<span id="cb274-19"><a href="#cb274-19" aria-hidden="true" tabindex="-1"></a>_There is <!-- comment --> support._</span> +<span id="cb274-20"><a href="#cb274-20" aria-hidden="true" tabindex="-1"></a>_There is <? HTML instruction ?> support._</span> +<span id="cb274-21"><a href="#cb274-21" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb274-22"><a href="#cb274-22" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb274-23"><a href="#cb274-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb247"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb247-1"><a href="#cb247-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb275"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb275-1"><a href="#cb275-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -4013,37 +4572,38 @@ comment –> support. There is no <? HTML instruction ?> support.</p> <p>There is support. There is support. There is support.</p> </blockquote> -<h5 class="unnumbered" id="context-example-14">Con<span +<h5 class="unnumbered" id="context-example-16">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb248"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb248-1"><a href="#cb248-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb248-2"><a href="#cb248-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb248-3"><a href="#cb248-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb248-4"><a href="#cb248-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb248-5"><a href="#cb248-5" aria-hidden="true" tabindex="-1"></a><div></span> -<span id="cb248-6"><a href="#cb248-6" aria-hidden="true" tabindex="-1"></a>*There is no block tag support.*</span> -<span id="cb248-7"><a href="#cb248-7" aria-hidden="true" tabindex="-1"></a></div></span> -<span id="cb248-8"><a href="#cb248-8" aria-hidden="true" tabindex="-1"></a>*There is no <inline tag="tag"></inline> support.*</span> -<span id="cb248-9"><a href="#cb248-9" aria-hidden="true" tabindex="-1"></a>_There is no <!-- comment --> support._</span> -<span id="cb248-10"><a href="#cb248-10" aria-hidden="true" tabindex="-1"></a>_There is no <? HTML instruction ?> support._</span> -<span id="cb248-11"><a href="#cb248-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb248-12"><a href="#cb248-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb248-13"><a href="#cb248-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[html = yes]</span> -<span id="cb248-14"><a href="#cb248-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb248-15"><a href="#cb248-15" aria-hidden="true" tabindex="-1"></a><div></span> -<span id="cb248-16"><a href="#cb248-16" aria-hidden="true" tabindex="-1"></a>*There is block tag support.*</span> -<span id="cb248-17"><a href="#cb248-17" aria-hidden="true" tabindex="-1"></a></div></span> -<span id="cb248-18"><a href="#cb248-18" aria-hidden="true" tabindex="-1"></a>*There is <inline tag="tag"></inline> support.*</span> -<span id="cb248-19"><a href="#cb248-19" aria-hidden="true" tabindex="-1"></a>_There is <!-- comment --> support._</span> -<span id="cb248-20"><a href="#cb248-20" aria-hidden="true" tabindex="-1"></a>_There is <? HTML instruction ?> support._</span> -<span id="cb248-21"><a href="#cb248-21" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb248-22"><a href="#cb248-22" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb248-23"><a href="#cb248-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb276"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb276-1"><a href="#cb276-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb276-2"><a href="#cb276-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb276-3"><a href="#cb276-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb276-4"><a href="#cb276-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[html = no]</span> +<span id="cb276-5"><a href="#cb276-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb276-6"><a href="#cb276-6" aria-hidden="true" tabindex="-1"></a><div></span> +<span id="cb276-7"><a href="#cb276-7" aria-hidden="true" tabindex="-1"></a>*There is no block tag support.*</span> +<span id="cb276-8"><a href="#cb276-8" aria-hidden="true" tabindex="-1"></a></div></span> +<span id="cb276-9"><a href="#cb276-9" aria-hidden="true" tabindex="-1"></a>*There is no <inline tag="tag"></inline> support.*</span> +<span id="cb276-10"><a href="#cb276-10" aria-hidden="true" tabindex="-1"></a>_There is no <!-- comment --> support._</span> +<span id="cb276-11"><a href="#cb276-11" aria-hidden="true" tabindex="-1"></a>_There is no <? HTML instruction ?> support._</span> +<span id="cb276-12"><a href="#cb276-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb276-13"><a href="#cb276-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb276-14"><a href="#cb276-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[html = yes]</span> +<span id="cb276-15"><a href="#cb276-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb276-16"><a href="#cb276-16" aria-hidden="true" tabindex="-1"></a><div></span> +<span id="cb276-17"><a href="#cb276-17" aria-hidden="true" tabindex="-1"></a>*There is block tag support.*</span> +<span id="cb276-18"><a href="#cb276-18" aria-hidden="true" tabindex="-1"></a></div></span> +<span id="cb276-19"><a href="#cb276-19" aria-hidden="true" tabindex="-1"></a>*There is <inline tag="tag"></inline> support.*</span> +<span id="cb276-20"><a href="#cb276-20" aria-hidden="true" tabindex="-1"></a>_There is <!-- comment --> support._</span> +<span id="cb276-21"><a href="#cb276-21" aria-hidden="true" tabindex="-1"></a>_There is <? HTML instruction ?> support._</span> +<span id="cb276-22"><a href="#cb276-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb276-23"><a href="#cb276-23" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb276-24"><a href="#cb276-24" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb249"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb249-1"><a href="#cb249-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb277"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb277-1"><a href="#cb277-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -4053,8 +4613,8 @@ comment –> support. There is no <? HTML instruction ?> support.</p> <p>There is support. There is support. There is support.</p> </blockquote> -<h4 data-number="2.2.1.30" id="option-hybrid"><span -class="header-section-number">2.2.1.30</span> Option +<h4 data-number="2.2.1.34" id="option-hybrid"><span +class="header-section-number">2.2.1.34</span> Option <code>hybrid</code></h4> <dl> <dt><code>hybrid</code> (default value: <code>false</code>)</dt> @@ -4086,31 +4646,35 @@ prepared with this package in mind.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="lua-module-example-10">Lua Module +<h5 class="unnumbered" id="lua-module-example-11">Lua Module Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb250"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb250-1"><a href="#cb250-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb250-2"><a href="#cb250-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb250-3"><a href="#cb250-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb250-4"><a href="#cb250-4" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb250-5"><a href="#cb250-5" aria-hidden="true" tabindex="-1"></a> local input, convert_safe, convert_unsafe, paragraph</span> -<span id="cb250-6"><a href="#cb250-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb250-7"><a href="#cb250-7" aria-hidden="true" tabindex="-1"></a> input = [[<span class="ss">$</span><span class="sc">\string\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.]]</span> -<span id="cb250-8"><a href="#cb250-8" aria-hidden="true" tabindex="-1"></a> convert_safe = markdown.new()</span> -<span id="cb250-9"><a href="#cb250-9" aria-hidden="true" tabindex="-1"></a> convert_unsafe = markdown.new({hybrid = true})</span> -<span id="cb250-10"><a href="#cb250-10" aria-hidden="true" tabindex="-1"></a> paragraph = [[<span class="fu">\par</span>]]</span> -<span id="cb250-11"><a href="#cb250-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb250-12"><a href="#cb250-12" aria-hidden="true" tabindex="-1"></a> tex.sprint(</span> -<span id="cb250-13"><a href="#cb250-13" aria-hidden="true" tabindex="-1"></a> convert_safe(input) .. paragraph ..</span> -<span id="cb250-14"><a href="#cb250-14" aria-hidden="true" tabindex="-1"></a> convert_unsafe(input)</span> -<span id="cb250-15"><a href="#cb250-15" aria-hidden="true" tabindex="-1"></a> )</span> -<span id="cb250-16"><a href="#cb250-16" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb250-17"><a href="#cb250-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb278"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb278-1"><a href="#cb278-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb278-2"><a href="#cb278-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb278-3"><a href="#cb278-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb278-4"><a href="#cb278-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb278-5"><a href="#cb278-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb278-6"><a href="#cb278-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb278-7"><a href="#cb278-7" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb278-8"><a href="#cb278-8" aria-hidden="true" tabindex="-1"></a> local input, convert_safe, convert_unsafe, paragraph</span> +<span id="cb278-9"><a href="#cb278-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb278-10"><a href="#cb278-10" aria-hidden="true" tabindex="-1"></a> input = [[<span class="ss">$</span><span class="sc">\string\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.]]</span> +<span id="cb278-11"><a href="#cb278-11" aria-hidden="true" tabindex="-1"></a> convert_safe = markdown.new()</span> +<span id="cb278-12"><a href="#cb278-12" aria-hidden="true" tabindex="-1"></a> convert_unsafe = markdown.new({hybrid = true})</span> +<span id="cb278-13"><a href="#cb278-13" aria-hidden="true" tabindex="-1"></a> paragraph = [[<span class="fu">\par</span>]]</span> +<span id="cb278-14"><a href="#cb278-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb278-15"><a href="#cb278-15" aria-hidden="true" tabindex="-1"></a> tex.sprint(</span> +<span id="cb278-16"><a href="#cb278-16" aria-hidden="true" tabindex="-1"></a> convert_safe(input) .. paragraph ..</span> +<span id="cb278-17"><a href="#cb278-17" aria-hidden="true" tabindex="-1"></a> convert_unsafe(input)</span> +<span id="cb278-18"><a href="#cb278-18" aria-hidden="true" tabindex="-1"></a> )</span> +<span id="cb278-19"><a href="#cb278-19" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb278-20"><a href="#cb278-20" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb278-21"><a href="#cb278-21" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Then, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb251"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb251-1"><a href="#cb251-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb279"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb279-1"><a href="#cb279-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -4118,28 +4682,29 @@ contain the following text:</p> <p><math><mroot><msqrt><mo>−</mo><mn>1</mn></msqrt></mroot></math> <em>equals</em> <math><mi>i</mi></math>.</p> </blockquote> -<h5 class="unnumbered" id="lua-cli-example-8">Lua CLI Example</h5> +<h5 class="unnumbered" id="lua-cli-example-10">Lua CLI Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb252"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb252-1"><a href="#cb252-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb252-2"><a href="#cb252-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb252-3"><a href="#cb252-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> -<span id="cb252-4"><a href="#cb252-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb252-5"><a href="#cb252-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> -<span id="cb252-6"><a href="#cb252-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> -<span id="cb252-7"><a href="#cb252-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> -<span id="cb252-8"><a href="#cb252-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> -<span id="cb252-9"><a href="#cb252-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb280"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb280-1"><a href="#cb280-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb280-2"><a href="#cb280-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb280-3"><a href="#cb280-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb280-4"><a href="#cb280-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb280-5"><a href="#cb280-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb280-6"><a href="#cb280-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> +<span id="cb280-7"><a href="#cb280-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> +<span id="cb280-8"><a href="#cb280-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> +<span id="cb280-9"><a href="#cb280-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb280-10"><a href="#cb280-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p> -<div class="sourceCode" id="cb253"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb253-1"><a href="#cb253-1" aria-hidden="true" tabindex="-1"></a>$\sqrt{-1}$ *equals* $i$.</span></code></pre></div> +<div class="sourceCode" id="cb281"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb281-1"><a href="#cb281-1" aria-hidden="true" tabindex="-1"></a>$\sqrt{-1}$ *equals* $i$.</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb254"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb254-1"><a href="#cb254-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> -<span id="cb254-2"><a href="#cb254-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ hybrid=true <span class="at">--</span> content.md optiontrue.tex</span> -<span id="cb254-3"><a href="#cb254-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb282"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb282-1"><a href="#cb282-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> +<span id="cb282-2"><a href="#cb282-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ hybrid=true <span class="at">--</span> content.md optiontrue.tex</span> +<span id="cb282-3"><a href="#cb282-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems @@ -4156,27 +4721,27 @@ contain the following text:</p> <p><math><mroot><msqrt><mo>−</mo><mn>1</mn></msqrt></mroot></math> <em>equals</em> <math><mi>i</mi></math>.</p> </blockquote> -<h5 class="unnumbered" id="plain-tex-example-9">Plain <span +<h5 class="unnumbered" id="plain-tex-example-11">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb255"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb255-1"><a href="#cb255-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb255-2"><a href="#cb255-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb255-3"><a href="#cb255-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb255-4"><a href="#cb255-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb255-5"><a href="#cb255-5" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> -<span id="cb255-6"><a href="#cb255-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb255-7"><a href="#cb255-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb255-8"><a href="#cb255-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionHybrid</span>{true}</span> -<span id="cb255-9"><a href="#cb255-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb255-10"><a href="#cb255-10" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> -<span id="cb255-11"><a href="#cb255-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb255-12"><a href="#cb255-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb255-13"><a href="#cb255-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb283"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb283-1"><a href="#cb283-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb283-2"><a href="#cb283-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb283-3"><a href="#cb283-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb283-4"><a href="#cb283-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb283-5"><a href="#cb283-5" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> +<span id="cb283-6"><a href="#cb283-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb283-7"><a href="#cb283-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb283-8"><a href="#cb283-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionHybrid</span>{true}</span> +<span id="cb283-9"><a href="#cb283-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb283-10"><a href="#cb283-10" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> +<span id="cb283-11"><a href="#cb283-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb283-12"><a href="#cb283-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb283-13"><a href="#cb283-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb256"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb256-1"><a href="#cb256-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb284"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb284-1"><a href="#cb284-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -4184,27 +4749,27 @@ contain the following text:</p> <p><math><mroot><msqrt><mo>−</mo><mn>1</mn></msqrt></mroot></math> <em>equals</em> <math><mi>i</mi></math>.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-25"><span +<h5 class="unnumbered" id="latex-example-26"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb257"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb257-1"><a href="#cb257-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb257-2"><a href="#cb257-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb257-3"><a href="#cb257-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb257-4"><a href="#cb257-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb257-5"><a href="#cb257-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb257-6"><a href="#cb257-6" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> -<span id="cb257-7"><a href="#cb257-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb257-8"><a href="#cb257-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb257-9"><a href="#cb257-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{hybrid}</span> -<span id="cb257-10"><a href="#cb257-10" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> -<span id="cb257-11"><a href="#cb257-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb257-12"><a href="#cb257-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb257-13"><a href="#cb257-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb285"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb285-1"><a href="#cb285-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb285-2"><a href="#cb285-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb285-3"><a href="#cb285-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb285-4"><a href="#cb285-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb285-5"><a href="#cb285-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb285-6"><a href="#cb285-6" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> +<span id="cb285-7"><a href="#cb285-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb285-8"><a href="#cb285-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb285-9"><a href="#cb285-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[hybrid]</span> +<span id="cb285-10"><a href="#cb285-10" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> +<span id="cb285-11"><a href="#cb285-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb285-12"><a href="#cb285-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb285-13"><a href="#cb285-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb258"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb258-1"><a href="#cb258-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb286"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb286-1"><a href="#cb286-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -4212,27 +4777,27 @@ contain the following text:</p> <p><math><mroot><msqrt><mo>−</mo><mn>1</mn></msqrt></mroot></math> <em>equals</em> <math><mi>i</mi></math>.</p> </blockquote> -<h5 class="unnumbered" id="context-example-15">Con<span +<h5 class="unnumbered" id="context-example-17">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb259"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb259-1"><a href="#cb259-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb259-2"><a href="#cb259-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb259-3"><a href="#cb259-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb259-4"><a href="#cb259-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb259-5"><a href="#cb259-5" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> -<span id="cb259-6"><a href="#cb259-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb259-7"><a href="#cb259-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb259-8"><a href="#cb259-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[hybrid = yes]</span> -<span id="cb259-9"><a href="#cb259-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb259-10"><a href="#cb259-10" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> -<span id="cb259-11"><a href="#cb259-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb259-12"><a href="#cb259-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb259-13"><a href="#cb259-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb287"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb287-1"><a href="#cb287-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb287-2"><a href="#cb287-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb287-3"><a href="#cb287-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb287-4"><a href="#cb287-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb287-5"><a href="#cb287-5" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> +<span id="cb287-6"><a href="#cb287-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb287-7"><a href="#cb287-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb287-8"><a href="#cb287-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[hybrid = yes]</span> +<span id="cb287-9"><a href="#cb287-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb287-10"><a href="#cb287-10" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>.</span> +<span id="cb287-11"><a href="#cb287-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb287-12"><a href="#cb287-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb287-13"><a href="#cb287-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb260"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb260-1"><a href="#cb260-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb288"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb288-1"><a href="#cb288-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -4240,8 +4805,8 @@ contain the following text:</p> <p><math><mroot><msqrt><mo>−</mo><mn>1</mn></msqrt></mroot></math> <em>equals</em> <math><mi>i</mi></math>.</p> </blockquote> -<h4 data-number="2.2.1.31" id="option-inlinecodeattributes"><span -class="header-section-number">2.2.1.31</span> Option +<h4 data-number="2.2.1.35" id="option-inlinecodeattributes"><span +class="header-section-number">2.2.1.35</span> Option <code>inlineCodeAttributes</code></h4> <dl> <dt><code>inlineCodeAttributes</code> (default value: @@ -4253,8 +4818,8 @@ class="header-section-number">2.2.1.31</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-inline_code_attributes">inline code span attribute extension</a>:</p> -<div class="sourceCode" id="cb261"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb261-1"><a href="#cb261-1" aria-hidden="true" tabindex="-1"></a><span class="in">`<$>`</span>{.haskell}</span></code></pre></div> +<div class="sourceCode" id="cb289"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb289-1"><a href="#cb289-1" aria-hidden="true" tabindex="-1"></a><span class="in">`<$>`</span>{.haskell}</span></code></pre></div> </dd> </dl> </dd> @@ -4267,56 +4832,56 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb261-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-26"><span +<h5 class="unnumbered" id="latex-example-27"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb262"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb262-1"><a href="#cb262-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb262-2"><a href="#cb262-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[inlineCodeAttributes]{<span class="ex">markdown</span>}</span> -<span id="cb262-3"><a href="#cb262-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">expl3</span>}</span> -<span id="cb262-4"><a href="#cb262-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> -<span id="cb262-5"><a href="#cb262-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb262-6"><a href="#cb262-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb262-7"><a href="#cb262-7" aria-hidden="true" tabindex="-1"></a> codeSpanAttributeContextBegin = {</span> -<span id="cb262-8"><a href="#cb262-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_begin:</span> -<span id="cb262-9"><a href="#cb262-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\color</span>_group_begin:</span> -<span id="cb262-10"><a href="#cb262-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{</span> -<span id="cb262-11"><a href="#cb262-11" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb262-12"><a href="#cb262-12" aria-hidden="true" tabindex="-1"></a> attributeKeyValue = {</span> -<span id="cb262-13"><a href="#cb262-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\str</span>_if_eq:nnT</span> -<span id="cb262-14"><a href="#cb262-14" aria-hidden="true" tabindex="-1"></a> { ##1 }</span> -<span id="cb262-15"><a href="#cb262-15" aria-hidden="true" tabindex="-1"></a> { color }</span> -<span id="cb262-16"><a href="#cb262-16" aria-hidden="true" tabindex="-1"></a> {</span> -<span id="cb262-17"><a href="#cb262-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\color</span>_select:n { ##2 }</span> -<span id="cb262-18"><a href="#cb262-18" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb262-19"><a href="#cb262-19" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb262-20"><a href="#cb262-20" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb262-21"><a href="#cb262-21" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb262-22"><a href="#cb262-22" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb262-23"><a href="#cb262-23" aria-hidden="true" tabindex="-1"></a> codeSpanAttributeContextEnd = {</span> -<span id="cb262-24"><a href="#cb262-24" aria-hidden="true" tabindex="-1"></a> <span class="fu">\color</span>_group_end:</span> -<span id="cb262-25"><a href="#cb262-25" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_end:</span> -<span id="cb262-26"><a href="#cb262-26" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb262-27"><a href="#cb262-27" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb262-28"><a href="#cb262-28" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb262-29"><a href="#cb262-29" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> -<span id="cb262-30"><a href="#cb262-30" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb262-31"><a href="#cb262-31" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb262-32"><a href="#cb262-32" aria-hidden="true" tabindex="-1"></a>Here is some `colored text`{color=red}.</span> -<span id="cb262-33"><a href="#cb262-33" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb262-34"><a href="#cb262-34" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb290"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb290-1"><a href="#cb290-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb290-2"><a href="#cb290-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[inlineCodeAttributes]{<span class="ex">markdown</span>}</span> +<span id="cb290-3"><a href="#cb290-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">expl3</span>}</span> +<span id="cb290-4"><a href="#cb290-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> +<span id="cb290-5"><a href="#cb290-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb290-6"><a href="#cb290-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb290-7"><a href="#cb290-7" aria-hidden="true" tabindex="-1"></a> codeSpanAttributeContextBegin = {</span> +<span id="cb290-8"><a href="#cb290-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_begin:</span> +<span id="cb290-9"><a href="#cb290-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\color</span>_group_begin:</span> +<span id="cb290-10"><a href="#cb290-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{</span> +<span id="cb290-11"><a href="#cb290-11" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb290-12"><a href="#cb290-12" aria-hidden="true" tabindex="-1"></a> attributeKeyValue = {</span> +<span id="cb290-13"><a href="#cb290-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\str</span>_if_eq:nnT</span> +<span id="cb290-14"><a href="#cb290-14" aria-hidden="true" tabindex="-1"></a> { ##1 }</span> +<span id="cb290-15"><a href="#cb290-15" aria-hidden="true" tabindex="-1"></a> { color }</span> +<span id="cb290-16"><a href="#cb290-16" aria-hidden="true" tabindex="-1"></a> {</span> +<span id="cb290-17"><a href="#cb290-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\color</span>_select:n { ##2 }</span> +<span id="cb290-18"><a href="#cb290-18" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb290-19"><a href="#cb290-19" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb290-20"><a href="#cb290-20" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb290-21"><a href="#cb290-21" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb290-22"><a href="#cb290-22" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb290-23"><a href="#cb290-23" aria-hidden="true" tabindex="-1"></a> codeSpanAttributeContextEnd = {</span> +<span id="cb290-24"><a href="#cb290-24" aria-hidden="true" tabindex="-1"></a> <span class="fu">\color</span>_group_end:</span> +<span id="cb290-25"><a href="#cb290-25" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_end:</span> +<span id="cb290-26"><a href="#cb290-26" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb290-27"><a href="#cb290-27" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb290-28"><a href="#cb290-28" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb290-29"><a href="#cb290-29" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> +<span id="cb290-30"><a href="#cb290-30" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb290-31"><a href="#cb290-31" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb290-32"><a href="#cb290-32" aria-hidden="true" tabindex="-1"></a>Here is some `colored text`{color=red}.</span> +<span id="cb290-33"><a href="#cb290-33" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb290-34"><a href="#cb290-34" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb263"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb263-1"><a href="#cb263-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb291"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb291-1"><a href="#cb291-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Here is some <span style="color: red"><code>colored text</code></span>.</p> </blockquote> -<h4 data-number="2.2.1.32" id="option-inlinenotes"><span -class="header-section-number">2.2.1.32</span> Option +<h4 data-number="2.2.1.36" id="option-inlinenotes"><span +class="header-section-number">2.2.1.36</span> Option <code>inlineNotes</code></h4> <dl> <dt><code>inlineNotes</code> (default value: <code>false</code>)</dt> @@ -4327,10 +4892,10 @@ class="header-section-number">2.2.1.32</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-inline_notes">inline note syntax extension</a>:</p> -<div class="sourceCode" id="cb264"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb264-1"><a href="#cb264-1" aria-hidden="true" tabindex="-1"></a>Here is an inline note.^[Inlines notes are easier to</span> -<span id="cb264-2"><a href="#cb264-2" aria-hidden="true" tabindex="-1"></a>write, since you don't have to pick an identifier and</span> -<span id="cb264-3"><a href="#cb264-3" aria-hidden="true" tabindex="-1"></a>move down to type the note.]</span></code></pre></div> +<div class="sourceCode" id="cb292"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb292-1"><a href="#cb292-1" aria-hidden="true" tabindex="-1"></a>Here is an inline note.^[Inlines notes are easier to</span> +<span id="cb292-2"><a href="#cb292-2" aria-hidden="true" tabindex="-1"></a>write, since you don't have to pick an identifier and</span> +<span id="cb292-3"><a href="#cb292-3" aria-hidden="true" tabindex="-1"></a>move down to type the note.]</span></code></pre></div> </dd> </dl> </dd> @@ -4343,54 +4908,54 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb264-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-27"><span +<h5 class="unnumbered" id="latex-example-28"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb265"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb265-1"><a href="#cb265-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb265-2"><a href="#cb265-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[inlineNotes]{<span class="ex">markdown</span>}</span> -<span id="cb265-3"><a href="#cb265-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb265-4"><a href="#cb265-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb265-5"><a href="#cb265-5" aria-hidden="true" tabindex="-1"></a>Here is an inline note.^[Inlines notes are easier to</span> -<span id="cb265-6"><a href="#cb265-6" aria-hidden="true" tabindex="-1"></a>write, since you don't have to pick an identifier and</span> -<span id="cb265-7"><a href="#cb265-7" aria-hidden="true" tabindex="-1"></a>move down to type the note.]</span> -<span id="cb265-8"><a href="#cb265-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb265-9"><a href="#cb265-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb293"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb293-1"><a href="#cb293-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb293-2"><a href="#cb293-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[inlineNotes]{<span class="ex">markdown</span>}</span> +<span id="cb293-3"><a href="#cb293-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb293-4"><a href="#cb293-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb293-5"><a href="#cb293-5" aria-hidden="true" tabindex="-1"></a>Here is an inline note.^[Inlines notes are easier to</span> +<span id="cb293-6"><a href="#cb293-6" aria-hidden="true" tabindex="-1"></a>write, since you don't have to pick an identifier and</span> +<span id="cb293-7"><a href="#cb293-7" aria-hidden="true" tabindex="-1"></a>move down to type the note.]</span> +<span id="cb293-8"><a href="#cb293-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb293-9"><a href="#cb293-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb266"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb266-1"><a href="#cb266-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb294"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb294-1"><a href="#cb294-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Here is an inline note.<a href="#fn1" class="footnote-ref" id="fnref1" role="doc-noteref"><sup>1</sup></a></p> </blockquote> -<h5 class="unnumbered" id="context-example-16">Con<span +<h5 class="unnumbered" id="context-example-18">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb267"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb267-1"><a href="#cb267-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb267-2"><a href="#cb267-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[inlineNotes = yes]</span> -<span id="cb267-3"><a href="#cb267-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb267-4"><a href="#cb267-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb267-5"><a href="#cb267-5" aria-hidden="true" tabindex="-1"></a>Here is an inline note.^[Inlines notes are easier to</span> -<span id="cb267-6"><a href="#cb267-6" aria-hidden="true" tabindex="-1"></a>write, since you don't have to pick an identifier and</span> -<span id="cb267-7"><a href="#cb267-7" aria-hidden="true" tabindex="-1"></a>move down to type the note.]</span> -<span id="cb267-8"><a href="#cb267-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb267-9"><a href="#cb267-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb295"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb295-1"><a href="#cb295-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb295-2"><a href="#cb295-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[inlineNotes = yes]</span> +<span id="cb295-3"><a href="#cb295-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb295-4"><a href="#cb295-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb295-5"><a href="#cb295-5" aria-hidden="true" tabindex="-1"></a>Here is an inline note.^[Inlines notes are easier to</span> +<span id="cb295-6"><a href="#cb295-6" aria-hidden="true" tabindex="-1"></a>write, since you don't have to pick an identifier and</span> +<span id="cb295-7"><a href="#cb295-7" aria-hidden="true" tabindex="-1"></a>move down to type the note.]</span> +<span id="cb295-8"><a href="#cb295-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb295-9"><a href="#cb295-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb268"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb268-1"><a href="#cb268-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb296"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb296-1"><a href="#cb296-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Here is an inline note.<a href="#fn2" class="footnote-ref" id="fnref2" role="doc-noteref"><sup>2</sup></a></p> </blockquote> -<h4 data-number="2.2.1.33" id="option-jekylldata"><span -class="header-section-number">2.2.1.33</span> Option +<h4 data-number="2.2.1.37" id="option-jekylldata"><span +class="header-section-number">2.2.1.37</span> Option <code>jekyllData</code></h4> <dl> <dt><code>jekyllData</code> (default value: <code>false</code>)</dt> @@ -4402,18 +4967,18 @@ class="header-section-number">2.2.1.33</span> Option href="https://pandoc.org/MANUAL.html#extension-yaml_metadata_block"><abbr>yaml</abbr> metadata block syntax extension</a> for entering metadata in <abbr>yaml</abbr>:</p> -<div class="sourceCode" id="cb269"><pre -class="sourceCode yaml"><code class="sourceCode yaml"><span id="cb269-1"><a href="#cb269-1" aria-hidden="true" tabindex="-1"></a><span class="pp">---</span></span> -<span id="cb269-2"><a href="#cb269-2" aria-hidden="true" tabindex="-1"></a><span class="fu">title</span><span class="kw">:</span><span class="at"> </span><span class="st">'This is the title: it contains a colon'</span></span> -<span id="cb269-3"><a href="#cb269-3" aria-hidden="true" tabindex="-1"></a><span class="fu">author</span><span class="kw">:</span></span> -<span id="cb269-4"><a href="#cb269-4" aria-hidden="true" tabindex="-1"></a><span class="kw">-</span><span class="at"> Author One</span></span> -<span id="cb269-5"><a href="#cb269-5" aria-hidden="true" tabindex="-1"></a><span class="kw">-</span><span class="at"> Author Two</span></span> -<span id="cb269-6"><a href="#cb269-6" aria-hidden="true" tabindex="-1"></a><span class="fu">keywords</span><span class="kw">:</span><span class="at"> </span><span class="kw">[</span><span class="at">nothing</span><span class="kw">,</span><span class="at"> nothingness</span><span class="kw">]</span></span> -<span id="cb269-7"><a href="#cb269-7" aria-hidden="true" tabindex="-1"></a><span class="fu">abstract</span><span class="kw">: </span><span class="ch">|</span></span> -<span id="cb269-8"><a href="#cb269-8" aria-hidden="true" tabindex="-1"></a> This is the abstract.</span> -<span id="cb269-9"><a href="#cb269-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb269-10"><a href="#cb269-10" aria-hidden="true" tabindex="-1"></a> It consists of two paragraphs.</span> -<span id="cb269-11"><a href="#cb269-11" aria-hidden="true" tabindex="-1"></a><span class="pp">---</span></span></code></pre></div> +<div class="sourceCode" id="cb297"><pre +class="sourceCode yaml"><code class="sourceCode yaml"><span id="cb297-1"><a href="#cb297-1" aria-hidden="true" tabindex="-1"></a><span class="pp">---</span></span> +<span id="cb297-2"><a href="#cb297-2" aria-hidden="true" tabindex="-1"></a><span class="fu">title</span><span class="kw">:</span><span class="at"> </span><span class="st">'This is the title: it contains a colon'</span></span> +<span id="cb297-3"><a href="#cb297-3" aria-hidden="true" tabindex="-1"></a><span class="fu">author</span><span class="kw">:</span></span> +<span id="cb297-4"><a href="#cb297-4" aria-hidden="true" tabindex="-1"></a><span class="kw">-</span><span class="at"> Author One</span></span> +<span id="cb297-5"><a href="#cb297-5" aria-hidden="true" tabindex="-1"></a><span class="kw">-</span><span class="at"> Author Two</span></span> +<span id="cb297-6"><a href="#cb297-6" aria-hidden="true" tabindex="-1"></a><span class="fu">keywords</span><span class="kw">:</span><span class="at"> </span><span class="kw">[</span><span class="at">nothing</span><span class="kw">,</span><span class="at"> nothingness</span><span class="kw">]</span></span> +<span id="cb297-7"><a href="#cb297-7" aria-hidden="true" tabindex="-1"></a><span class="fu">abstract</span><span class="kw">: </span><span class="ch">|</span></span> +<span id="cb297-8"><a href="#cb297-8" aria-hidden="true" tabindex="-1"></a> This is the abstract.</span> +<span id="cb297-9"><a href="#cb297-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb297-10"><a href="#cb297-10" aria-hidden="true" tabindex="-1"></a> It consists of two paragraphs.</span> +<span id="cb297-11"><a href="#cb297-11" aria-hidden="true" tabindex="-1"></a><span class="pp">---</span></span></code></pre></div> </dd> </dl> </dd> @@ -4427,109 +4992,109 @@ for entering metadata in <abbr>yaml</abbr>.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="plain-tex-example-10">Plain <span +<h5 class="unnumbered" id="plain-tex-example-12">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb270"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb270-1"><a href="#cb270-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb270-2"><a href="#cb270-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionJekyllData</span>{true}</span> -<span id="cb270-3"><a href="#cb270-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> -<span id="cb270-4"><a href="#cb270-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\keys</span>_define:nn</span> -<span id="cb270-5"><a href="#cb270-5" aria-hidden="true" tabindex="-1"></a> { markdown/jekyllData }</span> -<span id="cb270-6"><a href="#cb270-6" aria-hidden="true" tabindex="-1"></a> {</span> -<span id="cb270-7"><a href="#cb270-7" aria-hidden="true" tabindex="-1"></a> name .code:n = { <span class="fu">\gdef\name</span>{#1} },</span> -<span id="cb270-8"><a href="#cb270-8" aria-hidden="true" tabindex="-1"></a> age .code:n = { <span class="fu">\gdef\age</span>{#1} },</span> -<span id="cb270-9"><a href="#cb270-9" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb270-10"><a href="#cb270-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> -<span id="cb270-11"><a href="#cb270-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataEnd</span>{<span class="co">%</span></span> -<span id="cb270-12"><a href="#cb270-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.}</span> -<span id="cb270-13"><a href="#cb270-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb270-14"><a href="#cb270-14" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb270-15"><a href="#cb270-15" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> -<span id="cb270-16"><a href="#cb270-16" aria-hidden="true" tabindex="-1"></a>age: 99</span> -<span id="cb270-17"><a href="#cb270-17" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb270-18"><a href="#cb270-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb270-19"><a href="#cb270-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb298"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb298-1"><a href="#cb298-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb298-2"><a href="#cb298-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionJekyllData</span>{true}</span> +<span id="cb298-3"><a href="#cb298-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> +<span id="cb298-4"><a href="#cb298-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\keys</span>_define:nn</span> +<span id="cb298-5"><a href="#cb298-5" aria-hidden="true" tabindex="-1"></a> { markdown/jekyllData }</span> +<span id="cb298-6"><a href="#cb298-6" aria-hidden="true" tabindex="-1"></a> {</span> +<span id="cb298-7"><a href="#cb298-7" aria-hidden="true" tabindex="-1"></a> name .code:n = { <span class="fu">\gdef\name</span>{#1} },</span> +<span id="cb298-8"><a href="#cb298-8" aria-hidden="true" tabindex="-1"></a> age .code:n = { <span class="fu">\gdef\age</span>{#1} },</span> +<span id="cb298-9"><a href="#cb298-9" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb298-10"><a href="#cb298-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> +<span id="cb298-11"><a href="#cb298-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataEnd</span>{<span class="co">%</span></span> +<span id="cb298-12"><a href="#cb298-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.}</span> +<span id="cb298-13"><a href="#cb298-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb298-14"><a href="#cb298-14" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb298-15"><a href="#cb298-15" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> +<span id="cb298-16"><a href="#cb298-16" aria-hidden="true" tabindex="-1"></a>age: 99</span> +<span id="cb298-17"><a href="#cb298-17" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb298-18"><a href="#cb298-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb298-19"><a href="#cb298-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb271"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb271-1"><a href="#cb271-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb299"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb299-1"><a href="#cb299-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Jane Doe is 99 years old.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-28"><span +<h5 class="unnumbered" id="latex-example-29"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb272"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb272-1"><a href="#cb272-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb272-2"><a href="#cb272-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[jekyllData]{<span class="ex">markdown</span>}</span> -<span id="cb272-3"><a href="#cb272-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb272-4"><a href="#cb272-4" aria-hidden="true" tabindex="-1"></a> jekyllDataRenderers = {</span> -<span id="cb272-5"><a href="#cb272-5" aria-hidden="true" tabindex="-1"></a> name = {<span class="fu">\gdef\name</span>{#1}},</span> -<span id="cb272-6"><a href="#cb272-6" aria-hidden="true" tabindex="-1"></a> code = {<span class="fu">\gdef\age</span>{#1}},</span> -<span id="cb272-7"><a href="#cb272-7" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb272-8"><a href="#cb272-8" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb272-9"><a href="#cb272-9" aria-hidden="true" tabindex="-1"></a> jekyllDataEnd = {<span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.},</span> -<span id="cb272-10"><a href="#cb272-10" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb272-11"><a href="#cb272-11" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb272-12"><a href="#cb272-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb272-13"><a href="#cb272-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb272-14"><a href="#cb272-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb272-15"><a href="#cb272-15" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb272-16"><a href="#cb272-16" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> -<span id="cb272-17"><a href="#cb272-17" aria-hidden="true" tabindex="-1"></a>age: 99</span> -<span id="cb272-18"><a href="#cb272-18" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb272-19"><a href="#cb272-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb272-20"><a href="#cb272-20" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb272-21"><a href="#cb272-21" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb300"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb300-1"><a href="#cb300-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb300-2"><a href="#cb300-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[jekyllData]{<span class="ex">markdown</span>}</span> +<span id="cb300-3"><a href="#cb300-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb300-4"><a href="#cb300-4" aria-hidden="true" tabindex="-1"></a> jekyllDataRenderers = {</span> +<span id="cb300-5"><a href="#cb300-5" aria-hidden="true" tabindex="-1"></a> name = {<span class="fu">\gdef\name</span>{#1}},</span> +<span id="cb300-6"><a href="#cb300-6" aria-hidden="true" tabindex="-1"></a> code = {<span class="fu">\gdef\age</span>{#1}},</span> +<span id="cb300-7"><a href="#cb300-7" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb300-8"><a href="#cb300-8" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb300-9"><a href="#cb300-9" aria-hidden="true" tabindex="-1"></a> jekyllDataEnd = {<span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.},</span> +<span id="cb300-10"><a href="#cb300-10" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb300-11"><a href="#cb300-11" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb300-12"><a href="#cb300-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb300-13"><a href="#cb300-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb300-14"><a href="#cb300-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb300-15"><a href="#cb300-15" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb300-16"><a href="#cb300-16" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> +<span id="cb300-17"><a href="#cb300-17" aria-hidden="true" tabindex="-1"></a>age: 99</span> +<span id="cb300-18"><a href="#cb300-18" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb300-19"><a href="#cb300-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb300-20"><a href="#cb300-20" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb300-21"><a href="#cb300-21" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb273"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb273-1"><a href="#cb273-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb301"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb301-1"><a href="#cb301-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Jane Doe is 99 years old.</p> </blockquote> -<h5 class="unnumbered" id="context-example-17">Con<span +<h5 class="unnumbered" id="context-example-19">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb274"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb274-1"><a href="#cb274-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb274-2"><a href="#cb274-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[jekyllData = yes]</span> -<span id="cb274-3"><a href="#cb274-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> -<span id="cb274-4"><a href="#cb274-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\keys</span>_define:nn</span> -<span id="cb274-5"><a href="#cb274-5" aria-hidden="true" tabindex="-1"></a> { markdown/jekyllData }</span> -<span id="cb274-6"><a href="#cb274-6" aria-hidden="true" tabindex="-1"></a> {</span> -<span id="cb274-7"><a href="#cb274-7" aria-hidden="true" tabindex="-1"></a> name .code:n = { <span class="fu">\gdef\name</span>{#1} },</span> -<span id="cb274-8"><a href="#cb274-8" aria-hidden="true" tabindex="-1"></a> age .code:n = { <span class="fu">\gdef\age</span>{#1} },</span> -<span id="cb274-9"><a href="#cb274-9" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb274-10"><a href="#cb274-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> -<span id="cb274-11"><a href="#cb274-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataEnd</span>{<span class="co">%</span></span> -<span id="cb274-12"><a href="#cb274-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.}</span> -<span id="cb274-13"><a href="#cb274-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb274-14"><a href="#cb274-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb274-15"><a href="#cb274-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb274-16"><a href="#cb274-16" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb274-17"><a href="#cb274-17" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> -<span id="cb274-18"><a href="#cb274-18" aria-hidden="true" tabindex="-1"></a>age: 99</span> -<span id="cb274-19"><a href="#cb274-19" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb274-20"><a href="#cb274-20" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb274-21"><a href="#cb274-21" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb274-22"><a href="#cb274-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb302"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb302-1"><a href="#cb302-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb302-2"><a href="#cb302-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[jekyllData = yes]</span> +<span id="cb302-3"><a href="#cb302-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> +<span id="cb302-4"><a href="#cb302-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\keys</span>_define:nn</span> +<span id="cb302-5"><a href="#cb302-5" aria-hidden="true" tabindex="-1"></a> { markdown/jekyllData }</span> +<span id="cb302-6"><a href="#cb302-6" aria-hidden="true" tabindex="-1"></a> {</span> +<span id="cb302-7"><a href="#cb302-7" aria-hidden="true" tabindex="-1"></a> name .code:n = { <span class="fu">\gdef\name</span>{#1} },</span> +<span id="cb302-8"><a href="#cb302-8" aria-hidden="true" tabindex="-1"></a> age .code:n = { <span class="fu">\gdef\age</span>{#1} },</span> +<span id="cb302-9"><a href="#cb302-9" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb302-10"><a href="#cb302-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> +<span id="cb302-11"><a href="#cb302-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataEnd</span>{<span class="co">%</span></span> +<span id="cb302-12"><a href="#cb302-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.}</span> +<span id="cb302-13"><a href="#cb302-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb302-14"><a href="#cb302-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb302-15"><a href="#cb302-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb302-16"><a href="#cb302-16" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb302-17"><a href="#cb302-17" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> +<span id="cb302-18"><a href="#cb302-18" aria-hidden="true" tabindex="-1"></a>age: 99</span> +<span id="cb302-19"><a href="#cb302-19" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb302-20"><a href="#cb302-20" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb302-21"><a href="#cb302-21" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb302-22"><a href="#cb302-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb275"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb275-1"><a href="#cb275-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb303"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb303-1"><a href="#cb303-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Jane Doe is 99 years old.</p> </blockquote> -<h4 data-number="2.2.1.34" id="option-linkattributes"><span -class="header-section-number">2.2.1.34</span> Option +<h4 data-number="2.2.1.38" id="option-linkattributes"><span +class="header-section-number">2.2.1.38</span> Option <code>linkAttributes</code></h4> <dl> <dt><code>linkAttributes</code> (default value: <code>false</code>)</dt> @@ -4540,11 +5105,11 @@ class="header-section-number">2.2.1.34</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-link_attributes">link and image attribute syntax extension</a>:</p> -<div class="sourceCode" id="cb276"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb276-1"><a href="#cb276-1" aria-hidden="true" tabindex="-1"></a>An inline <span class="al">![image](foo.jpg)</span>{#id .class width=30 height=20px}</span> -<span id="cb276-2"><a href="#cb276-2" aria-hidden="true" tabindex="-1"></a>and a reference <span class="al">![image][ref]</span> with attributes.</span> -<span id="cb276-3"><a href="#cb276-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb276-4"><a href="#cb276-4" aria-hidden="true" tabindex="-1"></a><span class="ot">[ref]: </span>foo.jpg "optional title" {#id .class key=val key2=val2}</span></code></pre></div> +<div class="sourceCode" id="cb304"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb304-1"><a href="#cb304-1" aria-hidden="true" tabindex="-1"></a>An inline <span class="al">![image](foo.jpg)</span>{#id .class width=30 height=20px}</span> +<span id="cb304-2"><a href="#cb304-2" aria-hidden="true" tabindex="-1"></a>and a reference <span class="al">![image][ref]</span> with attributes.</span> +<span id="cb304-3"><a href="#cb304-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb304-4"><a href="#cb304-4" aria-hidden="true" tabindex="-1"></a><span class="ot">[ref]: </span>foo.jpg "optional title" {#id .class key=val key2=val2}</span></code></pre></div> </dd> </dl> </dd> @@ -4557,51 +5122,51 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb276-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-29"><span +<h5 class="unnumbered" id="latex-example-30"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb277"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb277-1"><a href="#cb277-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb277-2"><a href="#cb277-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[linkAttributes]{<span class="ex">markdown</span>}</span> -<span id="cb277-3"><a href="#cb277-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">expl3, graphicx</span>}</span> -<span id="cb277-4"><a href="#cb277-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> -<span id="cb277-5"><a href="#cb277-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb277-6"><a href="#cb277-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb277-7"><a href="#cb277-7" aria-hidden="true" tabindex="-1"></a> imageAttributeContextBegin = {</span> -<span id="cb277-8"><a href="#cb277-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_begin:</span> -<span id="cb277-9"><a href="#cb277-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{</span> -<span id="cb277-10"><a href="#cb277-10" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb277-11"><a href="#cb277-11" aria-hidden="true" tabindex="-1"></a> attributeKeyValue = {</span> -<span id="cb277-12"><a href="#cb277-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\setkeys</span></span> -<span id="cb277-13"><a href="#cb277-13" aria-hidden="true" tabindex="-1"></a> { Gin }</span> -<span id="cb277-14"><a href="#cb277-14" aria-hidden="true" tabindex="-1"></a> { { ##1 } = { ##2 } }</span> -<span id="cb277-15"><a href="#cb277-15" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb277-16"><a href="#cb277-16" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb277-17"><a href="#cb277-17" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb277-18"><a href="#cb277-18" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb277-19"><a href="#cb277-19" aria-hidden="true" tabindex="-1"></a> imageAttributeContextEnd = {</span> -<span id="cb277-20"><a href="#cb277-20" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_end:</span> -<span id="cb277-21"><a href="#cb277-21" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb277-22"><a href="#cb277-22" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb277-23"><a href="#cb277-23" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb277-24"><a href="#cb277-24" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> -<span id="cb277-25"><a href="#cb277-25" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb277-26"><a href="#cb277-26" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb277-27"><a href="#cb277-27" aria-hidden="true" tabindex="-1"></a>Here is an example image:</span> -<span id="cb277-28"><a href="#cb277-28" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb277-29"><a href="#cb277-29" aria-hidden="true" tabindex="-1"></a> ![example image](example-image){width=5cm height=4cm}</span> -<span id="cb277-30"><a href="#cb277-30" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb277-31"><a href="#cb277-31" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb305"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb305-1"><a href="#cb305-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb305-2"><a href="#cb305-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[linkAttributes]{<span class="ex">markdown</span>}</span> +<span id="cb305-3"><a href="#cb305-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">expl3, graphicx</span>}</span> +<span id="cb305-4"><a href="#cb305-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> +<span id="cb305-5"><a href="#cb305-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb305-6"><a href="#cb305-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb305-7"><a href="#cb305-7" aria-hidden="true" tabindex="-1"></a> imageAttributeContextBegin = {</span> +<span id="cb305-8"><a href="#cb305-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_begin:</span> +<span id="cb305-9"><a href="#cb305-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{</span> +<span id="cb305-10"><a href="#cb305-10" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb305-11"><a href="#cb305-11" aria-hidden="true" tabindex="-1"></a> attributeKeyValue = {</span> +<span id="cb305-12"><a href="#cb305-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\setkeys</span></span> +<span id="cb305-13"><a href="#cb305-13" aria-hidden="true" tabindex="-1"></a> { Gin }</span> +<span id="cb305-14"><a href="#cb305-14" aria-hidden="true" tabindex="-1"></a> { { ##1 } = { ##2 } }</span> +<span id="cb305-15"><a href="#cb305-15" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb305-16"><a href="#cb305-16" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb305-17"><a href="#cb305-17" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb305-18"><a href="#cb305-18" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb305-19"><a href="#cb305-19" aria-hidden="true" tabindex="-1"></a> imageAttributeContextEnd = {</span> +<span id="cb305-20"><a href="#cb305-20" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_end:</span> +<span id="cb305-21"><a href="#cb305-21" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb305-22"><a href="#cb305-22" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb305-23"><a href="#cb305-23" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb305-24"><a href="#cb305-24" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> +<span id="cb305-25"><a href="#cb305-25" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb305-26"><a href="#cb305-26" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb305-27"><a href="#cb305-27" aria-hidden="true" tabindex="-1"></a>Here is an example image:</span> +<span id="cb305-28"><a href="#cb305-28" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb305-29"><a href="#cb305-29" aria-hidden="true" tabindex="-1"></a> ![example image](example-image){width=5cm height=4cm}</span> +<span id="cb305-30"><a href="#cb305-30" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb305-31"><a href="#cb305-31" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb278"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb278-1"><a href="#cb278-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb306"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb306-1"><a href="#cb306-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain an example image (from <a href="https://ctan.org/pkg/mwe" title="mwe – Packages and image files for MWEs">Martin Scharrer’s mwe package</a>) displayed at size 5cm × 4cm.</p> -<h4 data-number="2.2.1.35" id="option-lineblocks"><span -class="header-section-number">2.2.1.35</span> Option +<h4 data-number="2.2.1.39" id="option-lineblocks"><span +class="header-section-number">2.2.1.39</span> Option <code>lineBlocks</code></h4> <dl> <dt><code>lineBlocks</code> (default value: <code>false</code>)</dt> @@ -4612,12 +5177,12 @@ class="header-section-number">2.2.1.35</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-line_blocks">line block syntax extension</a>:</p> -<div class="sourceCode" id="cb279"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb279-1"><a href="#cb279-1" aria-hidden="true" tabindex="-1"></a>| this is a line block that</span> -<span id="cb279-2"><a href="#cb279-2" aria-hidden="true" tabindex="-1"></a>| spans multiple</span> -<span id="cb279-3"><a href="#cb279-3" aria-hidden="true" tabindex="-1"></a>| even</span> -<span id="cb279-4"><a href="#cb279-4" aria-hidden="true" tabindex="-1"></a> discontinuous</span> -<span id="cb279-5"><a href="#cb279-5" aria-hidden="true" tabindex="-1"></a>| lines</span></code></pre></div> +<div class="sourceCode" id="cb307"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb307-1"><a href="#cb307-1" aria-hidden="true" tabindex="-1"></a>| this is a line block that</span> +<span id="cb307-2"><a href="#cb307-2" aria-hidden="true" tabindex="-1"></a>| spans multiple</span> +<span id="cb307-3"><a href="#cb307-3" aria-hidden="true" tabindex="-1"></a>| even</span> +<span id="cb307-4"><a href="#cb307-4" aria-hidden="true" tabindex="-1"></a> discontinuous</span> +<span id="cb307-5"><a href="#cb307-5" aria-hidden="true" tabindex="-1"></a>| lines</span></code></pre></div> </dd> </dl> </dd> @@ -4630,23 +5195,23 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb279-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="plain-tex-example-11">Plain <span +<h5 class="unnumbered" id="plain-tex-example-13">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb280"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb280-1"><a href="#cb280-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb280-2"><a href="#cb280-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionLineBlocks</span>{true}</span> -<span id="cb280-3"><a href="#cb280-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb280-4"><a href="#cb280-4" aria-hidden="true" tabindex="-1"></a>| I would spread the cloths under your feet:</span> -<span id="cb280-5"><a href="#cb280-5" aria-hidden="true" tabindex="-1"></a>| But I, being poor, have only my dreams;</span> -<span id="cb280-6"><a href="#cb280-6" aria-hidden="true" tabindex="-1"></a>| I have spread my dreams under your feet;</span> -<span id="cb280-7"><a href="#cb280-7" aria-hidden="true" tabindex="-1"></a>| Tread softly because you tread on my dreams.</span> -<span id="cb280-8"><a href="#cb280-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb280-9"><a href="#cb280-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb308"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb308-1"><a href="#cb308-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb308-2"><a href="#cb308-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionLineBlocks</span>{true}</span> +<span id="cb308-3"><a href="#cb308-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb308-4"><a href="#cb308-4" aria-hidden="true" tabindex="-1"></a>| I would spread the cloths under your feet:</span> +<span id="cb308-5"><a href="#cb308-5" aria-hidden="true" tabindex="-1"></a>| But I, being poor, have only my dreams;</span> +<span id="cb308-6"><a href="#cb308-6" aria-hidden="true" tabindex="-1"></a>| I have spread my dreams under your feet;</span> +<span id="cb308-7"><a href="#cb308-7" aria-hidden="true" tabindex="-1"></a>| Tread softly because you tread on my dreams.</span> +<span id="cb308-8"><a href="#cb308-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb308-9"><a href="#cb308-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb281"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb281-1"><a href="#cb281-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb309"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb309-1"><a href="#cb309-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -4655,24 +5220,24 @@ But I, being poor, have only my dreams;<br /> I have spread my dreams under your feet;<br /> Tread softly because you tread on my dreams.</div> </blockquote> -<h5 class="unnumbered" id="latex-example-30"><span +<h5 class="unnumbered" id="latex-example-31"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb282"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb282-1"><a href="#cb282-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb282-2"><a href="#cb282-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[lineBlocks]{<span class="ex">markdown</span>}</span> -<span id="cb282-3"><a href="#cb282-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb282-4"><a href="#cb282-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb282-5"><a href="#cb282-5" aria-hidden="true" tabindex="-1"></a>| I would spread the cloths under your feet:</span> -<span id="cb282-6"><a href="#cb282-6" aria-hidden="true" tabindex="-1"></a>| But I, being poor, have only my dreams;</span> -<span id="cb282-7"><a href="#cb282-7" aria-hidden="true" tabindex="-1"></a>| I have spread my dreams under your feet;</span> -<span id="cb282-8"><a href="#cb282-8" aria-hidden="true" tabindex="-1"></a>| Tread softly because you tread on my dreams.</span> -<span id="cb282-9"><a href="#cb282-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb282-10"><a href="#cb282-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb310"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb310-1"><a href="#cb310-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb310-2"><a href="#cb310-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[lineBlocks]{<span class="ex">markdown</span>}</span> +<span id="cb310-3"><a href="#cb310-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb310-4"><a href="#cb310-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb310-5"><a href="#cb310-5" aria-hidden="true" tabindex="-1"></a>| I would spread the cloths under your feet:</span> +<span id="cb310-6"><a href="#cb310-6" aria-hidden="true" tabindex="-1"></a>| But I, being poor, have only my dreams;</span> +<span id="cb310-7"><a href="#cb310-7" aria-hidden="true" tabindex="-1"></a>| I have spread my dreams under your feet;</span> +<span id="cb310-8"><a href="#cb310-8" aria-hidden="true" tabindex="-1"></a>| Tread softly because you tread on my dreams.</span> +<span id="cb310-9"><a href="#cb310-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb310-10"><a href="#cb310-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb283"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb283-1"><a href="#cb283-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb311"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb311-1"><a href="#cb311-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -4681,24 +5246,24 @@ But I, being poor, have only my dreams;<br /> I have spread my dreams under your feet;<br /> Tread softly because you tread on my dreams.</div> </blockquote> -<h5 class="unnumbered" id="context-example-18">Con<span +<h5 class="unnumbered" id="context-example-20">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb284"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb284-1"><a href="#cb284-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb284-2"><a href="#cb284-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[lineBlocks = yes]</span> -<span id="cb284-3"><a href="#cb284-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb284-4"><a href="#cb284-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb284-5"><a href="#cb284-5" aria-hidden="true" tabindex="-1"></a>| I would spread the cloths under your feet:</span> -<span id="cb284-6"><a href="#cb284-6" aria-hidden="true" tabindex="-1"></a>| But I, being poor, have only my dreams;</span> -<span id="cb284-7"><a href="#cb284-7" aria-hidden="true" tabindex="-1"></a>| I have spread my dreams under your feet;</span> -<span id="cb284-8"><a href="#cb284-8" aria-hidden="true" tabindex="-1"></a>| Tread softly because you tread on my dreams.</span> -<span id="cb284-9"><a href="#cb284-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb284-10"><a href="#cb284-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb312"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb312-1"><a href="#cb312-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb312-2"><a href="#cb312-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[lineBlocks = yes]</span> +<span id="cb312-3"><a href="#cb312-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb312-4"><a href="#cb312-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb312-5"><a href="#cb312-5" aria-hidden="true" tabindex="-1"></a>| I would spread the cloths under your feet:</span> +<span id="cb312-6"><a href="#cb312-6" aria-hidden="true" tabindex="-1"></a>| But I, being poor, have only my dreams;</span> +<span id="cb312-7"><a href="#cb312-7" aria-hidden="true" tabindex="-1"></a>| I have spread my dreams under your feet;</span> +<span id="cb312-8"><a href="#cb312-8" aria-hidden="true" tabindex="-1"></a>| Tread softly because you tread on my dreams.</span> +<span id="cb312-9"><a href="#cb312-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb312-10"><a href="#cb312-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb285"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb285-1"><a href="#cb285-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb313"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb313-1"><a href="#cb313-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -4707,8 +5272,56 @@ But I, being poor, have only my dreams;<br /> I have spread my dreams under your feet;<br /> Tread softly because you tread on my dreams.</div> </blockquote> -<h4 data-number="2.2.1.36" id="option-notes"><span -class="header-section-number">2.2.1.36</span> Option +<h4 data-number="2.2.1.40" id="option-mark"><span +class="header-section-number">2.2.1.40</span> Option +<code>mark</code></h4> +<dl> +<dt><code>mark</code> (default value: <code>false</code>)</dt> +<dd> +<dl> +<dt>true</dt> +<dd> +<p>Enable the Pandoc <a +href="https://pandoc.org/MANUAL.html#extension-mark">mark syntax +extension</a>:</p> +<div class="sourceCode" id="cb314"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb314-1"><a href="#cb314-1" aria-hidden="true" tabindex="-1"></a>This ==is highlighted text.==</span></code></pre></div> +</dd> +</dl> +</dd> +<dd> +<dl> +<dt>false</dt> +<dd> +<p>Disable the Pandoc mark syntax extension.</p> +</dd> +</dl> +</dd> +</dl> +<h5 class="unnumbered" id="latex-example-32"><span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb315"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb315-1"><a href="#cb315-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb315-2"><a href="#cb315-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[mark]{<span class="ex">markdown</span>}</span> +<span id="cb315-3"><a href="#cb315-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb315-4"><a href="#cb315-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb315-5"><a href="#cb315-5" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb315-6"><a href="#cb315-6" aria-hidden="true" tabindex="-1"></a>This ==is highlighted text.==</span> +<span id="cb315-7"><a href="#cb315-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb315-8"><a href="#cb315-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb315-9"><a href="#cb315-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb316"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb316-1"><a href="#cb316-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>This <mark>is highlighted text.</mark></p> +</blockquote> +<h4 data-number="2.2.1.41" id="option-notes"><span +class="header-section-number">2.2.1.41</span> Option <code>notes</code></h4> <dl> <dt><code>notes</code> (default value: <code>false</code>)</dt> @@ -4719,24 +5332,24 @@ class="header-section-number">2.2.1.36</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-footnotes">note syntax extension</a>:</p> -<div class="sourceCode" id="cb286"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb286-1"><a href="#cb286-1" aria-hidden="true" tabindex="-1"></a>Here is a note reference,<span class="ot">[^1]</span> and another.<span class="ot">[^longnote]</span></span> -<span id="cb286-2"><a href="#cb286-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb286-3"><a href="#cb286-3" aria-hidden="true" tabindex="-1"></a><span class="ot">[^1]: </span>Here is the note.</span> -<span id="cb286-4"><a href="#cb286-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb286-5"><a href="#cb286-5" aria-hidden="true" tabindex="-1"></a><span class="ot">[^longnote]: </span>Here's one with multiple blocks.</span> -<span id="cb286-6"><a href="#cb286-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb286-7"><a href="#cb286-7" aria-hidden="true" tabindex="-1"></a><span class="in"> Subsequent paragraphs are indented to show that they</span></span> -<span id="cb286-8"><a href="#cb286-8" aria-hidden="true" tabindex="-1"></a>belong to the previous note.</span> -<span id="cb286-9"><a href="#cb286-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb286-10"><a href="#cb286-10" aria-hidden="true" tabindex="-1"></a><span class="in"> { some.code }</span></span> -<span id="cb286-11"><a href="#cb286-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb286-12"><a href="#cb286-12" aria-hidden="true" tabindex="-1"></a><span class="in"> The whole paragraph can be indented, or just the</span></span> -<span id="cb286-13"><a href="#cb286-13" aria-hidden="true" tabindex="-1"></a><span class="in"> first line. In this way, multi-paragraph notes</span></span> -<span id="cb286-14"><a href="#cb286-14" aria-hidden="true" tabindex="-1"></a><span class="in"> work like multi-paragraph list items.</span></span> -<span id="cb286-15"><a href="#cb286-15" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb286-16"><a href="#cb286-16" aria-hidden="true" tabindex="-1"></a>This paragraph won't be part of the note, because it</span> -<span id="cb286-17"><a href="#cb286-17" aria-hidden="true" tabindex="-1"></a>isn't indented.</span></code></pre></div> +<div class="sourceCode" id="cb317"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb317-1"><a href="#cb317-1" aria-hidden="true" tabindex="-1"></a>Here is a note reference,<span class="ot">[^1]</span> and another.<span class="ot">[^longnote]</span></span> +<span id="cb317-2"><a href="#cb317-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb317-3"><a href="#cb317-3" aria-hidden="true" tabindex="-1"></a><span class="ot">[^1]: </span>Here is the note.</span> +<span id="cb317-4"><a href="#cb317-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb317-5"><a href="#cb317-5" aria-hidden="true" tabindex="-1"></a><span class="ot">[^longnote]: </span>Here's one with multiple blocks.</span> +<span id="cb317-6"><a href="#cb317-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb317-7"><a href="#cb317-7" aria-hidden="true" tabindex="-1"></a><span class="in"> Subsequent paragraphs are indented to show that they</span></span> +<span id="cb317-8"><a href="#cb317-8" aria-hidden="true" tabindex="-1"></a>belong to the previous note.</span> +<span id="cb317-9"><a href="#cb317-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb317-10"><a href="#cb317-10" aria-hidden="true" tabindex="-1"></a><span class="in"> { some.code }</span></span> +<span id="cb317-11"><a href="#cb317-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb317-12"><a href="#cb317-12" aria-hidden="true" tabindex="-1"></a><span class="in"> The whole paragraph can be indented, or just the</span></span> +<span id="cb317-13"><a href="#cb317-13" aria-hidden="true" tabindex="-1"></a><span class="in"> first line. In this way, multi-paragraph notes</span></span> +<span id="cb317-14"><a href="#cb317-14" aria-hidden="true" tabindex="-1"></a><span class="in"> work like multi-paragraph list items.</span></span> +<span id="cb317-15"><a href="#cb317-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb317-16"><a href="#cb317-16" aria-hidden="true" tabindex="-1"></a>This paragraph won't be part of the note, because it</span> +<span id="cb317-17"><a href="#cb317-17" aria-hidden="true" tabindex="-1"></a>isn't indented.</span></code></pre></div> </dd> </dl> </dd> @@ -4749,37 +5362,37 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb286-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-31"><span +<h5 class="unnumbered" id="latex-example-33"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb287"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb287-1"><a href="#cb287-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb287-2"><a href="#cb287-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[notes]{<span class="ex">markdown</span>}</span> -<span id="cb287-3"><a href="#cb287-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb287-4"><a href="#cb287-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb287-5"><a href="#cb287-5" aria-hidden="true" tabindex="-1"></a>Here is a note reference,[^1] and another.[^longnote]</span> -<span id="cb287-6"><a href="#cb287-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb287-7"><a href="#cb287-7" aria-hidden="true" tabindex="-1"></a>[^1]: Here is the note.</span> -<span id="cb287-8"><a href="#cb287-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb287-9"><a href="#cb287-9" aria-hidden="true" tabindex="-1"></a>[^longnote]: Here's one with multiple blocks.</span> -<span id="cb287-10"><a href="#cb287-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb287-11"><a href="#cb287-11" aria-hidden="true" tabindex="-1"></a> Subsequent paragraphs are indented to show that they</span> -<span id="cb287-12"><a href="#cb287-12" aria-hidden="true" tabindex="-1"></a>belong to the previous note.</span> -<span id="cb287-13"><a href="#cb287-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb287-14"><a href="#cb287-14" aria-hidden="true" tabindex="-1"></a> { some.code }</span> -<span id="cb287-15"><a href="#cb287-15" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb287-16"><a href="#cb287-16" aria-hidden="true" tabindex="-1"></a> The whole paragraph can be indented, or just the</span> -<span id="cb287-17"><a href="#cb287-17" aria-hidden="true" tabindex="-1"></a> first line. In this way, multi-paragraph notes</span> -<span id="cb287-18"><a href="#cb287-18" aria-hidden="true" tabindex="-1"></a> work like multi-paragraph list items.</span> -<span id="cb287-19"><a href="#cb287-19" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb287-20"><a href="#cb287-20" aria-hidden="true" tabindex="-1"></a>This paragraph won't be part of the note, because it</span> -<span id="cb287-21"><a href="#cb287-21" aria-hidden="true" tabindex="-1"></a>isn't indented.</span> -<span id="cb287-22"><a href="#cb287-22" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb287-23"><a href="#cb287-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb318"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb318-1"><a href="#cb318-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb318-2"><a href="#cb318-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[notes]{<span class="ex">markdown</span>}</span> +<span id="cb318-3"><a href="#cb318-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb318-4"><a href="#cb318-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb318-5"><a href="#cb318-5" aria-hidden="true" tabindex="-1"></a>Here is a note reference,[^1] and another.[^longnote]</span> +<span id="cb318-6"><a href="#cb318-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb318-7"><a href="#cb318-7" aria-hidden="true" tabindex="-1"></a>[^1]: Here is the note.</span> +<span id="cb318-8"><a href="#cb318-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb318-9"><a href="#cb318-9" aria-hidden="true" tabindex="-1"></a>[^longnote]: Here's one with multiple blocks.</span> +<span id="cb318-10"><a href="#cb318-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb318-11"><a href="#cb318-11" aria-hidden="true" tabindex="-1"></a> Subsequent paragraphs are indented to show that they</span> +<span id="cb318-12"><a href="#cb318-12" aria-hidden="true" tabindex="-1"></a>belong to the previous note.</span> +<span id="cb318-13"><a href="#cb318-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb318-14"><a href="#cb318-14" aria-hidden="true" tabindex="-1"></a> { some.code }</span> +<span id="cb318-15"><a href="#cb318-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb318-16"><a href="#cb318-16" aria-hidden="true" tabindex="-1"></a> The whole paragraph can be indented, or just the</span> +<span id="cb318-17"><a href="#cb318-17" aria-hidden="true" tabindex="-1"></a> first line. In this way, multi-paragraph notes</span> +<span id="cb318-18"><a href="#cb318-18" aria-hidden="true" tabindex="-1"></a> work like multi-paragraph list items.</span> +<span id="cb318-19"><a href="#cb318-19" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb318-20"><a href="#cb318-20" aria-hidden="true" tabindex="-1"></a>This paragraph won't be part of the note, because it</span> +<span id="cb318-21"><a href="#cb318-21" aria-hidden="true" tabindex="-1"></a>isn't indented.</span> +<span id="cb318-22"><a href="#cb318-22" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb318-23"><a href="#cb318-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb288"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb288-1"><a href="#cb288-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb319"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb319-1"><a href="#cb319-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -4790,37 +5403,37 @@ role="doc-noteref"><sup>4</sup></a></p> <p>This paragraph won’t be part of the note, because it isn’t indented.</p> </blockquote> -<h5 class="unnumbered" id="context-example-19">Con<span +<h5 class="unnumbered" id="context-example-21">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb290"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb290-1"><a href="#cb290-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb290-2"><a href="#cb290-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[notes = yes]</span> -<span id="cb290-3"><a href="#cb290-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb290-4"><a href="#cb290-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb290-5"><a href="#cb290-5" aria-hidden="true" tabindex="-1"></a>Here is a note reference,[^1] and another.[^longnote]</span> -<span id="cb290-6"><a href="#cb290-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb290-7"><a href="#cb290-7" aria-hidden="true" tabindex="-1"></a>[^1]: Here is the note.</span> -<span id="cb290-8"><a href="#cb290-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb290-9"><a href="#cb290-9" aria-hidden="true" tabindex="-1"></a>[^longnote]: Here's one with multiple blocks.</span> -<span id="cb290-10"><a href="#cb290-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb290-11"><a href="#cb290-11" aria-hidden="true" tabindex="-1"></a> Subsequent paragraphs are indented to show that they</span> -<span id="cb290-12"><a href="#cb290-12" aria-hidden="true" tabindex="-1"></a>belong to the previous note.</span> -<span id="cb290-13"><a href="#cb290-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb290-14"><a href="#cb290-14" aria-hidden="true" tabindex="-1"></a> { some.code }</span> -<span id="cb290-15"><a href="#cb290-15" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb290-16"><a href="#cb290-16" aria-hidden="true" tabindex="-1"></a> The whole paragraph can be indented, or just the</span> -<span id="cb290-17"><a href="#cb290-17" aria-hidden="true" tabindex="-1"></a> first line. In this way, multi-paragraph notes</span> -<span id="cb290-18"><a href="#cb290-18" aria-hidden="true" tabindex="-1"></a> work like multi-paragraph list items.</span> -<span id="cb290-19"><a href="#cb290-19" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb290-20"><a href="#cb290-20" aria-hidden="true" tabindex="-1"></a>This paragraph won't be part of the note, because it</span> -<span id="cb290-21"><a href="#cb290-21" aria-hidden="true" tabindex="-1"></a>isn't indented.</span> -<span id="cb290-22"><a href="#cb290-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb290-23"><a href="#cb290-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb321"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb321-1"><a href="#cb321-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb321-2"><a href="#cb321-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[notes = yes]</span> +<span id="cb321-3"><a href="#cb321-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb321-4"><a href="#cb321-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb321-5"><a href="#cb321-5" aria-hidden="true" tabindex="-1"></a>Here is a note reference,[^1] and another.[^longnote]</span> +<span id="cb321-6"><a href="#cb321-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb321-7"><a href="#cb321-7" aria-hidden="true" tabindex="-1"></a>[^1]: Here is the note.</span> +<span id="cb321-8"><a href="#cb321-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb321-9"><a href="#cb321-9" aria-hidden="true" tabindex="-1"></a>[^longnote]: Here's one with multiple blocks.</span> +<span id="cb321-10"><a href="#cb321-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb321-11"><a href="#cb321-11" aria-hidden="true" tabindex="-1"></a> Subsequent paragraphs are indented to show that they</span> +<span id="cb321-12"><a href="#cb321-12" aria-hidden="true" tabindex="-1"></a>belong to the previous note.</span> +<span id="cb321-13"><a href="#cb321-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb321-14"><a href="#cb321-14" aria-hidden="true" tabindex="-1"></a> { some.code }</span> +<span id="cb321-15"><a href="#cb321-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb321-16"><a href="#cb321-16" aria-hidden="true" tabindex="-1"></a> The whole paragraph can be indented, or just the</span> +<span id="cb321-17"><a href="#cb321-17" aria-hidden="true" tabindex="-1"></a> first line. In this way, multi-paragraph notes</span> +<span id="cb321-18"><a href="#cb321-18" aria-hidden="true" tabindex="-1"></a> work like multi-paragraph list items.</span> +<span id="cb321-19"><a href="#cb321-19" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb321-20"><a href="#cb321-20" aria-hidden="true" tabindex="-1"></a>This paragraph won't be part of the note, because it</span> +<span id="cb321-21"><a href="#cb321-21" aria-hidden="true" tabindex="-1"></a>isn't indented.</span> +<span id="cb321-22"><a href="#cb321-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb321-23"><a href="#cb321-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb291"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb291-1"><a href="#cb291-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb322"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb322-1"><a href="#cb322-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -4831,8 +5444,8 @@ role="doc-noteref"><sup>6</sup></a></p> <p>This paragraph won’t be part of the note, because it isn’t indented.</p> </blockquote> -<h4 data-number="2.2.1.37" id="pipe-tables"><span -class="header-section-number">2.2.1.37</span> Option +<h4 data-number="2.2.1.42" id="pipe-tables"><span +class="header-section-number">2.2.1.42</span> Option <code>pipeTables</code></h4> <dl> <dt><code>pipeTables</code> (default value: <code>false</code>)</dt> @@ -4841,12 +5454,12 @@ class="header-section-number">2.2.1.37</span> Option <dt>true</dt> <dd> <p>Enable the <abbr>PHP</abbr> Markdown pipe table syntax extension:</p> -<div class="sourceCode" id="cb293"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb293-1"><a href="#cb293-1" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> -<span id="cb293-2"><a href="#cb293-2" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> -<span id="cb293-3"><a href="#cb293-3" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> -<span id="cb293-4"><a href="#cb293-4" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> -<span id="cb293-5"><a href="#cb293-5" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span></code></pre></div> +<div class="sourceCode" id="cb324"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb324-1"><a href="#cb324-1" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> +<span id="cb324-2"><a href="#cb324-2" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> +<span id="cb324-3"><a href="#cb324-3" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> +<span id="cb324-4"><a href="#cb324-4" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> +<span id="cb324-5"><a href="#cb324-5" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span></code></pre></div> </dd> </dl> </dd> @@ -4860,25 +5473,25 @@ extension.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-32"><span +<h5 class="unnumbered" id="latex-example-34"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb294"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb294-1"><a href="#cb294-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb294-2"><a href="#cb294-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[pipeTables]{<span class="ex">markdown</span>}</span> -<span id="cb294-3"><a href="#cb294-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb294-4"><a href="#cb294-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb294-5"><a href="#cb294-5" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> -<span id="cb294-6"><a href="#cb294-6" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> -<span id="cb294-7"><a href="#cb294-7" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> -<span id="cb294-8"><a href="#cb294-8" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> -<span id="cb294-9"><a href="#cb294-9" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> -<span id="cb294-10"><a href="#cb294-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb294-11"><a href="#cb294-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb325"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb325-1"><a href="#cb325-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb325-2"><a href="#cb325-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[pipeTables]{<span class="ex">markdown</span>}</span> +<span id="cb325-3"><a href="#cb325-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb325-4"><a href="#cb325-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb325-5"><a href="#cb325-5" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> +<span id="cb325-6"><a href="#cb325-6" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> +<span id="cb325-7"><a href="#cb325-7" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> +<span id="cb325-8"><a href="#cb325-8" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> +<span id="cb325-9"><a href="#cb325-9" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> +<span id="cb325-10"><a href="#cb325-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb325-11"><a href="#cb325-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb295"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb295-1"><a href="#cb295-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb326"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb326-1"><a href="#cb326-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -4913,25 +5526,25 @@ contain the following text:</p> </tbody> </table> </blockquote> -<h5 class="unnumbered" id="context-example-20">Con<span +<h5 class="unnumbered" id="context-example-22">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb296"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb296-1"><a href="#cb296-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb296-2"><a href="#cb296-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[pipeTables = yes]</span> -<span id="cb296-3"><a href="#cb296-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb296-4"><a href="#cb296-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb296-5"><a href="#cb296-5" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> -<span id="cb296-6"><a href="#cb296-6" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> -<span id="cb296-7"><a href="#cb296-7" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> -<span id="cb296-8"><a href="#cb296-8" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> -<span id="cb296-9"><a href="#cb296-9" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> -<span id="cb296-10"><a href="#cb296-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb296-11"><a href="#cb296-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb327"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb327-1"><a href="#cb327-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb327-2"><a href="#cb327-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[pipeTables = yes]</span> +<span id="cb327-3"><a href="#cb327-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb327-4"><a href="#cb327-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb327-5"><a href="#cb327-5" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> +<span id="cb327-6"><a href="#cb327-6" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> +<span id="cb327-7"><a href="#cb327-7" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> +<span id="cb327-8"><a href="#cb327-8" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> +<span id="cb327-9"><a href="#cb327-9" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> +<span id="cb327-10"><a href="#cb327-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb327-11"><a href="#cb327-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb297"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb297-1"><a href="#cb297-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb328"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb328-1"><a href="#cb328-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -4966,11 +5579,11 @@ contain the following text:</p> </tbody> </table> </blockquote> -<h4 data-number="2.2.1.38" id="option-preservetabs"><span -class="header-section-number">2.2.1.38</span> Option +<h4 data-number="2.2.1.43" id="option-preservetabs"><span +class="header-section-number">2.2.1.43</span> Option <code>preserveTabs</code></h4> <dl> -<dt><code>preserveTabs</code> (default value: <code>false</code>)</dt> +<dt><code>preserveTabs</code> (default value: <code>true</code>)</dt> <dd> <dl> <dt>true</dt> @@ -4988,8 +5601,8 @@ class="header-section-number">2.2.1.38</span> Option </dl> </dd> </dl> -<h4 data-number="2.2.1.39" id="option-rawattribute"><span -class="header-section-number">2.2.1.39</span> Option +<h4 data-number="2.2.1.44" id="option-rawattribute"><span +class="header-section-number">2.2.1.44</span> Option <code>rawAttribute</code></h4> <dl> <dt><code>rawAttribute</code> (default value: <code>false</code>)</dt> @@ -5000,20 +5613,20 @@ class="header-section-number">2.2.1.39</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-raw_attribute">raw attribute syntax extension</a>:</p> -<div class="sourceCode" id="cb298"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb298-1"><a href="#cb298-1" aria-hidden="true" tabindex="-1"></a><span class="in">`$H_2 O$`</span>{=tex} is a liquid.</span></code></pre></div> +<div class="sourceCode" id="cb329"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb329-1"><a href="#cb329-1" aria-hidden="true" tabindex="-1"></a><span class="in">`$H_2 O$`</span>{=tex} is a liquid.</span></code></pre></div> <p>To enable raw blocks, the <strong><code>fencedCode</code></strong> option must also be enabled:</p> -<div class="sourceCode" id="cb299"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb299-1"><a href="#cb299-1" aria-hidden="true" tabindex="-1"></a><span class="an">Here is a mathematical formula:</span></span> -<span id="cb299-2"><a href="#cb299-2" aria-hidden="true" tabindex="-1"></a><span class="in">``` {=tex}</span></span> -<span id="cb299-3"><a href="#cb299-3" aria-hidden="true" tabindex="-1"></a><span class="in">\[distance[i] =</span></span> -<span id="cb299-4"><a href="#cb299-4" aria-hidden="true" tabindex="-1"></a><span class="in"> \begin{dcases}</span></span> -<span id="cb299-5"><a href="#cb299-5" aria-hidden="true" tabindex="-1"></a><span class="in"> a & b \\</span></span> -<span id="cb299-6"><a href="#cb299-6" aria-hidden="true" tabindex="-1"></a><span class="in"> c & d</span></span> -<span id="cb299-7"><a href="#cb299-7" aria-hidden="true" tabindex="-1"></a><span class="in"> \end{dcases}</span></span> -<span id="cb299-8"><a href="#cb299-8" aria-hidden="true" tabindex="-1"></a><span class="in">\]</span></span> -<span id="cb299-9"><a href="#cb299-9" aria-hidden="true" tabindex="-1"></a><span class="in">```</span></span></code></pre></div> +<div class="sourceCode" id="cb330"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb330-1"><a href="#cb330-1" aria-hidden="true" tabindex="-1"></a><span class="an">Here is a mathematical formula:</span></span> +<span id="cb330-2"><a href="#cb330-2" aria-hidden="true" tabindex="-1"></a><span class="in">``` {=tex}</span></span> +<span id="cb330-3"><a href="#cb330-3" aria-hidden="true" tabindex="-1"></a><span class="in">\[distance[i] =</span></span> +<span id="cb330-4"><a href="#cb330-4" aria-hidden="true" tabindex="-1"></a><span class="in"> \begin{dcases}</span></span> +<span id="cb330-5"><a href="#cb330-5" aria-hidden="true" tabindex="-1"></a><span class="in"> a & b \\</span></span> +<span id="cb330-6"><a href="#cb330-6" aria-hidden="true" tabindex="-1"></a><span class="in"> c & d</span></span> +<span id="cb330-7"><a href="#cb330-7" aria-hidden="true" tabindex="-1"></a><span class="in"> \end{dcases}</span></span> +<span id="cb330-8"><a href="#cb330-8" aria-hidden="true" tabindex="-1"></a><span class="in">\]</span></span> +<span id="cb330-9"><a href="#cb330-9" aria-hidden="true" tabindex="-1"></a><span class="in">```</span></span></code></pre></div> <p>The <strong><code>rawAttribute</code></strong> option is a good alternative to the <strong><code>hybrid</code></strong> option. Unlike the <strong><code>hybrid</code></strong> option, which affects the @@ -5031,33 +5644,33 @@ allows you to isolate the parts of your documents that use TeX:</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-33"><span +<h5 class="unnumbered" id="latex-example-35"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb300"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb300-1"><a href="#cb300-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb300-2"><a href="#cb300-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[rawAttribute, fencedCode]{<span class="ex">markdown</span>}</span> -<span id="cb300-3"><a href="#cb300-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">expl3</span>}</span> -<span id="cb300-4"><a href="#cb300-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb300-5"><a href="#cb300-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb300-6"><a href="#cb300-6" aria-hidden="true" tabindex="-1"></a>`<span class="ss">$H_2 O$</span>`{=tex} is a liquid.</span> -<span id="cb300-7"><a href="#cb300-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb300-8"><a href="#cb300-8" aria-hidden="true" tabindex="-1"></a>``` {=html}</span> -<span id="cb300-9"><a href="#cb300-9" aria-hidden="true" tabindex="-1"></a><p>Here is some HTML content that will be ignored.</p></span> -<span id="cb300-10"><a href="#cb300-10" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb300-11"><a href="#cb300-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb300-12"><a href="#cb300-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb331"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb331-1"><a href="#cb331-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb331-2"><a href="#cb331-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[rawAttribute, fencedCode]{<span class="ex">markdown</span>}</span> +<span id="cb331-3"><a href="#cb331-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">expl3</span>}</span> +<span id="cb331-4"><a href="#cb331-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb331-5"><a href="#cb331-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb331-6"><a href="#cb331-6" aria-hidden="true" tabindex="-1"></a>`<span class="ss">$H_2 O$</span>`{=tex} is a liquid.</span> +<span id="cb331-7"><a href="#cb331-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb331-8"><a href="#cb331-8" aria-hidden="true" tabindex="-1"></a>``` {=html}</span> +<span id="cb331-9"><a href="#cb331-9" aria-hidden="true" tabindex="-1"></a><p>Here is some HTML content that will be ignored.</p></span> +<span id="cb331-10"><a href="#cb331-10" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb331-11"><a href="#cb331-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb331-12"><a href="#cb331-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb301"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb301-1"><a href="#cb301-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb332"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb332-1"><a href="#cb332-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>H<sub>2</sub>O is a liquid.</p> </blockquote> -<h4 data-number="2.2.1.40" id="option-relativereferences"><span -class="header-section-number">2.2.1.40</span> Option +<h4 data-number="2.2.1.45" id="option-relativereferences"><span +class="header-section-number">2.2.1.45</span> Option <code>relativeReferences</code></h4> <dl> <dt><code>relativeReferences</code> (default value: @@ -5069,14 +5682,14 @@ class="header-section-number">2.2.1.40</span> Option <p>Enable <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-4.2">relative references</a> in autolinks:</p> -<div class="sourceCode" id="cb302"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb302-1"><a href="#cb302-1" aria-hidden="true" tabindex="-1"></a>I conclude in Section <#conclusion>.</span> -<span id="cb302-2"><a href="#cb302-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb302-3"><a href="#cb302-3" aria-hidden="true" tabindex="-1"></a>Conclusion {#conclusion}</span> -<span id="cb302-4"><a href="#cb302-4" aria-hidden="true" tabindex="-1"></a><span class="fu">==========</span></span> -<span id="cb302-5"><a href="#cb302-5" aria-hidden="true" tabindex="-1"></a>In this paper, we have discovered that most</span> -<span id="cb302-6"><a href="#cb302-6" aria-hidden="true" tabindex="-1"></a>grandmas would rather eat dinner with their</span> -<span id="cb302-7"><a href="#cb302-7" aria-hidden="true" tabindex="-1"></a>grandchildren than get eaten. Begone, wolf!</span></code></pre></div> +<div class="sourceCode" id="cb333"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb333-1"><a href="#cb333-1" aria-hidden="true" tabindex="-1"></a>I conclude in Section <#conclusion>.</span> +<span id="cb333-2"><a href="#cb333-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb333-3"><a href="#cb333-3" aria-hidden="true" tabindex="-1"></a>Conclusion {#conclusion}</span> +<span id="cb333-4"><a href="#cb333-4" aria-hidden="true" tabindex="-1"></a><span class="fu">==========</span></span> +<span id="cb333-5"><a href="#cb333-5" aria-hidden="true" tabindex="-1"></a>In this paper, we have discovered that most</span> +<span id="cb333-6"><a href="#cb333-6" aria-hidden="true" tabindex="-1"></a>grandmas would rather eat dinner with their</span> +<span id="cb333-7"><a href="#cb333-7" aria-hidden="true" tabindex="-1"></a>grandchildren than get eaten. Begone, wolf!</span></code></pre></div> </dd> </dl> </dd> @@ -5089,30 +5702,30 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb302-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-34"><span +<h5 class="unnumbered" id="latex-example-36"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb303"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb303-1"><a href="#cb303-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb303-2"><a href="#cb303-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[headerAttributes, relativeReferences]{<span class="ex">markdown</span>}</span> -<span id="cb303-3"><a href="#cb303-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb303-4"><a href="#cb303-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb303-5"><a href="#cb303-5" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb303-6"><a href="#cb303-6" aria-hidden="true" tabindex="-1"></a>I conclude in Section <#conclusion>.</span> -<span id="cb303-7"><a href="#cb303-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb303-8"><a href="#cb303-8" aria-hidden="true" tabindex="-1"></a>Conclusion {#conclusion}</span> -<span id="cb303-9"><a href="#cb303-9" aria-hidden="true" tabindex="-1"></a>==========</span> -<span id="cb303-10"><a href="#cb303-10" aria-hidden="true" tabindex="-1"></a>In this paper, we have discovered that most</span> -<span id="cb303-11"><a href="#cb303-11" aria-hidden="true" tabindex="-1"></a>grandmas would rather eat dinner with their</span> -<span id="cb303-12"><a href="#cb303-12" aria-hidden="true" tabindex="-1"></a>grandchildren than get eaten. Begone, wolf!</span> -<span id="cb303-13"><a href="#cb303-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb303-14"><a href="#cb303-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb303-15"><a href="#cb303-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb334"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb334-1"><a href="#cb334-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb334-2"><a href="#cb334-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[headerAttributes, relativeReferences]{<span class="ex">markdown</span>}</span> +<span id="cb334-3"><a href="#cb334-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb334-4"><a href="#cb334-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb334-5"><a href="#cb334-5" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb334-6"><a href="#cb334-6" aria-hidden="true" tabindex="-1"></a>I conclude in Section <#conclusion>.</span> +<span id="cb334-7"><a href="#cb334-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb334-8"><a href="#cb334-8" aria-hidden="true" tabindex="-1"></a>Conclusion {#conclusion}</span> +<span id="cb334-9"><a href="#cb334-9" aria-hidden="true" tabindex="-1"></a>==========</span> +<span id="cb334-10"><a href="#cb334-10" aria-hidden="true" tabindex="-1"></a>In this paper, we have discovered that most</span> +<span id="cb334-11"><a href="#cb334-11" aria-hidden="true" tabindex="-1"></a>grandmas would rather eat dinner with their</span> +<span id="cb334-12"><a href="#cb334-12" aria-hidden="true" tabindex="-1"></a>grandchildren than get eaten. Begone, wolf!</span> +<span id="cb334-13"><a href="#cb334-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb334-14"><a href="#cb334-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb334-15"><a href="#cb334-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX twice from the terminal:</p> -<div class="sourceCode" id="cb304"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb304-1"><a href="#cb304-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> -<span id="cb304-2"><a href="#cb304-2" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb335"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb335-1"><a href="#cb335-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> +<span id="cb335-2"><a href="#cb335-2" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -5121,8 +5734,8 @@ contain the following text:</p> <p>In this paper, we have discovered that most grandmas would rather eat dinner with their grandchildren than get eaten. Begone, wolf!</p> </blockquote> -<h4 data-number="2.2.1.41" id="option-shiftheadings"><span -class="header-section-number">2.2.1.41</span> Option +<h4 data-number="2.2.1.46" id="option-shiftheadings"><span +class="header-section-number">2.2.1.46</span> Option <code>shiftHeadings</code></h4> <dl> <dt><code>shiftHeadings</code> (default value: <code>0</code>)</dt> @@ -5134,36 +5747,36 @@ when ⟨<em>shift amount</em>⟩ is positive, and to level 1, when ⟨<em>shift amount</em>⟩ is negative.</p> </dd> </dl> -<h5 class="unnumbered" id="plain-tex-example-12">Plain <span +<h5 class="unnumbered" id="plain-tex-example-14">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>example.md</code> with the following content:</p> -<div class="sourceCode" id="cb305"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb305-1"><a href="#cb305-1" aria-hidden="true" tabindex="-1"></a><span class="fu">## A section</span></span></code></pre></div> +<div class="sourceCode" id="cb336"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb336-1"><a href="#cb336-1" aria-hidden="true" tabindex="-1"></a><span class="fu">## A section</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb306"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb306-1"><a href="#cb306-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb306-2"><a href="#cb306-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb306-3"><a href="#cb306-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\font\normal</span>=cmr10<span class="fu">\normal</span></span> -<span id="cb306-4"><a href="#cb306-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\font\big</span>=cmr10 at 12pt</span> -<span id="cb306-5"><a href="#cb306-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingTwo</span>#1{{<span class="fu">\big</span> #1<span class="fu">\par</span>}}</span> -<span id="cb306-6"><a href="#cb306-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\font\bigger</span>=cmr10 scaled 1440</span> -<span id="cb306-7"><a href="#cb306-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingOne</span>#1{{<span class="fu">\bigger</span> #1<span class="fu">\par</span>}}</span> -<span id="cb306-8"><a href="#cb306-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb306-9"><a href="#cb306-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionShiftHeadings</span>{-1}</span> -<span id="cb306-10"><a href="#cb306-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{example.md}</span> -<span id="cb306-11"><a href="#cb306-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb306-12"><a href="#cb306-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionShiftHeadings</span>{0}</span> -<span id="cb306-13"><a href="#cb306-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{example.md}</span> -<span id="cb306-14"><a href="#cb306-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb306-15"><a href="#cb306-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionShiftHeadings</span>{+1}</span> -<span id="cb306-16"><a href="#cb306-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{example.md}</span> -<span id="cb306-17"><a href="#cb306-17" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb306-18"><a href="#cb306-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb337"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb337-1"><a href="#cb337-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb337-2"><a href="#cb337-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb337-3"><a href="#cb337-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\font\normal</span>=cmr10<span class="fu">\normal</span></span> +<span id="cb337-4"><a href="#cb337-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\font\big</span>=cmr10 at 12pt</span> +<span id="cb337-5"><a href="#cb337-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingTwo</span>#1{{<span class="fu">\big</span> #1<span class="fu">\par</span>}}</span> +<span id="cb337-6"><a href="#cb337-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\font\bigger</span>=cmr10 scaled 1440</span> +<span id="cb337-7"><a href="#cb337-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingOne</span>#1{{<span class="fu">\bigger</span> #1<span class="fu">\par</span>}}</span> +<span id="cb337-8"><a href="#cb337-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb337-9"><a href="#cb337-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionShiftHeadings</span>{-1}</span> +<span id="cb337-10"><a href="#cb337-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{example.md}</span> +<span id="cb337-11"><a href="#cb337-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb337-12"><a href="#cb337-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionShiftHeadings</span>{0}</span> +<span id="cb337-13"><a href="#cb337-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{example.md}</span> +<span id="cb337-14"><a href="#cb337-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb337-15"><a href="#cb337-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionShiftHeadings</span>{+1}</span> +<span id="cb337-16"><a href="#cb337-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{example.md}</span> +<span id="cb337-17"><a href="#cb337-17" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb337-18"><a href="#cb337-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb307"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb307-1"><a href="#cb307-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb338"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb338-1"><a href="#cb338-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -5171,24 +5784,24 @@ contain the following text:</p> <h2 id="a-section-1">A section</h2> <h3 id="a-section-2">A section</h3> </blockquote> -<h5 class="unnumbered" id="latex-example-35"><span +<h5 class="unnumbered" id="latex-example-37"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb308"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb308-1"><a href="#cb308-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb308-2"><a href="#cb308-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb308-3"><a href="#cb308-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">filecontents</span>}[overwrite,nosearch,noheader]{example.md}</span> -<span id="cb308-4"><a href="#cb308-4" aria-hidden="true" tabindex="-1"></a>## A section</span> -<span id="cb308-5"><a href="#cb308-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">filecontents</span>}</span> -<span id="cb308-6"><a href="#cb308-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb308-7"><a href="#cb308-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>[shiftHeadings=-1]{example.md}</span> -<span id="cb308-8"><a href="#cb308-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{example.md}</span> -<span id="cb308-9"><a href="#cb308-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>[shiftHeadings=+1]{example.md}</span> -<span id="cb308-10"><a href="#cb308-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb339"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb339-1"><a href="#cb339-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb339-2"><a href="#cb339-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb339-3"><a href="#cb339-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">filecontents</span>}[overwrite,nosearch,noheader]{example.md}</span> +<span id="cb339-4"><a href="#cb339-4" aria-hidden="true" tabindex="-1"></a>## A section</span> +<span id="cb339-5"><a href="#cb339-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">filecontents</span>}</span> +<span id="cb339-6"><a href="#cb339-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb339-7"><a href="#cb339-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>[shiftHeadings=-1]{example.md}</span> +<span id="cb339-8"><a href="#cb339-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{example.md}</span> +<span id="cb339-9"><a href="#cb339-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>[shiftHeadings=+1]{example.md}</span> +<span id="cb339-10"><a href="#cb339-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb309"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb309-1"><a href="#cb309-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb340"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb340-1"><a href="#cb340-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -5196,26 +5809,26 @@ contain the following text:</p> <h2 id="a-section-4">A section</h2> <h3 id="a-section-5">A section</h3> </blockquote> -<h5 class="unnumbered" id="context-example-21">Con<span +<h5 class="unnumbered" id="context-example-23">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>example.md</code> with the following content:</p> -<div class="sourceCode" id="cb310"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb310-1"><a href="#cb310-1" aria-hidden="true" tabindex="-1"></a><span class="fu">## A section</span></span></code></pre></div> +<div class="sourceCode" id="cb341"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb341-1"><a href="#cb341-1" aria-hidden="true" tabindex="-1"></a><span class="fu">## A section</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb311"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb311-1"><a href="#cb311-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb311-2"><a href="#cb311-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb311-3"><a href="#cb311-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb311-4"><a href="#cb311-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\inputmarkdown</span>[shiftHeadings = -1]{example.md}</span> -<span id="cb311-5"><a href="#cb311-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\inputmarkdown</span>[shiftHeadings = 0]{example.md}</span> -<span id="cb311-6"><a href="#cb311-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\inputmarkdown</span>[shiftHeadings = +1]{example.md}</span> -<span id="cb311-7"><a href="#cb311-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb311-8"><a href="#cb311-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb342"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb342-1"><a href="#cb342-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb342-2"><a href="#cb342-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb342-3"><a href="#cb342-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb342-4"><a href="#cb342-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\inputmarkdown</span>[shiftHeadings = -1]{example.md}</span> +<span id="cb342-5"><a href="#cb342-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\inputmarkdown</span>[shiftHeadings = 0]{example.md}</span> +<span id="cb342-6"><a href="#cb342-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\inputmarkdown</span>[shiftHeadings = +1]{example.md}</span> +<span id="cb342-7"><a href="#cb342-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb342-8"><a href="#cb342-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb312"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb312-1"><a href="#cb312-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb343"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb343-1"><a href="#cb343-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -5223,8 +5836,8 @@ contain the following text:</p> <h2 id="a-section-7">A section</h2> <h3 id="a-section-8">A section</h3> </blockquote> -<h4 data-number="2.2.1.42" id="option-slice"><span -class="header-section-number">2.2.1.42</span> Option +<h4 data-number="2.2.1.47" id="option-slice"><span +class="header-section-number">2.2.1.47</span> Option <code>slice</code></h4> <dl> <dt><code>slice</code> (default value: <code>^ $</code>)</dt> @@ -5255,47 +5868,47 @@ i.e. the entire section with the <abbr>HTML</abbr> attribute <code>#</code>⟨<em>identifier</em>⟩ will be selected.</p> </dd> </dl> -<h5 class="unnumbered" id="plain-tex-example-13">Plain <span +<h5 class="unnumbered" id="plain-tex-example-15">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>hamlet.md</code> with the following content:</p> -<div class="sourceCode" id="cb313"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb313-1"><a href="#cb313-1" aria-hidden="true" tabindex="-1"></a><span class="fu"># The Tragedy of Hamlet</span></span> -<span id="cb313-2"><a href="#cb313-2" aria-hidden="true" tabindex="-1"></a>Shakespeare's longest play.</span> -<span id="cb313-3"><a href="#cb313-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb313-4"><a href="#cb313-4" aria-hidden="true" tabindex="-1"></a><span class="fu">## Act III {#act-3}</span></span> -<span id="cb313-5"><a href="#cb313-5" aria-hidden="true" tabindex="-1"></a>Hamlet kills Polonius.</span> -<span id="cb313-6"><a href="#cb313-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb313-7"><a href="#cb313-7" aria-hidden="true" tabindex="-1"></a><span class="fu">## Act V {#act-5}</span></span> -<span id="cb313-8"><a href="#cb313-8" aria-hidden="true" tabindex="-1"></a>Hamlet dies.</span> -<span id="cb313-9"><a href="#cb313-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb313-10"><a href="#cb313-10" aria-hidden="true" tabindex="-1"></a><span class="fu">## Act I {#act-1}</span></span> -<span id="cb313-11"><a href="#cb313-11" aria-hidden="true" tabindex="-1"></a>Hamlet talks to ghost.</span></code></pre></div> +<div class="sourceCode" id="cb344"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb344-1"><a href="#cb344-1" aria-hidden="true" tabindex="-1"></a><span class="fu"># The Tragedy of Hamlet</span></span> +<span id="cb344-2"><a href="#cb344-2" aria-hidden="true" tabindex="-1"></a>Shakespeare's longest play.</span> +<span id="cb344-3"><a href="#cb344-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb344-4"><a href="#cb344-4" aria-hidden="true" tabindex="-1"></a><span class="fu">## Act III {#act-3}</span></span> +<span id="cb344-5"><a href="#cb344-5" aria-hidden="true" tabindex="-1"></a>Hamlet kills Polonius.</span> +<span id="cb344-6"><a href="#cb344-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb344-7"><a href="#cb344-7" aria-hidden="true" tabindex="-1"></a><span class="fu">## Act V {#act-5}</span></span> +<span id="cb344-8"><a href="#cb344-8" aria-hidden="true" tabindex="-1"></a>Hamlet dies.</span> +<span id="cb344-9"><a href="#cb344-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb344-10"><a href="#cb344-10" aria-hidden="true" tabindex="-1"></a><span class="fu">## Act I {#act-1}</span></span> +<span id="cb344-11"><a href="#cb344-11" aria-hidden="true" tabindex="-1"></a>Hamlet talks to ghost.</span></code></pre></div> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb314"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb314-1"><a href="#cb314-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb314-2"><a href="#cb314-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionHeaderAttributes</span>{true}</span> -<span id="cb314-3"><a href="#cb314-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb314-4"><a href="#cb314-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\font\normal</span>=cmr10<span class="fu">\normal</span></span> -<span id="cb314-5"><a href="#cb314-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\font\big</span>=cmr10 at 12pt</span> -<span id="cb314-6"><a href="#cb314-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingTwo</span>#1{{<span class="fu">\big</span> #1<span class="fu">\par</span>}}</span> -<span id="cb314-7"><a href="#cb314-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\font\bigger</span>=cmr10 scaled 1440</span> -<span id="cb314-8"><a href="#cb314-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingOne</span>#1{{<span class="fu">\bigger</span> #1<span class="fu">\par</span>}}</span> -<span id="cb314-9"><a href="#cb314-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb314-10"><a href="#cb314-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionSlice</span>{^ ^act-3}</span> -<span id="cb314-11"><a href="#cb314-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{hamlet.md}</span> -<span id="cb314-12"><a href="#cb314-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb314-13"><a href="#cb314-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionSlice</span>{act-1}</span> -<span id="cb314-14"><a href="#cb314-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{hamlet.md}</span> -<span id="cb314-15"><a href="#cb314-15" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb314-16"><a href="#cb314-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionSlice</span>{act-3 act-5}</span> -<span id="cb314-17"><a href="#cb314-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{hamlet.md}</span> -<span id="cb314-18"><a href="#cb314-18" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb314-19"><a href="#cb314-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb345"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb345-1"><a href="#cb345-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb345-2"><a href="#cb345-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionHeaderAttributes</span>{true}</span> +<span id="cb345-3"><a href="#cb345-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb345-4"><a href="#cb345-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\font\normal</span>=cmr10<span class="fu">\normal</span></span> +<span id="cb345-5"><a href="#cb345-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\font\big</span>=cmr10 at 12pt</span> +<span id="cb345-6"><a href="#cb345-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingTwo</span>#1{{<span class="fu">\big</span> #1<span class="fu">\par</span>}}</span> +<span id="cb345-7"><a href="#cb345-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\font\bigger</span>=cmr10 scaled 1440</span> +<span id="cb345-8"><a href="#cb345-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingOne</span>#1{{<span class="fu">\bigger</span> #1<span class="fu">\par</span>}}</span> +<span id="cb345-9"><a href="#cb345-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb345-10"><a href="#cb345-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionSlice</span>{^ ^act-3}</span> +<span id="cb345-11"><a href="#cb345-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{hamlet.md}</span> +<span id="cb345-12"><a href="#cb345-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb345-13"><a href="#cb345-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionSlice</span>{act-1}</span> +<span id="cb345-14"><a href="#cb345-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{hamlet.md}</span> +<span id="cb345-15"><a href="#cb345-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb345-16"><a href="#cb345-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionSlice</span>{act-3 act-5}</span> +<span id="cb345-17"><a href="#cb345-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{hamlet.md}</span> +<span id="cb345-18"><a href="#cb345-18" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb345-19"><a href="#cb345-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb315"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb315-1"><a href="#cb315-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb346"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb346-1"><a href="#cb346-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -5308,34 +5921,34 @@ contain the following text:</p> <h2 id="act-v">Act V</h2> <p>Hamlet dies.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-36"><span +<h5 class="unnumbered" id="latex-example-38"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb316"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb316-1"><a href="#cb316-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb316-2"><a href="#cb316-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[headerAttributes]{<span class="ex">markdown</span>}</span> -<span id="cb316-3"><a href="#cb316-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">filecontents</span>}[overwrite,nosearch,noheader]{hamlet.md}</span> -<span id="cb316-4"><a href="#cb316-4" aria-hidden="true" tabindex="-1"></a># The Tragedy of Hamlet</span> -<span id="cb316-5"><a href="#cb316-5" aria-hidden="true" tabindex="-1"></a>Shakespeare's longest play.</span> -<span id="cb316-6"><a href="#cb316-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb316-7"><a href="#cb316-7" aria-hidden="true" tabindex="-1"></a>## Act III {#act-3}</span> -<span id="cb316-8"><a href="#cb316-8" aria-hidden="true" tabindex="-1"></a>Hamlet kills Polonius.</span> -<span id="cb316-9"><a href="#cb316-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb316-10"><a href="#cb316-10" aria-hidden="true" tabindex="-1"></a>## Act V {#act-5}</span> -<span id="cb316-11"><a href="#cb316-11" aria-hidden="true" tabindex="-1"></a>Hamlet dies.</span> -<span id="cb316-12"><a href="#cb316-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb316-13"><a href="#cb316-13" aria-hidden="true" tabindex="-1"></a>## Act I {#act-1}</span> -<span id="cb316-14"><a href="#cb316-14" aria-hidden="true" tabindex="-1"></a>Hamlet talks to ghost.</span> -<span id="cb316-15"><a href="#cb316-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">filecontents</span>}</span> -<span id="cb316-16"><a href="#cb316-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb316-17"><a href="#cb316-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>[slice=^ ^act-3]{hamlet.md}</span> -<span id="cb316-18"><a href="#cb316-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>[slice=act-1]{hamlet.md}</span> -<span id="cb316-19"><a href="#cb316-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>[slice=act-3 act-5]{hamlet.md}</span> -<span id="cb316-20"><a href="#cb316-20" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb347"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb347-1"><a href="#cb347-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb347-2"><a href="#cb347-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[headerAttributes]{<span class="ex">markdown</span>}</span> +<span id="cb347-3"><a href="#cb347-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">filecontents</span>}[overwrite,nosearch,noheader]{hamlet.md}</span> +<span id="cb347-4"><a href="#cb347-4" aria-hidden="true" tabindex="-1"></a># The Tragedy of Hamlet</span> +<span id="cb347-5"><a href="#cb347-5" aria-hidden="true" tabindex="-1"></a>Shakespeare's longest play.</span> +<span id="cb347-6"><a href="#cb347-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb347-7"><a href="#cb347-7" aria-hidden="true" tabindex="-1"></a>## Act III {#act-3}</span> +<span id="cb347-8"><a href="#cb347-8" aria-hidden="true" tabindex="-1"></a>Hamlet kills Polonius.</span> +<span id="cb347-9"><a href="#cb347-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb347-10"><a href="#cb347-10" aria-hidden="true" tabindex="-1"></a>## Act V {#act-5}</span> +<span id="cb347-11"><a href="#cb347-11" aria-hidden="true" tabindex="-1"></a>Hamlet dies.</span> +<span id="cb347-12"><a href="#cb347-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb347-13"><a href="#cb347-13" aria-hidden="true" tabindex="-1"></a>## Act I {#act-1}</span> +<span id="cb347-14"><a href="#cb347-14" aria-hidden="true" tabindex="-1"></a>Hamlet talks to ghost.</span> +<span id="cb347-15"><a href="#cb347-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">filecontents</span>}</span> +<span id="cb347-16"><a href="#cb347-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb347-17"><a href="#cb347-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>[slice=^ ^act-3]{hamlet.md}</span> +<span id="cb347-18"><a href="#cb347-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>[slice=act-1]{hamlet.md}</span> +<span id="cb347-19"><a href="#cb347-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>[slice=act-3 act-5]{hamlet.md}</span> +<span id="cb347-20"><a href="#cb347-20" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb317"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb317-1"><a href="#cb317-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb348"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb348-1"><a href="#cb348-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -5348,37 +5961,37 @@ contain the following text:</p> <h2 id="act-v-1">Act V</h2> <p>Hamlet dies.</p> </blockquote> -<h5 class="unnumbered" id="context-example-22">Con<span +<h5 class="unnumbered" id="context-example-24">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>hamlet.md</code> with the following content:</p> -<div class="sourceCode" id="cb318"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb318-1"><a href="#cb318-1" aria-hidden="true" tabindex="-1"></a><span class="fu"># The Tragedy of Hamlet</span></span> -<span id="cb318-2"><a href="#cb318-2" aria-hidden="true" tabindex="-1"></a>Shakespeare's longest play.</span> -<span id="cb318-3"><a href="#cb318-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb318-4"><a href="#cb318-4" aria-hidden="true" tabindex="-1"></a><span class="fu">## Act III {#act-3}</span></span> -<span id="cb318-5"><a href="#cb318-5" aria-hidden="true" tabindex="-1"></a>Hamlet kills Polonius.</span> -<span id="cb318-6"><a href="#cb318-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb318-7"><a href="#cb318-7" aria-hidden="true" tabindex="-1"></a><span class="fu">## Act V {#act-5}</span></span> -<span id="cb318-8"><a href="#cb318-8" aria-hidden="true" tabindex="-1"></a>Hamlet dies.</span> -<span id="cb318-9"><a href="#cb318-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb318-10"><a href="#cb318-10" aria-hidden="true" tabindex="-1"></a><span class="fu">## Act I {#act-1}</span></span> -<span id="cb318-11"><a href="#cb318-11" aria-hidden="true" tabindex="-1"></a>Hamlet talks to ghost.</span></code></pre></div> +<div class="sourceCode" id="cb349"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb349-1"><a href="#cb349-1" aria-hidden="true" tabindex="-1"></a><span class="fu"># The Tragedy of Hamlet</span></span> +<span id="cb349-2"><a href="#cb349-2" aria-hidden="true" tabindex="-1"></a>Shakespeare's longest play.</span> +<span id="cb349-3"><a href="#cb349-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb349-4"><a href="#cb349-4" aria-hidden="true" tabindex="-1"></a><span class="fu">## Act III {#act-3}</span></span> +<span id="cb349-5"><a href="#cb349-5" aria-hidden="true" tabindex="-1"></a>Hamlet kills Polonius.</span> +<span id="cb349-6"><a href="#cb349-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb349-7"><a href="#cb349-7" aria-hidden="true" tabindex="-1"></a><span class="fu">## Act V {#act-5}</span></span> +<span id="cb349-8"><a href="#cb349-8" aria-hidden="true" tabindex="-1"></a>Hamlet dies.</span> +<span id="cb349-9"><a href="#cb349-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb349-10"><a href="#cb349-10" aria-hidden="true" tabindex="-1"></a><span class="fu">## Act I {#act-1}</span></span> +<span id="cb349-11"><a href="#cb349-11" aria-hidden="true" tabindex="-1"></a>Hamlet talks to ghost.</span></code></pre></div> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb319"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb319-1"><a href="#cb319-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb319-2"><a href="#cb319-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[headerAttributes = yes]</span> -<span id="cb319-3"><a href="#cb319-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb319-4"><a href="#cb319-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb319-5"><a href="#cb319-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\inputmarkdown</span>[slice = ^ ^act-3]{example.md}</span> -<span id="cb319-6"><a href="#cb319-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\inputmarkdown</span>[slice = act-1]{example.md}</span> -<span id="cb319-7"><a href="#cb319-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\inputmarkdown</span>[slice = act-3 act-5]{example.md}</span> -<span id="cb319-8"><a href="#cb319-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb319-9"><a href="#cb319-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb350"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb350-1"><a href="#cb350-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb350-2"><a href="#cb350-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[headerAttributes = yes]</span> +<span id="cb350-3"><a href="#cb350-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb350-4"><a href="#cb350-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb350-5"><a href="#cb350-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\inputmarkdown</span>[slice = ^ ^act-3]{example.md}</span> +<span id="cb350-6"><a href="#cb350-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\inputmarkdown</span>[slice = act-1]{example.md}</span> +<span id="cb350-7"><a href="#cb350-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\inputmarkdown</span>[slice = act-3 act-5]{example.md}</span> +<span id="cb350-8"><a href="#cb350-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb350-9"><a href="#cb350-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb320"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb320-1"><a href="#cb320-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb351"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb351-1"><a href="#cb351-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -5391,8 +6004,8 @@ contain the following text:</p> <h2 id="act-v-2">Act V</h2> <p>Hamlet dies.</p> </blockquote> -<h4 data-number="2.2.1.43" id="option-smartellipses"><span -class="header-section-number">2.2.1.43</span> Option +<h4 data-number="2.2.1.48" id="option-smartellipses"><span +class="header-section-number">2.2.1.48</span> Option <code>smartEllipses</code></h4> <dl> <dt><code>smartEllipses</code> (default value: <code>false</code>)</dt> @@ -5415,55 +6028,63 @@ class="tex">T<sub>e</sub>X</span> macro.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="lua-module-example-11">Lua Module +<h5 class="unnumbered" id="lua-module-example-12">Lua Module Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb321"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb321-1"><a href="#cb321-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb321-2"><a href="#cb321-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEllipsis</span>{. . .}</span> -<span id="cb321-3"><a href="#cb321-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb321-4"><a href="#cb321-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb321-5"><a href="#cb321-5" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb321-6"><a href="#cb321-6" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new()</span> -<span id="cb321-7"><a href="#cb321-7" aria-hidden="true" tabindex="-1"></a> local input = "These are just three regular dots ..."</span> -<span id="cb321-8"><a href="#cb321-8" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb321-9"><a href="#cb321-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> -<span id="cb321-10"><a href="#cb321-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb321-11"><a href="#cb321-11" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb321-12"><a href="#cb321-12" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({smartEllipses = true})</span> -<span id="cb321-13"><a href="#cb321-13" aria-hidden="true" tabindex="-1"></a> local input = "... and this is a victorian ellipsis."</span> -<span id="cb321-14"><a href="#cb321-14" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb321-15"><a href="#cb321-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb352"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb352-1"><a href="#cb352-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb352-2"><a href="#cb352-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb352-3"><a href="#cb352-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEllipsis</span>{. . .}</span> +<span id="cb352-4"><a href="#cb352-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb352-5"><a href="#cb352-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb352-6"><a href="#cb352-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb352-7"><a href="#cb352-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb352-8"><a href="#cb352-8" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb352-9"><a href="#cb352-9" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new()</span> +<span id="cb352-10"><a href="#cb352-10" aria-hidden="true" tabindex="-1"></a> local input = "These are just three regular dots ..."</span> +<span id="cb352-11"><a href="#cb352-11" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb352-12"><a href="#cb352-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> +<span id="cb352-13"><a href="#cb352-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb352-14"><a href="#cb352-14" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb352-15"><a href="#cb352-15" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({smartEllipses = true})</span> +<span id="cb352-16"><a href="#cb352-16" aria-hidden="true" tabindex="-1"></a> local input = "... and this is a victorian ellipsis."</span> +<span id="cb352-17"><a href="#cb352-17" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb352-18"><a href="#cb352-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb352-19"><a href="#cb352-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Then, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb322"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb322-1"><a href="#cb322-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb353"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb353-1"><a href="#cb353-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>These are just three regular dots …</p> <p>. . . and this is a victorian ellipsis.</p> </blockquote> -<h5 class="unnumbered" id="lua-cli-example-9">Lua CLI Example</h5> +<h5 class="unnumbered" id="lua-cli-example-11">Lua CLI Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb323"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb323-1"><a href="#cb323-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb323-2"><a href="#cb323-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEllipsis</span>{. . .}</span> -<span id="cb323-3"><a href="#cb323-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb323-4"><a href="#cb323-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> -<span id="cb323-5"><a href="#cb323-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> -<span id="cb323-6"><a href="#cb323-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> -<span id="cb323-7"><a href="#cb323-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb354"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb354-1"><a href="#cb354-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb354-2"><a href="#cb354-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb354-3"><a href="#cb354-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEllipsis</span>{. . .}</span> +<span id="cb354-4"><a href="#cb354-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb354-5"><a href="#cb354-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb354-6"><a href="#cb354-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb354-7"><a href="#cb354-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> +<span id="cb354-8"><a href="#cb354-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> +<span id="cb354-9"><a href="#cb354-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> +<span id="cb354-10"><a href="#cb354-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb354-11"><a href="#cb354-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p> -<div class="sourceCode" id="cb324"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb324-1"><a href="#cb324-1" aria-hidden="true" tabindex="-1"></a>Are these just three regular dots, a victorian ellipsis, or ... ?</span></code></pre></div> +<div class="sourceCode" id="cb355"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb355-1"><a href="#cb355-1" aria-hidden="true" tabindex="-1"></a>Are these just three regular dots, a victorian ellipsis, or ... ?</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb325"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb325-1"><a href="#cb325-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> -<span id="cb325-2"><a href="#cb325-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ smartEllipses=true <span class="at">--</span> content.md optiontrue.tex</span> -<span id="cb325-3"><a href="#cb325-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb356"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb356-1"><a href="#cb356-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> +<span id="cb356-2"><a href="#cb356-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ smartEllipses=true <span class="at">--</span> content.md optiontrue.tex</span> +<span id="cb356-3"><a href="#cb356-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems @@ -5480,95 +6101,95 @@ contain the following text:</p> <p>Are these just three regular dots, a victorian ellipsis, or . . . ?</p> </blockquote> -<h5 class="unnumbered" id="plain-tex-example-14">Plain <span +<h5 class="unnumbered" id="plain-tex-example-16">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb326"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb326-1"><a href="#cb326-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb326-2"><a href="#cb326-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEllipsis</span>{. . .}</span> -<span id="cb326-3"><a href="#cb326-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb326-4"><a href="#cb326-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb326-5"><a href="#cb326-5" aria-hidden="true" tabindex="-1"></a>These are just three regular dots ...</span> -<span id="cb326-6"><a href="#cb326-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb326-7"><a href="#cb326-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb326-8"><a href="#cb326-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionSmartEllipses</span>{true}</span> -<span id="cb326-9"><a href="#cb326-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb326-10"><a href="#cb326-10" aria-hidden="true" tabindex="-1"></a>... and this is a victorian ellipsis.</span> -<span id="cb326-11"><a href="#cb326-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb326-12"><a href="#cb326-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb326-13"><a href="#cb326-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb357"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb357-1"><a href="#cb357-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb357-2"><a href="#cb357-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEllipsis</span>{. . .}</span> +<span id="cb357-3"><a href="#cb357-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb357-4"><a href="#cb357-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb357-5"><a href="#cb357-5" aria-hidden="true" tabindex="-1"></a>These are just three regular dots ...</span> +<span id="cb357-6"><a href="#cb357-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb357-7"><a href="#cb357-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb357-8"><a href="#cb357-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionSmartEllipses</span>{true}</span> +<span id="cb357-9"><a href="#cb357-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb357-10"><a href="#cb357-10" aria-hidden="true" tabindex="-1"></a>... and this is a victorian ellipsis.</span> +<span id="cb357-11"><a href="#cb357-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb357-12"><a href="#cb357-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb357-13"><a href="#cb357-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb327"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb327-1"><a href="#cb327-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb358"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb358-1"><a href="#cb358-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>These are just three regular dots …</p> <p>. . . and this is a victorian ellipsis.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-37"><span +<h5 class="unnumbered" id="latex-example-39"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb328"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb328-1"><a href="#cb328-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb328-2"><a href="#cb328-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb328-3"><a href="#cb328-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb328-4"><a href="#cb328-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb328-5"><a href="#cb328-5" aria-hidden="true" tabindex="-1"></a> ellipsis = {. . .}</span> -<span id="cb328-6"><a href="#cb328-6" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb328-7"><a href="#cb328-7" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb328-8"><a href="#cb328-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb328-9"><a href="#cb328-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb328-10"><a href="#cb328-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb328-11"><a href="#cb328-11" aria-hidden="true" tabindex="-1"></a>These are just three regular dots ...</span> -<span id="cb328-12"><a href="#cb328-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb328-13"><a href="#cb328-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb328-14"><a href="#cb328-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{smartEllipses}</span> -<span id="cb328-15"><a href="#cb328-15" aria-hidden="true" tabindex="-1"></a>... and this is a victorian ellipsis.</span> -<span id="cb328-16"><a href="#cb328-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb328-17"><a href="#cb328-17" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb328-18"><a href="#cb328-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb359"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb359-1"><a href="#cb359-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb359-2"><a href="#cb359-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb359-3"><a href="#cb359-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb359-4"><a href="#cb359-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb359-5"><a href="#cb359-5" aria-hidden="true" tabindex="-1"></a> ellipsis = {. . .}</span> +<span id="cb359-6"><a href="#cb359-6" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb359-7"><a href="#cb359-7" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb359-8"><a href="#cb359-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb359-9"><a href="#cb359-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb359-10"><a href="#cb359-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb359-11"><a href="#cb359-11" aria-hidden="true" tabindex="-1"></a>These are just three regular dots ...</span> +<span id="cb359-12"><a href="#cb359-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb359-13"><a href="#cb359-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb359-14"><a href="#cb359-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[smartEllipses]</span> +<span id="cb359-15"><a href="#cb359-15" aria-hidden="true" tabindex="-1"></a>... and this is a victorian ellipsis.</span> +<span id="cb359-16"><a href="#cb359-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb359-17"><a href="#cb359-17" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb359-18"><a href="#cb359-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb329"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb329-1"><a href="#cb329-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb360"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb360-1"><a href="#cb360-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>These are just three regular dots …</p> <p>. . . and this is a victorian ellipsis.</p> </blockquote> -<h5 class="unnumbered" id="context-example-23">Con<span +<h5 class="unnumbered" id="context-example-25">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb330"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb330-1"><a href="#cb330-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb330-2"><a href="#cb330-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEllipsis</span>{. . .}</span> -<span id="cb330-3"><a href="#cb330-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb330-4"><a href="#cb330-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb330-5"><a href="#cb330-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb330-6"><a href="#cb330-6" aria-hidden="true" tabindex="-1"></a>These are just three regular dots ...</span> -<span id="cb330-7"><a href="#cb330-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb330-8"><a href="#cb330-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb330-9"><a href="#cb330-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[smartEllipses = yes]</span> -<span id="cb330-10"><a href="#cb330-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb330-11"><a href="#cb330-11" aria-hidden="true" tabindex="-1"></a>... and this is a victorian ellipsis.</span> -<span id="cb330-12"><a href="#cb330-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb330-13"><a href="#cb330-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb330-14"><a href="#cb330-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb361"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb361-1"><a href="#cb361-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb361-2"><a href="#cb361-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEllipsis</span>{. . .}</span> +<span id="cb361-3"><a href="#cb361-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb361-4"><a href="#cb361-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb361-5"><a href="#cb361-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb361-6"><a href="#cb361-6" aria-hidden="true" tabindex="-1"></a>These are just three regular dots ...</span> +<span id="cb361-7"><a href="#cb361-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb361-8"><a href="#cb361-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb361-9"><a href="#cb361-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[smartEllipses = yes]</span> +<span id="cb361-10"><a href="#cb361-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb361-11"><a href="#cb361-11" aria-hidden="true" tabindex="-1"></a>... and this is a victorian ellipsis.</span> +<span id="cb361-12"><a href="#cb361-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb361-13"><a href="#cb361-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb361-14"><a href="#cb361-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb331"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb331-1"><a href="#cb331-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb362"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb362-1"><a href="#cb362-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>These are just three regular dots …</p> <p>. . . and this is a victorian ellipsis.</p> </blockquote> -<h4 data-number="2.2.1.44" id="option-startnumber"><span -class="header-section-number">2.2.1.44</span> Option +<h4 data-number="2.2.1.49" id="option-startnumber"><span +class="header-section-number">2.2.1.49</span> Option <code>startNumber</code></h4> <dl> <dt><code>startNumber</code> (default value: <code>true</code>)</dt> @@ -5594,36 +6215,36 @@ class="tex">T<sub>e</sub>X</span> macro.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-38"><span +<h5 class="unnumbered" id="latex-example-40"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb332"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb332-1"><a href="#cb332-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb332-2"><a href="#cb332-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb332-3"><a href="#cb332-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb332-4"><a href="#cb332-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb332-5"><a href="#cb332-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb332-6"><a href="#cb332-6" aria-hidden="true" tabindex="-1"></a>The following list respects the numbers specified in the markup:</span> -<span id="cb332-7"><a href="#cb332-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb332-8"><a href="#cb332-8" aria-hidden="true" tabindex="-1"></a>3. third item</span> -<span id="cb332-9"><a href="#cb332-9" aria-hidden="true" tabindex="-1"></a>4. fourth item</span> -<span id="cb332-10"><a href="#cb332-10" aria-hidden="true" tabindex="-1"></a>5. fifth item</span> -<span id="cb332-11"><a href="#cb332-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb332-12"><a href="#cb332-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb332-13"><a href="#cb332-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{startNumber=false}</span> -<span id="cb332-14"><a href="#cb332-14" aria-hidden="true" tabindex="-1"></a>The following list does not respect the numbers specified in the</span> -<span id="cb332-15"><a href="#cb332-15" aria-hidden="true" tabindex="-1"></a>markup:</span> -<span id="cb332-16"><a href="#cb332-16" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb332-17"><a href="#cb332-17" aria-hidden="true" tabindex="-1"></a>3. third item</span> -<span id="cb332-18"><a href="#cb332-18" aria-hidden="true" tabindex="-1"></a>4. fourth item</span> -<span id="cb332-19"><a href="#cb332-19" aria-hidden="true" tabindex="-1"></a>5. fifth item</span> -<span id="cb332-20"><a href="#cb332-20" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb332-21"><a href="#cb332-21" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb332-22"><a href="#cb332-22" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb363"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb363-1"><a href="#cb363-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb363-2"><a href="#cb363-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb363-3"><a href="#cb363-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb363-4"><a href="#cb363-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb363-5"><a href="#cb363-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb363-6"><a href="#cb363-6" aria-hidden="true" tabindex="-1"></a>The following list respects the numbers specified in the markup:</span> +<span id="cb363-7"><a href="#cb363-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb363-8"><a href="#cb363-8" aria-hidden="true" tabindex="-1"></a>3. third item</span> +<span id="cb363-9"><a href="#cb363-9" aria-hidden="true" tabindex="-1"></a>4. fourth item</span> +<span id="cb363-10"><a href="#cb363-10" aria-hidden="true" tabindex="-1"></a>5. fifth item</span> +<span id="cb363-11"><a href="#cb363-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb363-12"><a href="#cb363-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb363-13"><a href="#cb363-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[startNumber=false]</span> +<span id="cb363-14"><a href="#cb363-14" aria-hidden="true" tabindex="-1"></a>The following list does not respect the numbers specified in the</span> +<span id="cb363-15"><a href="#cb363-15" aria-hidden="true" tabindex="-1"></a>markup:</span> +<span id="cb363-16"><a href="#cb363-16" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb363-17"><a href="#cb363-17" aria-hidden="true" tabindex="-1"></a>3. third item</span> +<span id="cb363-18"><a href="#cb363-18" aria-hidden="true" tabindex="-1"></a>4. fourth item</span> +<span id="cb363-19"><a href="#cb363-19" aria-hidden="true" tabindex="-1"></a>5. fifth item</span> +<span id="cb363-20"><a href="#cb363-20" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb363-21"><a href="#cb363-21" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb363-22"><a href="#cb363-22" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb333"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb333-1"><a href="#cb333-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb364"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb364-1"><a href="#cb364-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -5641,34 +6262,34 @@ markup:</p> <li>fifth item</li> </ol> </blockquote> -<h5 class="unnumbered" id="context-example-24">Con<span +<h5 class="unnumbered" id="context-example-26">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb334"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb334-1"><a href="#cb334-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb334-2"><a href="#cb334-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb334-3"><a href="#cb334-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb334-4"><a href="#cb334-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb334-5"><a href="#cb334-5" aria-hidden="true" tabindex="-1"></a>The following list respects the numbers specified in the markup:</span> -<span id="cb334-6"><a href="#cb334-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb334-7"><a href="#cb334-7" aria-hidden="true" tabindex="-1"></a>3. third item</span> -<span id="cb334-8"><a href="#cb334-8" aria-hidden="true" tabindex="-1"></a>4. fourth item</span> -<span id="cb334-9"><a href="#cb334-9" aria-hidden="true" tabindex="-1"></a>5. fifth item</span> -<span id="cb334-10"><a href="#cb334-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb334-11"><a href="#cb334-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb334-12"><a href="#cb334-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[startNumber = no]</span> -<span id="cb334-13"><a href="#cb334-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb334-14"><a href="#cb334-14" aria-hidden="true" tabindex="-1"></a>The following list respects the numbers specified in the markup:</span> -<span id="cb334-15"><a href="#cb334-15" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb334-16"><a href="#cb334-16" aria-hidden="true" tabindex="-1"></a>3. third item</span> -<span id="cb334-17"><a href="#cb334-17" aria-hidden="true" tabindex="-1"></a>4. fourth item</span> -<span id="cb334-18"><a href="#cb334-18" aria-hidden="true" tabindex="-1"></a>5. fifth item</span> -<span id="cb334-19"><a href="#cb334-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb334-20"><a href="#cb334-20" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb365"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb365-1"><a href="#cb365-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb365-2"><a href="#cb365-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb365-3"><a href="#cb365-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb365-4"><a href="#cb365-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb365-5"><a href="#cb365-5" aria-hidden="true" tabindex="-1"></a>The following list respects the numbers specified in the markup:</span> +<span id="cb365-6"><a href="#cb365-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb365-7"><a href="#cb365-7" aria-hidden="true" tabindex="-1"></a>3. third item</span> +<span id="cb365-8"><a href="#cb365-8" aria-hidden="true" tabindex="-1"></a>4. fourth item</span> +<span id="cb365-9"><a href="#cb365-9" aria-hidden="true" tabindex="-1"></a>5. fifth item</span> +<span id="cb365-10"><a href="#cb365-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb365-11"><a href="#cb365-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb365-12"><a href="#cb365-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[startNumber = no]</span> +<span id="cb365-13"><a href="#cb365-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb365-14"><a href="#cb365-14" aria-hidden="true" tabindex="-1"></a>The following list respects the numbers specified in the markup:</span> +<span id="cb365-15"><a href="#cb365-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb365-16"><a href="#cb365-16" aria-hidden="true" tabindex="-1"></a>3. third item</span> +<span id="cb365-17"><a href="#cb365-17" aria-hidden="true" tabindex="-1"></a>4. fourth item</span> +<span id="cb365-18"><a href="#cb365-18" aria-hidden="true" tabindex="-1"></a>5. fifth item</span> +<span id="cb365-19"><a href="#cb365-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb365-20"><a href="#cb365-20" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb335"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb335-1"><a href="#cb335-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb366"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb366-1"><a href="#cb366-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -5686,8 +6307,8 @@ markup:</p> <li>fifth item</li> </ol> </blockquote> -<h4 data-number="2.2.1.45" id="option-strikethrough"><span -class="header-section-number">2.2.1.45</span> Option +<h4 data-number="2.2.1.50" id="option-strikethrough"><span +class="header-section-number">2.2.1.50</span> Option <code>strikeThrough</code></h4> <dl> <dt><code>strikeThrough</code> (default value: <code>false</code>)</dt> @@ -5698,8 +6319,8 @@ class="header-section-number">2.2.1.45</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-strikeout">strike-through syntax extension</a>:</p> -<div class="sourceCode" id="cb336"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb336-1"><a href="#cb336-1" aria-hidden="true" tabindex="-1"></a>This ~~is deleted text.~~</span></code></pre></div> +<div class="sourceCode" id="cb367"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb367-1"><a href="#cb367-1" aria-hidden="true" tabindex="-1"></a>This ~~is deleted text.~~</span></code></pre></div> </dd> </dl> </dd> @@ -5712,76 +6333,76 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb336-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="plain-tex-example-15">Plain <span +<h5 class="unnumbered" id="plain-tex-example-17">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb337"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb337-1"><a href="#cb337-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb337-2"><a href="#cb337-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionStrikeThrough</span>{true}</span> -<span id="cb337-3"><a href="#cb337-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> soulutf8.sty</span> -<span id="cb337-4"><a href="#cb337-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererStrikeThrough</span>#1{<span class="fu">\st</span>{#1}}</span> -<span id="cb337-5"><a href="#cb337-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb337-6"><a href="#cb337-6" aria-hidden="true" tabindex="-1"></a>This is ~~a lunar roving vehicle~~ strike-through text.</span> -<span id="cb337-7"><a href="#cb337-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb337-8"><a href="#cb337-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb368"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb368-1"><a href="#cb368-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb368-2"><a href="#cb368-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionStrikeThrough</span>{true}</span> +<span id="cb368-3"><a href="#cb368-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> soulutf8.sty</span> +<span id="cb368-4"><a href="#cb368-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererStrikeThrough</span>#1{<span class="fu">\st</span>{#1}}</span> +<span id="cb368-5"><a href="#cb368-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb368-6"><a href="#cb368-6" aria-hidden="true" tabindex="-1"></a>This is ~~a lunar roving vehicle~~ strike-through text.</span> +<span id="cb368-7"><a href="#cb368-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb368-8"><a href="#cb368-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb338"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb338-1"><a href="#cb338-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb369"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb369-1"><a href="#cb369-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>This is <del>a lunar roving vehicle</del> strike-through text.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-39"><span +<h5 class="unnumbered" id="latex-example-41"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb339"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb339-1"><a href="#cb339-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb339-2"><a href="#cb339-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[strikeThrough]{<span class="ex">markdown</span>}</span> -<span id="cb339-3"><a href="#cb339-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">soulutf8</span>}</span> -<span id="cb339-4"><a href="#cb339-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb339-5"><a href="#cb339-5" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb339-6"><a href="#cb339-6" aria-hidden="true" tabindex="-1"></a> strikeThrough = {<span class="fu">\st</span>{#1}},</span> -<span id="cb339-7"><a href="#cb339-7" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb339-8"><a href="#cb339-8" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb339-9"><a href="#cb339-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb339-10"><a href="#cb339-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb339-11"><a href="#cb339-11" aria-hidden="true" tabindex="-1"></a>This is ~~a lunar roving vehicle~~ strike-through text.</span> -<span id="cb339-12"><a href="#cb339-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb339-13"><a href="#cb339-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb370"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb370-1"><a href="#cb370-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb370-2"><a href="#cb370-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[strikeThrough]{<span class="ex">markdown</span>}</span> +<span id="cb370-3"><a href="#cb370-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">soulutf8</span>}</span> +<span id="cb370-4"><a href="#cb370-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb370-5"><a href="#cb370-5" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb370-6"><a href="#cb370-6" aria-hidden="true" tabindex="-1"></a> strikeThrough = {<span class="fu">\st</span>{#1}},</span> +<span id="cb370-7"><a href="#cb370-7" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb370-8"><a href="#cb370-8" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb370-9"><a href="#cb370-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb370-10"><a href="#cb370-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb370-11"><a href="#cb370-11" aria-hidden="true" tabindex="-1"></a>This is ~~a lunar roving vehicle~~ strike-through text.</span> +<span id="cb370-12"><a href="#cb370-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb370-13"><a href="#cb370-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb340"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb340-1"><a href="#cb340-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb371"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb371-1"><a href="#cb371-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>This is <del>a lunar roving vehicle</del> strike-through text.</p> </blockquote> -<h5 class="unnumbered" id="context-example-25">Con<span +<h5 class="unnumbered" id="context-example-27">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb341"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb341-1"><a href="#cb341-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb341-2"><a href="#cb341-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[strikeThrough = yes]</span> -<span id="cb341-3"><a href="#cb341-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererStrikeThrough</span>#1{<span class="fu">\overstrikes</span>{#1}}</span> -<span id="cb341-4"><a href="#cb341-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb341-5"><a href="#cb341-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb341-6"><a href="#cb341-6" aria-hidden="true" tabindex="-1"></a>This is ~~a lunar roving vehicle~~ strike-through text.</span> -<span id="cb341-7"><a href="#cb341-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb341-8"><a href="#cb341-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb372"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb372-1"><a href="#cb372-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb372-2"><a href="#cb372-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[strikeThrough = yes]</span> +<span id="cb372-3"><a href="#cb372-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererStrikeThrough</span>#1{<span class="fu">\overstrikes</span>{#1}}</span> +<span id="cb372-4"><a href="#cb372-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb372-5"><a href="#cb372-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb372-6"><a href="#cb372-6" aria-hidden="true" tabindex="-1"></a>This is ~~a lunar roving vehicle~~ strike-through text.</span> +<span id="cb372-7"><a href="#cb372-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb372-8"><a href="#cb372-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb342"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb342-1"><a href="#cb342-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb373"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb373-1"><a href="#cb373-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>This is <del>a lunar roving vehicle</del> strike-through text.</p> </blockquote> -<h4 data-number="2.2.1.46" id="option-stripindent"><span -class="header-section-number">2.2.1.46</span> Option +<h4 data-number="2.2.1.51" id="option-stripindent"><span +class="header-section-number">2.2.1.51</span> Option <code>stripIndent</code></h4> <dl> <dt><code>stripIndent</code> (default value: <code>false</code>)</dt> @@ -5792,14 +6413,14 @@ class="header-section-number">2.2.1.46</span> Option <p>Strip the minimal indentation of non-blank lines from all lines in a markdown document. Requires that the <strong><code>preserveTabs</code></strong> Lua option is disabled:</p> -<div class="sourceCode" id="cb343"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb343-1"><a href="#cb343-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb343-2"><a href="#cb343-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[stripIndent]{<span class="ex">markdown</span>}</span> -<span id="cb343-3"><a href="#cb343-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb343-4"><a href="#cb343-4" aria-hidden="true" tabindex="-1"></a> <span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb343-5"><a href="#cb343-5" aria-hidden="true" tabindex="-1"></a> Hello *world*!</span> -<span id="cb343-6"><a href="#cb343-6" aria-hidden="true" tabindex="-1"></a> <span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb343-7"><a href="#cb343-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb374"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb374-1"><a href="#cb374-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb374-2"><a href="#cb374-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[stripIndent]{<span class="ex">markdown</span>}</span> +<span id="cb374-3"><a href="#cb374-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb374-4"><a href="#cb374-4" aria-hidden="true" tabindex="-1"></a> <span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb374-5"><a href="#cb374-5" aria-hidden="true" tabindex="-1"></a> Hello *world*!</span> +<span id="cb374-6"><a href="#cb374-6" aria-hidden="true" tabindex="-1"></a> <span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb374-7"><a href="#cb374-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> </dd> </dl> </dd> @@ -5813,58 +6434,58 @@ document.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="plain-tex-example-16">Plain <span +<h5 class="unnumbered" id="plain-tex-example-18">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb344"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb344-1"><a href="#cb344-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb344-2"><a href="#cb344-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionStripIndent</span>{true}</span> -<span id="cb344-3"><a href="#cb344-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb344-4"><a href="#cb344-4" aria-hidden="true" tabindex="-1"></a> Hello *world*!</span> -<span id="cb344-5"><a href="#cb344-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb344-6"><a href="#cb344-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb375"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb375-1"><a href="#cb375-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb375-2"><a href="#cb375-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionStripIndent</span>{true}</span> +<span id="cb375-3"><a href="#cb375-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb375-4"><a href="#cb375-4" aria-hidden="true" tabindex="-1"></a> Hello *world*!</span> +<span id="cb375-5"><a href="#cb375-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb375-6"><a href="#cb375-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb345"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb345-1"><a href="#cb345-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb376"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb376-1"><a href="#cb376-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!”</p> -<h5 class="unnumbered" id="latex-example-40"><span +<h5 class="unnumbered" id="latex-example-42"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb346"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb346-1"><a href="#cb346-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb346-2"><a href="#cb346-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[stripIndent]{<span class="ex">markdown</span>}</span> -<span id="cb346-3"><a href="#cb346-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb346-4"><a href="#cb346-4" aria-hidden="true" tabindex="-1"></a> <span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb346-5"><a href="#cb346-5" aria-hidden="true" tabindex="-1"></a> Hello *world*!</span> -<span id="cb346-6"><a href="#cb346-6" aria-hidden="true" tabindex="-1"></a> <span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb346-7"><a href="#cb346-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb377"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb377-1"><a href="#cb377-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb377-2"><a href="#cb377-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[stripIndent]{<span class="ex">markdown</span>}</span> +<span id="cb377-3"><a href="#cb377-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb377-4"><a href="#cb377-4" aria-hidden="true" tabindex="-1"></a> <span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb377-5"><a href="#cb377-5" aria-hidden="true" tabindex="-1"></a> Hello *world*!</span> +<span id="cb377-6"><a href="#cb377-6" aria-hidden="true" tabindex="-1"></a> <span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb377-7"><a href="#cb377-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb347"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb347-1"><a href="#cb347-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb378"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb378-1"><a href="#cb378-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!”</p> -<h5 class="unnumbered" id="context-example-26">Con<span +<h5 class="unnumbered" id="context-example-28">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb348"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb348-1"><a href="#cb348-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb348-2"><a href="#cb348-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[stripIndent = yes]</span> -<span id="cb348-3"><a href="#cb348-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb348-4"><a href="#cb348-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">\startmarkdown</span></span> -<span id="cb348-5"><a href="#cb348-5" aria-hidden="true" tabindex="-1"></a> Hello *world*!</span> -<span id="cb348-6"><a href="#cb348-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\stopmarkdown</span></span> -<span id="cb348-7"><a href="#cb348-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb379"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb379-1"><a href="#cb379-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb379-2"><a href="#cb379-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[stripIndent = yes]</span> +<span id="cb379-3"><a href="#cb379-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb379-4"><a href="#cb379-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">\startmarkdown</span></span> +<span id="cb379-5"><a href="#cb379-5" aria-hidden="true" tabindex="-1"></a> Hello *world*!</span> +<span id="cb379-6"><a href="#cb379-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\stopmarkdown</span></span> +<span id="cb379-7"><a href="#cb379-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb349"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb349-1"><a href="#cb349-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb380"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb380-1"><a href="#cb380-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!”</p> -<h4 data-number="2.2.1.47" id="option-subscripts"><span -class="header-section-number">2.2.1.47</span> Option +<h4 data-number="2.2.1.52" id="option-subscripts"><span +class="header-section-number">2.2.1.52</span> Option <code>subscripts</code></h4> <dl> <dt><code>subscripts</code> (default value: <code>false</code>)</dt> @@ -5875,8 +6496,8 @@ class="header-section-number">2.2.1.47</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-superscript-subscript">subscript syntax extension</a>:</p> -<div class="sourceCode" id="cb350"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb350-1"><a href="#cb350-1" aria-hidden="true" tabindex="-1"></a>H~2~O is a liquid.</span></code></pre></div> +<div class="sourceCode" id="cb381"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb381-1"><a href="#cb381-1" aria-hidden="true" tabindex="-1"></a>H~2~O is a liquid.</span></code></pre></div> </dd> </dl> </dd> @@ -5889,48 +6510,48 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb350-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-41"><span +<h5 class="unnumbered" id="latex-example-43"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb351"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb351-1"><a href="#cb351-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb351-2"><a href="#cb351-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[subscripts]{<span class="ex">markdown</span>}</span> -<span id="cb351-3"><a href="#cb351-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb351-4"><a href="#cb351-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb351-5"><a href="#cb351-5" aria-hidden="true" tabindex="-1"></a>H~2~O is a liquid.</span> -<span id="cb351-6"><a href="#cb351-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb351-7"><a href="#cb351-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb382"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb382-1"><a href="#cb382-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb382-2"><a href="#cb382-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[subscripts]{<span class="ex">markdown</span>}</span> +<span id="cb382-3"><a href="#cb382-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb382-4"><a href="#cb382-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb382-5"><a href="#cb382-5" aria-hidden="true" tabindex="-1"></a>H~2~O is a liquid.</span> +<span id="cb382-6"><a href="#cb382-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb382-7"><a href="#cb382-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb352"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb352-1"><a href="#cb352-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb383"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb383-1"><a href="#cb383-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>H<sub>2</sub>O is a liquid.</p> </blockquote> -<h5 class="unnumbered" id="context-example-27">Con<span +<h5 class="unnumbered" id="context-example-29">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb353"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb353-1"><a href="#cb353-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb353-2"><a href="#cb353-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[subscripts = yes]</span> -<span id="cb353-3"><a href="#cb353-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb353-4"><a href="#cb353-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb353-5"><a href="#cb353-5" aria-hidden="true" tabindex="-1"></a>H~2~O is a liquid.</span> -<span id="cb353-6"><a href="#cb353-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb353-7"><a href="#cb353-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb384"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb384-1"><a href="#cb384-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb384-2"><a href="#cb384-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[subscripts = yes]</span> +<span id="cb384-3"><a href="#cb384-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb384-4"><a href="#cb384-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb384-5"><a href="#cb384-5" aria-hidden="true" tabindex="-1"></a>H~2~O is a liquid.</span> +<span id="cb384-6"><a href="#cb384-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb384-7"><a href="#cb384-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb354"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb354-1"><a href="#cb354-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb385"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb385-1"><a href="#cb385-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>H<sub>2</sub>O is a liquid.</p> </blockquote> -<h4 data-number="2.2.1.48" id="option-superscripts"><span -class="header-section-number">2.2.1.48</span> Option +<h4 data-number="2.2.1.53" id="option-superscripts"><span +class="header-section-number">2.2.1.53</span> Option <code>superscripts</code></h4> <dl> <dt><code>superscripts</code> (default value: <code>false</code>)</dt> @@ -5941,8 +6562,8 @@ class="header-section-number">2.2.1.48</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-superscript-subscript">superscript syntax extension</a>:</p> -<div class="sourceCode" id="cb355"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb355-1"><a href="#cb355-1" aria-hidden="true" tabindex="-1"></a>2^10^ is 1024.</span></code></pre></div> +<div class="sourceCode" id="cb386"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb386-1"><a href="#cb386-1" aria-hidden="true" tabindex="-1"></a>2^10^ is 1024.</span></code></pre></div> </dd> </dl> </dd> @@ -5955,48 +6576,171 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb355-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-42"><span +<h5 class="unnumbered" id="latex-example-44"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb356"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb356-1"><a href="#cb356-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb356-2"><a href="#cb356-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[superscripts]{<span class="ex">markdown</span>}</span> -<span id="cb356-3"><a href="#cb356-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb356-4"><a href="#cb356-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb356-5"><a href="#cb356-5" aria-hidden="true" tabindex="-1"></a>2^10^ is 1024.</span> -<span id="cb356-6"><a href="#cb356-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb356-7"><a href="#cb356-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb387"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb387-1"><a href="#cb387-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb387-2"><a href="#cb387-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[superscripts]{<span class="ex">markdown</span>}</span> +<span id="cb387-3"><a href="#cb387-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb387-4"><a href="#cb387-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb387-5"><a href="#cb387-5" aria-hidden="true" tabindex="-1"></a>2^10^ is 1024.</span> +<span id="cb387-6"><a href="#cb387-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb387-7"><a href="#cb387-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb357"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb357-1"><a href="#cb357-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb388"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb388-1"><a href="#cb388-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>2<sup>10</sup> is 1024.</p> </blockquote> -<h5 class="unnumbered" id="context-example-28">Con<span +<h5 class="unnumbered" id="context-example-30">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb358"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb358-1"><a href="#cb358-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb358-2"><a href="#cb358-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[superscripts = yes]</span> -<span id="cb358-3"><a href="#cb358-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb358-4"><a href="#cb358-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb358-5"><a href="#cb358-5" aria-hidden="true" tabindex="-1"></a>2^10^ is 1024.</span> -<span id="cb358-6"><a href="#cb358-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb358-7"><a href="#cb358-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb389"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb389-1"><a href="#cb389-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb389-2"><a href="#cb389-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[superscripts = yes]</span> +<span id="cb389-3"><a href="#cb389-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb389-4"><a href="#cb389-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb389-5"><a href="#cb389-5" aria-hidden="true" tabindex="-1"></a>2^10^ is 1024.</span> +<span id="cb389-6"><a href="#cb389-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb389-7"><a href="#cb389-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb359"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb359-1"><a href="#cb359-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb390"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb390-1"><a href="#cb390-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>2<sup>10</sup> is 1024.</p> </blockquote> -<h4 data-number="2.2.1.49" id="option-tablecaptions"><span -class="header-section-number">2.2.1.49</span> Option +<h4 data-number="2.2.1.54" id="option-tableattributes"><span +class="header-section-number">2.2.1.54</span> Option +<code>tableAttributes</code></h4> +<dl> +<dt><code>tableAttributes</code> (default value: +<code>false</code>)</dt> +<dd> +<dl> +<dt>true</dt> +<dd> +<p>Enable the assignment of HTML attributes to <a +href="#table-captions">table captions</a>.</p> +<div class="sourceCode" id="cb391"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb391-1"><a href="#cb391-1" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> +<span id="cb391-2"><a href="#cb391-2" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> +<span id="cb391-3"><a href="#cb391-3" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> +<span id="cb391-4"><a href="#cb391-4" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> +<span id="cb391-5"><a href="#cb391-5" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> +<span id="cb391-6"><a href="#cb391-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb391-7"><a href="#cb391-7" aria-hidden="true" tabindex="-1"></a> : Demonstration of pipe table syntax. {#example-table}</span></code></pre></div> +</dd> +</dl> +</dd> +<dd> +<dl> +<dt>false</dt> +<dd> +<p>Disable the assignment of HTML attributes to table captions.</p> +</dd> +</dl> +</dd> +</dl> +<h5 class="unnumbered" id="latex-example-45"><span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb392"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb392-1"><a href="#cb392-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb392-2"><a href="#cb392-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[</span> +<span id="cb392-3"><a href="#cb392-3" aria-hidden="true" tabindex="-1"></a> pipeTables,</span> +<span id="cb392-4"><a href="#cb392-4" aria-hidden="true" tabindex="-1"></a> tableCaptions,</span> +<span id="cb392-5"><a href="#cb392-5" aria-hidden="true" tabindex="-1"></a> tableAttributes,</span> +<span id="cb392-6"><a href="#cb392-6" aria-hidden="true" tabindex="-1"></a> relativeReferences,</span> +<span id="cb392-7"><a href="#cb392-7" aria-hidden="true" tabindex="-1"></a>]{<span class="ex">markdown</span>}</span> +<span id="cb392-8"><a href="#cb392-8" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">expl3</span>}</span> +<span id="cb392-9"><a href="#cb392-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> +<span id="cb392-10"><a href="#cb392-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb392-11"><a href="#cb392-11" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb392-12"><a href="#cb392-12" aria-hidden="true" tabindex="-1"></a> tableAttributeContextBegin = {</span> +<span id="cb392-13"><a href="#cb392-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_begin:</span> +<span id="cb392-14"><a href="#cb392-14" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{</span> +<span id="cb392-15"><a href="#cb392-15" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb392-16"><a href="#cb392-16" aria-hidden="true" tabindex="-1"></a> attributeIdentifier = {</span> +<span id="cb392-17"><a href="#cb392-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{</span> +<span id="cb392-18"><a href="#cb392-18" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb392-19"><a href="#cb392-19" aria-hidden="true" tabindex="-1"></a> tableAttributeContextEnd = {</span> +<span id="cb392-20"><a href="#cb392-20" aria-hidden="true" tabindex="-1"></a> <span class="kw">\label</span>{<span class="ex">##1</span>}</span> +<span id="cb392-21"><a href="#cb392-21" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_end:</span> +<span id="cb392-22"><a href="#cb392-22" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb392-23"><a href="#cb392-23" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb392-24"><a href="#cb392-24" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb392-25"><a href="#cb392-25" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb392-26"><a href="#cb392-26" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb392-27"><a href="#cb392-27" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb392-28"><a href="#cb392-28" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb392-29"><a href="#cb392-29" aria-hidden="true" tabindex="-1"></a> tableAttributeContextEnd = {</span> +<span id="cb392-30"><a href="#cb392-30" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_end:</span> +<span id="cb392-31"><a href="#cb392-31" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb392-32"><a href="#cb392-32" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb392-33"><a href="#cb392-33" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb392-34"><a href="#cb392-34" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> +<span id="cb392-35"><a href="#cb392-35" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb392-36"><a href="#cb392-36" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb392-37"><a href="#cb392-37" aria-hidden="true" tabindex="-1"></a>See Table <#example-table>.</span> +<span id="cb392-38"><a href="#cb392-38" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb392-39"><a href="#cb392-39" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> +<span id="cb392-40"><a href="#cb392-40" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> +<span id="cb392-41"><a href="#cb392-41" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> +<span id="cb392-42"><a href="#cb392-42" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> +<span id="cb392-43"><a href="#cb392-43" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> +<span id="cb392-44"><a href="#cb392-44" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb392-45"><a href="#cb392-45" aria-hidden="true" tabindex="-1"></a> : Demonstration of pipe table syntax. {#example-table}</span> +<span id="cb392-46"><a href="#cb392-46" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb392-47"><a href="#cb392-47" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb393"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb393-1"><a href="#cb393-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>See Table 1.</p> +<table> +<caption>Table 1. Demonstration of pipe table syntax.</caption> +<thead> +<tr class="header"> +<th style="text-align: right;">Right</th> +<th style="text-align: left;">Left</th> +<th>Default</th> +<th style="text-align: center;">Center</th> +</tr> +</thead> +<tbody> +<tr class="odd"> +<td style="text-align: right;">12</td> +<td style="text-align: left;">12</td> +<td>12</td> +<td style="text-align: center;">12</td> +</tr> +<tr class="even"> +<td style="text-align: right;">123</td> +<td style="text-align: left;">123</td> +<td>123</td> +<td style="text-align: center;">123</td> +</tr> +<tr class="odd"> +<td style="text-align: right;">1</td> +<td style="text-align: left;">1</td> +<td>1</td> +<td style="text-align: center;">1</td> +</tr> +</tbody> +</table> +</blockquote> +<h4 data-number="2.2.1.55" id="table-captions"><span +class="header-section-number">2.2.1.55</span> Option <code>tableCaptions</code></h4> <dl> <dt><code>tableCaptions</code> (default value: <code>false</code>)</dt> @@ -6008,14 +6752,14 @@ class="header-section-number">2.2.1.49</span> Option href="https://pandoc.org/MANUAL.html#extension-table_captions">table caption syntax extension</a> for <a href="#pipe-tables">pipe tables</a>.</p> -<div class="sourceCode" id="cb360"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb360-1"><a href="#cb360-1" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> -<span id="cb360-2"><a href="#cb360-2" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> -<span id="cb360-3"><a href="#cb360-3" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> -<span id="cb360-4"><a href="#cb360-4" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> -<span id="cb360-5"><a href="#cb360-5" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> -<span id="cb360-6"><a href="#cb360-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb360-7"><a href="#cb360-7" aria-hidden="true" tabindex="-1"></a> : Demonstration of pipe table syntax.</span></code></pre></div> +<div class="sourceCode" id="cb394"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb394-1"><a href="#cb394-1" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> +<span id="cb394-2"><a href="#cb394-2" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> +<span id="cb394-3"><a href="#cb394-3" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> +<span id="cb394-4"><a href="#cb394-4" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> +<span id="cb394-5"><a href="#cb394-5" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> +<span id="cb394-6"><a href="#cb394-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb394-7"><a href="#cb394-7" aria-hidden="true" tabindex="-1"></a> : Demonstration of pipe table syntax.</span></code></pre></div> </dd> </dl> </dd> @@ -6028,27 +6772,27 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb360-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-43"><span +<h5 class="unnumbered" id="latex-example-46"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb361"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb361-1"><a href="#cb361-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb361-2"><a href="#cb361-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[pipeTables, tableCaptions]{<span class="ex">markdown</span>}</span> -<span id="cb361-3"><a href="#cb361-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb361-4"><a href="#cb361-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb361-5"><a href="#cb361-5" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> -<span id="cb361-6"><a href="#cb361-6" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> -<span id="cb361-7"><a href="#cb361-7" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> -<span id="cb361-8"><a href="#cb361-8" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> -<span id="cb361-9"><a href="#cb361-9" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> -<span id="cb361-10"><a href="#cb361-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb361-11"><a href="#cb361-11" aria-hidden="true" tabindex="-1"></a>: Demonstration of pipe table syntax.</span> -<span id="cb361-12"><a href="#cb361-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb361-13"><a href="#cb361-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb395"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb395-1"><a href="#cb395-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb395-2"><a href="#cb395-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[pipeTables, tableCaptions]{<span class="ex">markdown</span>}</span> +<span id="cb395-3"><a href="#cb395-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb395-4"><a href="#cb395-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb395-5"><a href="#cb395-5" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> +<span id="cb395-6"><a href="#cb395-6" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> +<span id="cb395-7"><a href="#cb395-7" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> +<span id="cb395-8"><a href="#cb395-8" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> +<span id="cb395-9"><a href="#cb395-9" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> +<span id="cb395-10"><a href="#cb395-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb395-11"><a href="#cb395-11" aria-hidden="true" tabindex="-1"></a>: Demonstration of pipe table syntax.</span> +<span id="cb395-12"><a href="#cb395-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb395-13"><a href="#cb395-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb362"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb362-1"><a href="#cb362-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb396"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb396-1"><a href="#cb396-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6084,31 +6828,31 @@ contain the following text:</p> </tbody> </table> </blockquote> -<h5 class="unnumbered" id="context-example-29">Con<span +<h5 class="unnumbered" id="context-example-31">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb363"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb363-1"><a href="#cb363-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb363-2"><a href="#cb363-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span></span> -<span id="cb363-3"><a href="#cb363-3" aria-hidden="true" tabindex="-1"></a> [</span> -<span id="cb363-4"><a href="#cb363-4" aria-hidden="true" tabindex="-1"></a> pipeTables = yes,</span> -<span id="cb363-5"><a href="#cb363-5" aria-hidden="true" tabindex="-1"></a> tableCaptions = yes,</span> -<span id="cb363-6"><a href="#cb363-6" aria-hidden="true" tabindex="-1"></a> ]</span> -<span id="cb363-7"><a href="#cb363-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb363-8"><a href="#cb363-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb363-9"><a href="#cb363-9" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> -<span id="cb363-10"><a href="#cb363-10" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> -<span id="cb363-11"><a href="#cb363-11" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> -<span id="cb363-12"><a href="#cb363-12" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> -<span id="cb363-13"><a href="#cb363-13" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> -<span id="cb363-14"><a href="#cb363-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb363-15"><a href="#cb363-15" aria-hidden="true" tabindex="-1"></a>: Demonstration of pipe table syntax.</span> -<span id="cb363-16"><a href="#cb363-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb363-17"><a href="#cb363-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb397"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb397-1"><a href="#cb397-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb397-2"><a href="#cb397-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span></span> +<span id="cb397-3"><a href="#cb397-3" aria-hidden="true" tabindex="-1"></a> [</span> +<span id="cb397-4"><a href="#cb397-4" aria-hidden="true" tabindex="-1"></a> pipeTables = yes,</span> +<span id="cb397-5"><a href="#cb397-5" aria-hidden="true" tabindex="-1"></a> tableCaptions = yes,</span> +<span id="cb397-6"><a href="#cb397-6" aria-hidden="true" tabindex="-1"></a> ]</span> +<span id="cb397-7"><a href="#cb397-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb397-8"><a href="#cb397-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb397-9"><a href="#cb397-9" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> +<span id="cb397-10"><a href="#cb397-10" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> +<span id="cb397-11"><a href="#cb397-11" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> +<span id="cb397-12"><a href="#cb397-12" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> +<span id="cb397-13"><a href="#cb397-13" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> +<span id="cb397-14"><a href="#cb397-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb397-15"><a href="#cb397-15" aria-hidden="true" tabindex="-1"></a>: Demonstration of pipe table syntax.</span> +<span id="cb397-16"><a href="#cb397-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb397-17"><a href="#cb397-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb364"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb364-1"><a href="#cb364-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb398"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb398-1"><a href="#cb398-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6144,8 +6888,8 @@ contain the following text:</p> </tbody> </table> </blockquote> -<h4 data-number="2.2.1.50" id="option-tasklists"><span -class="header-section-number">2.2.1.50</span> Option +<h4 data-number="2.2.1.56" id="option-tasklists"><span +class="header-section-number">2.2.1.56</span> Option <code>taskLists</code></h4> <dl> <dt><code>taskLists</code> (default value: <code>false</code>)</dt> @@ -6156,10 +6900,10 @@ class="header-section-number">2.2.1.50</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-task_lists">task list syntax extension</a>:</p> -<div class="sourceCode" id="cb365"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb365-1"><a href="#cb365-1" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span><span class="va">[ ]</span> an unticked task list item</span> -<span id="cb365-2"><a href="#cb365-2" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span><span class="co">[</span><span class="ot">/</span><span class="co">]</span> a half-checked task list item</span> -<span id="cb365-3"><a href="#cb365-3" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span><span class="co">[</span><span class="ot">X</span><span class="co">]</span> a ticked task list item</span></code></pre></div> +<div class="sourceCode" id="cb399"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb399-1"><a href="#cb399-1" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span><span class="va">[ ]</span> an unticked task list item</span> +<span id="cb399-2"><a href="#cb399-2" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span><span class="co">[</span><span class="ot">/</span><span class="co">]</span> a half-checked task list item</span> +<span id="cb399-3"><a href="#cb399-3" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span><span class="co">[</span><span class="ot">X</span><span class="co">]</span> a ticked task list item</span></code></pre></div> </dd> </dl> </dd> @@ -6172,30 +6916,30 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb365-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-44"><span +<h5 class="unnumbered" id="latex-example-47"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb366"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb366-1"><a href="#cb366-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb366-2"><a href="#cb366-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[taskLists]{<span class="ex">markdown</span>}</span> -<span id="cb366-3"><a href="#cb366-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb366-4"><a href="#cb366-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb366-5"><a href="#cb366-5" aria-hidden="true" tabindex="-1"></a> untickedBox = No,</span> -<span id="cb366-6"><a href="#cb366-6" aria-hidden="true" tabindex="-1"></a> halfTickedBox = Maybe,</span> -<span id="cb366-7"><a href="#cb366-7" aria-hidden="true" tabindex="-1"></a> tickedBox = Yes,</span> -<span id="cb366-8"><a href="#cb366-8" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb366-9"><a href="#cb366-9" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb366-10"><a href="#cb366-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb366-11"><a href="#cb366-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb366-12"><a href="#cb366-12" aria-hidden="true" tabindex="-1"></a>- [ ] you can't.</span> -<span id="cb366-13"><a href="#cb366-13" aria-hidden="true" tabindex="-1"></a>- [/] I can?</span> -<span id="cb366-14"><a href="#cb366-14" aria-hidden="true" tabindex="-1"></a>- [X] I can!</span> -<span id="cb366-15"><a href="#cb366-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb366-16"><a href="#cb366-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb400"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb400-1"><a href="#cb400-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb400-2"><a href="#cb400-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[taskLists]{<span class="ex">markdown</span>}</span> +<span id="cb400-3"><a href="#cb400-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb400-4"><a href="#cb400-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb400-5"><a href="#cb400-5" aria-hidden="true" tabindex="-1"></a> untickedBox = No,</span> +<span id="cb400-6"><a href="#cb400-6" aria-hidden="true" tabindex="-1"></a> halfTickedBox = Maybe,</span> +<span id="cb400-7"><a href="#cb400-7" aria-hidden="true" tabindex="-1"></a> tickedBox = Yes,</span> +<span id="cb400-8"><a href="#cb400-8" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb400-9"><a href="#cb400-9" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb400-10"><a href="#cb400-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb400-11"><a href="#cb400-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb400-12"><a href="#cb400-12" aria-hidden="true" tabindex="-1"></a>- [ ] you can't.</span> +<span id="cb400-13"><a href="#cb400-13" aria-hidden="true" tabindex="-1"></a>- [/] I can?</span> +<span id="cb400-14"><a href="#cb400-14" aria-hidden="true" tabindex="-1"></a>- [X] I can!</span> +<span id="cb400-15"><a href="#cb400-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb400-16"><a href="#cb400-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb367"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb367-1"><a href="#cb367-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb401"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb401-1"><a href="#cb401-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6205,26 +6949,26 @@ contain the following text:</p> <li>Yes I can!</li> </ul> </blockquote> -<h5 class="unnumbered" id="context-example-30">Con<span +<h5 class="unnumbered" id="context-example-32">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb368"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb368-1"><a href="#cb368-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb368-2"><a href="#cb368-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[taskLists = yes]</span> -<span id="cb368-3"><a href="#cb368-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUntickedBox</span>{No}</span> -<span id="cb368-4"><a href="#cb368-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHalftickedBox</span>{Maybe}</span> -<span id="cb368-5"><a href="#cb368-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTickedBox</span>{Yes}</span> -<span id="cb368-6"><a href="#cb368-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb368-7"><a href="#cb368-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb368-8"><a href="#cb368-8" aria-hidden="true" tabindex="-1"></a>- [ ] you can't.</span> -<span id="cb368-9"><a href="#cb368-9" aria-hidden="true" tabindex="-1"></a>- [/] I can?</span> -<span id="cb368-10"><a href="#cb368-10" aria-hidden="true" tabindex="-1"></a>- [X] I can!</span> -<span id="cb368-11"><a href="#cb368-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb368-12"><a href="#cb368-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb402"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb402-1"><a href="#cb402-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb402-2"><a href="#cb402-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[taskLists = yes]</span> +<span id="cb402-3"><a href="#cb402-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUntickedBox</span>{No}</span> +<span id="cb402-4"><a href="#cb402-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHalftickedBox</span>{Maybe}</span> +<span id="cb402-5"><a href="#cb402-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTickedBox</span>{Yes}</span> +<span id="cb402-6"><a href="#cb402-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb402-7"><a href="#cb402-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb402-8"><a href="#cb402-8" aria-hidden="true" tabindex="-1"></a>- [ ] you can't.</span> +<span id="cb402-9"><a href="#cb402-9" aria-hidden="true" tabindex="-1"></a>- [/] I can?</span> +<span id="cb402-10"><a href="#cb402-10" aria-hidden="true" tabindex="-1"></a>- [X] I can!</span> +<span id="cb402-11"><a href="#cb402-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb402-12"><a href="#cb402-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb369"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb369-1"><a href="#cb369-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb403"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb403-1"><a href="#cb403-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6234,8 +6978,8 @@ contain the following text:</p> <li>Yes I can!</li> </ul> </blockquote> -<h4 data-number="2.2.1.51" id="option-texcomments"><span -class="header-section-number">2.2.1.51</span> Option +<h4 data-number="2.2.1.57" id="option-texcomments"><span +class="header-section-number">2.2.1.57</span> Option <code>texComments</code></h4> <dl> <dt><code>texComments</code> (default value: <code>false</code>)</dt> @@ -6244,15 +6988,15 @@ class="header-section-number">2.2.1.51</span> Option <dt>true</dt> <dd> <p>Strip <span class="tex">T<sub>e</sub>X</span>-style comments.</p> -<div class="sourceCode" id="cb370"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb370-1"><a href="#cb370-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb370-2"><a href="#cb370-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[texComments]{<span class="ex">markdown</span>}</span> -<span id="cb370-3"><a href="#cb370-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb370-4"><a href="#cb370-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb370-5"><a href="#cb370-5" aria-hidden="true" tabindex="-1"></a>Hel<span class="co">% this is a comment</span></span> -<span id="cb370-6"><a href="#cb370-6" aria-hidden="true" tabindex="-1"></a> lo *world*!</span> -<span id="cb370-7"><a href="#cb370-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb370-8"><a href="#cb370-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb404"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb404-1"><a href="#cb404-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb404-2"><a href="#cb404-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[texComments]{<span class="ex">markdown</span>}</span> +<span id="cb404-3"><a href="#cb404-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb404-4"><a href="#cb404-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb404-5"><a href="#cb404-5" aria-hidden="true" tabindex="-1"></a>Hel<span class="co">% this is a comment</span></span> +<span id="cb404-6"><a href="#cb404-6" aria-hidden="true" tabindex="-1"></a> lo *world*!</span> +<span id="cb404-7"><a href="#cb404-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb404-8"><a href="#cb404-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Always enabled when <strong><code>hybrid</code></strong> is enabled.</p> </dd> @@ -6268,61 +7012,61 @@ comments.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="plain-tex-example-17">Plain <span +<h5 class="unnumbered" id="plain-tex-example-19">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb371"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb371-1"><a href="#cb371-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb371-2"><a href="#cb371-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTexComments</span>{true}</span> -<span id="cb371-3"><a href="#cb371-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb371-4"><a href="#cb371-4" aria-hidden="true" tabindex="-1"></a>Hel<span class="co">% this is a comment</span></span> -<span id="cb371-5"><a href="#cb371-5" aria-hidden="true" tabindex="-1"></a> lo *world*!</span> -<span id="cb371-6"><a href="#cb371-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb371-7"><a href="#cb371-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb405"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb405-1"><a href="#cb405-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb405-2"><a href="#cb405-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTexComments</span>{true}</span> +<span id="cb405-3"><a href="#cb405-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb405-4"><a href="#cb405-4" aria-hidden="true" tabindex="-1"></a>Hel<span class="co">% this is a comment</span></span> +<span id="cb405-5"><a href="#cb405-5" aria-hidden="true" tabindex="-1"></a> lo *world*!</span> +<span id="cb405-6"><a href="#cb405-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb405-7"><a href="#cb405-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb372"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb372-1"><a href="#cb372-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb406"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb406-1"><a href="#cb406-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!”</p> -<h5 class="unnumbered" id="latex-example-45"><span +<h5 class="unnumbered" id="latex-example-48"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb373"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb373-1"><a href="#cb373-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb373-2"><a href="#cb373-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[texComments]{<span class="ex">markdown</span>}</span> -<span id="cb373-3"><a href="#cb373-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb373-4"><a href="#cb373-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb373-5"><a href="#cb373-5" aria-hidden="true" tabindex="-1"></a>Hel<span class="co">% this is a comment</span></span> -<span id="cb373-6"><a href="#cb373-6" aria-hidden="true" tabindex="-1"></a> lo *world*!</span> -<span id="cb373-7"><a href="#cb373-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb373-8"><a href="#cb373-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb407"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb407-1"><a href="#cb407-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb407-2"><a href="#cb407-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[texComments]{<span class="ex">markdown</span>}</span> +<span id="cb407-3"><a href="#cb407-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb407-4"><a href="#cb407-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb407-5"><a href="#cb407-5" aria-hidden="true" tabindex="-1"></a>Hel<span class="co">% this is a comment</span></span> +<span id="cb407-6"><a href="#cb407-6" aria-hidden="true" tabindex="-1"></a> lo *world*!</span> +<span id="cb407-7"><a href="#cb407-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb407-8"><a href="#cb407-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb374"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb374-1"><a href="#cb374-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb408"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb408-1"><a href="#cb408-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!”</p> -<h5 class="unnumbered" id="context-example-31">Con<span +<h5 class="unnumbered" id="context-example-33">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb375"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb375-1"><a href="#cb375-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb375-2"><a href="#cb375-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[texComments = yes]</span> -<span id="cb375-3"><a href="#cb375-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb375-4"><a href="#cb375-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb375-5"><a href="#cb375-5" aria-hidden="true" tabindex="-1"></a>Hel<span class="co">% this is a comment</span></span> -<span id="cb375-6"><a href="#cb375-6" aria-hidden="true" tabindex="-1"></a> lo *world*!</span> -<span id="cb375-7"><a href="#cb375-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb375-8"><a href="#cb375-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb409"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb409-1"><a href="#cb409-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb409-2"><a href="#cb409-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[texComments = yes]</span> +<span id="cb409-3"><a href="#cb409-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb409-4"><a href="#cb409-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb409-5"><a href="#cb409-5" aria-hidden="true" tabindex="-1"></a>Hel<span class="co">% this is a comment</span></span> +<span id="cb409-6"><a href="#cb409-6" aria-hidden="true" tabindex="-1"></a> lo *world*!</span> +<span id="cb409-7"><a href="#cb409-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb409-8"><a href="#cb409-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb376"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb376-1"><a href="#cb376-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb410"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb410-1"><a href="#cb410-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!”</p> -<h4 data-number="2.2.1.52" id="option-texmathdollars"><span -class="header-section-number">2.2.1.52</span> Option +<h4 data-number="2.2.1.58" id="option-texmathdollars"><span +class="header-section-number">2.2.1.58</span> Option <code>texMathDollars</code></h4> <dl> <dt><code>texMathDollars</code> (default value: <code>false</code>)</dt> @@ -6333,10 +7077,10 @@ class="header-section-number">2.2.1.52</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-tex_math_dollars">dollar math syntax extension</a>:</p> -<div class="sourceCode" id="cb377"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb377-1"><a href="#cb377-1" aria-hidden="true" tabindex="-1"></a><span class="an">inline math:</span><span class="co"> $E=mc^2$</span></span> -<span id="cb377-2"><a href="#cb377-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb377-3"><a href="#cb377-3" aria-hidden="true" tabindex="-1"></a>display math: $$E=mc^2$$</span></code></pre></div> +<div class="sourceCode" id="cb411"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb411-1"><a href="#cb411-1" aria-hidden="true" tabindex="-1"></a><span class="an">inline math:</span><span class="co"> $E=mc^2$</span></span> +<span id="cb411-2"><a href="#cb411-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb411-3"><a href="#cb411-3" aria-hidden="true" tabindex="-1"></a>display math: $$E=mc^2$$</span></code></pre></div> </dd> </dl> </dd> @@ -6349,25 +7093,29 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb377-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="lua-module-example-12">Lua Module +<h5 class="unnumbered" id="lua-module-example-13">Lua Module Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb378"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb378-1"><a href="#cb378-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb378-2"><a href="#cb378-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb378-3"><a href="#cb378-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb378-4"><a href="#cb378-4" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb378-5"><a href="#cb378-5" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> -<span id="cb378-6"><a href="#cb378-6" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({texMathDollars = true})</span> -<span id="cb378-7"><a href="#cb378-7" aria-hidden="true" tabindex="-1"></a> local input =</span> -<span id="cb378-8"><a href="#cb378-8" aria-hidden="true" tabindex="-1"></a> [[<span class="ss">$E=mc^2$</span>]] .. newline .. newline ..</span> -<span id="cb378-9"><a href="#cb378-9" aria-hidden="true" tabindex="-1"></a> [[<span class="ss">$$</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx$$</span>]]</span> -<span id="cb378-10"><a href="#cb378-10" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb378-11"><a href="#cb378-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb412"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb412-1"><a href="#cb412-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb412-2"><a href="#cb412-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb412-3"><a href="#cb412-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb412-4"><a href="#cb412-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb412-5"><a href="#cb412-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb412-6"><a href="#cb412-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb412-7"><a href="#cb412-7" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb412-8"><a href="#cb412-8" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> +<span id="cb412-9"><a href="#cb412-9" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({texMathDollars = true})</span> +<span id="cb412-10"><a href="#cb412-10" aria-hidden="true" tabindex="-1"></a> local input =</span> +<span id="cb412-11"><a href="#cb412-11" aria-hidden="true" tabindex="-1"></a> [[<span class="ss">$E=mc^2$</span>]] .. newline .. newline ..</span> +<span id="cb412-12"><a href="#cb412-12" aria-hidden="true" tabindex="-1"></a> [[<span class="ss">$$</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx$$</span>]]</span> +<span id="cb412-13"><a href="#cb412-13" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb412-14"><a href="#cb412-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb412-15"><a href="#cb412-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Then, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb379"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb379-1"><a href="#cb379-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb413"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb413-1"><a href="#cb413-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6376,27 +7124,31 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h5 class="unnumbered" id="lua-cli-example-10">Lua CLI Example</h5> +<h5 class="unnumbered" id="lua-cli-example-12">Lua CLI Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb380"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb380-1"><a href="#cb380-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb380-2"><a href="#cb380-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb380-3"><a href="#cb380-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> -<span id="cb380-4"><a href="#cb380-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> -<span id="cb380-5"><a href="#cb380-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> -<span id="cb380-6"><a href="#cb380-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb414"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb414-1"><a href="#cb414-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb414-2"><a href="#cb414-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb414-3"><a href="#cb414-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb414-4"><a href="#cb414-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb414-5"><a href="#cb414-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb414-6"><a href="#cb414-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> +<span id="cb414-7"><a href="#cb414-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> +<span id="cb414-8"><a href="#cb414-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> +<span id="cb414-9"><a href="#cb414-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb414-10"><a href="#cb414-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p> -<div class="sourceCode" id="cb381"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb381-1"><a href="#cb381-1" aria-hidden="true" tabindex="-1"></a>$E=mc^2$</span> -<span id="cb381-2"><a href="#cb381-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb381-3"><a href="#cb381-3" aria-hidden="true" tabindex="-1"></a>$$\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx$$</span></code></pre></div> +<div class="sourceCode" id="cb415"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb415-1"><a href="#cb415-1" aria-hidden="true" tabindex="-1"></a>$E=mc^2$</span> +<span id="cb415-2"><a href="#cb415-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb415-3"><a href="#cb415-3" aria-hidden="true" tabindex="-1"></a>$$\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx$$</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb382"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb382-1"><a href="#cb382-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> -<span id="cb382-2"><a href="#cb382-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ texMathDollars=true <span class="at">--</span> content.md optiontrue.tex</span> -<span id="cb382-3"><a href="#cb382-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb416"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb416-1"><a href="#cb416-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> +<span id="cb416-2"><a href="#cb416-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ texMathDollars=true <span class="at">--</span> content.md optiontrue.tex</span> +<span id="cb416-3"><a href="#cb416-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems @@ -6417,24 +7169,24 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h5 class="unnumbered" id="plain-tex-example-18">Plain <span +<h5 class="unnumbered" id="plain-tex-example-20">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb383"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb383-1"><a href="#cb383-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb383-2"><a href="#cb383-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb383-3"><a href="#cb383-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTexMathDollars</span>{true}</span> -<span id="cb383-4"><a href="#cb383-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb383-5"><a href="#cb383-5" aria-hidden="true" tabindex="-1"></a><span class="ss">$E=mc^2$</span></span> -<span id="cb383-6"><a href="#cb383-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb383-7"><a href="#cb383-7" aria-hidden="true" tabindex="-1"></a><span class="ss">$$</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx$$</span></span> -<span id="cb383-8"><a href="#cb383-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb383-9"><a href="#cb383-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb383-10"><a href="#cb383-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb417"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb417-1"><a href="#cb417-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb417-2"><a href="#cb417-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb417-3"><a href="#cb417-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTexMathDollars</span>{true}</span> +<span id="cb417-4"><a href="#cb417-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb417-5"><a href="#cb417-5" aria-hidden="true" tabindex="-1"></a><span class="ss">$E=mc^2$</span></span> +<span id="cb417-6"><a href="#cb417-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb417-7"><a href="#cb417-7" aria-hidden="true" tabindex="-1"></a><span class="ss">$$</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx$$</span></span> +<span id="cb417-8"><a href="#cb417-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb417-9"><a href="#cb417-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb417-10"><a href="#cb417-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb384"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb384-1"><a href="#cb384-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb418"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb418-1"><a href="#cb418-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6443,25 +7195,25 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h5 class="unnumbered" id="latex-example-46"><span +<h5 class="unnumbered" id="latex-example-49"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb385"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb385-1"><a href="#cb385-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb385-2"><a href="#cb385-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[texMathDollars]{<span class="ex">markdown</span>}</span> -<span id="cb385-3"><a href="#cb385-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb385-4"><a href="#cb385-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb385-5"><a href="#cb385-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb385-6"><a href="#cb385-6" aria-hidden="true" tabindex="-1"></a><span class="ss">$E=mc^2$</span></span> -<span id="cb385-7"><a href="#cb385-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb385-8"><a href="#cb385-8" aria-hidden="true" tabindex="-1"></a><span class="ss">$$</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx$$</span></span> -<span id="cb385-9"><a href="#cb385-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb385-10"><a href="#cb385-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb385-11"><a href="#cb385-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb419"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb419-1"><a href="#cb419-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb419-2"><a href="#cb419-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[texMathDollars]{<span class="ex">markdown</span>}</span> +<span id="cb419-3"><a href="#cb419-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb419-4"><a href="#cb419-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb419-5"><a href="#cb419-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb419-6"><a href="#cb419-6" aria-hidden="true" tabindex="-1"></a><span class="ss">$E=mc^2$</span></span> +<span id="cb419-7"><a href="#cb419-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb419-8"><a href="#cb419-8" aria-hidden="true" tabindex="-1"></a><span class="ss">$$</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx$$</span></span> +<span id="cb419-9"><a href="#cb419-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb419-10"><a href="#cb419-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb419-11"><a href="#cb419-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb386"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb386-1"><a href="#cb386-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb420"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb420-1"><a href="#cb420-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6470,25 +7222,25 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h5 class="unnumbered" id="context-example-32">Con<span +<h5 class="unnumbered" id="context-example-34">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb387"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb387-1"><a href="#cb387-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb387-2"><a href="#cb387-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[texMathDollars = yes]</span> -<span id="cb387-3"><a href="#cb387-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb387-4"><a href="#cb387-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb387-5"><a href="#cb387-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb387-6"><a href="#cb387-6" aria-hidden="true" tabindex="-1"></a><span class="ss">$E=mc^2$</span></span> -<span id="cb387-7"><a href="#cb387-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb387-8"><a href="#cb387-8" aria-hidden="true" tabindex="-1"></a><span class="ss">$$</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx$$</span></span> -<span id="cb387-9"><a href="#cb387-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb387-10"><a href="#cb387-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb387-11"><a href="#cb387-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb421"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb421-1"><a href="#cb421-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb421-2"><a href="#cb421-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[texMathDollars = yes]</span> +<span id="cb421-3"><a href="#cb421-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb421-4"><a href="#cb421-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb421-5"><a href="#cb421-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb421-6"><a href="#cb421-6" aria-hidden="true" tabindex="-1"></a><span class="ss">$E=mc^2$</span></span> +<span id="cb421-7"><a href="#cb421-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb421-8"><a href="#cb421-8" aria-hidden="true" tabindex="-1"></a><span class="ss">$$</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx$$</span></span> +<span id="cb421-9"><a href="#cb421-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb421-10"><a href="#cb421-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb421-11"><a href="#cb421-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb388"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb388-1"><a href="#cb388-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb422"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb422-1"><a href="#cb422-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6497,8 +7249,8 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h4 data-number="2.2.1.53" id="option-texmathdoublebackslash"><span -class="header-section-number">2.2.1.53</span> Option +<h4 data-number="2.2.1.59" id="option-texmathdoublebackslash"><span +class="header-section-number">2.2.1.59</span> Option <code>texMathDoubleBackslash</code></h4> <dl> <dt><code>texMathDoubleBackslash</code> (default value: @@ -6510,10 +7262,10 @@ class="header-section-number">2.2.1.53</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-tex_math_double_backslash">double backslash math syntax extension</a>:</p> -<div class="sourceCode" id="cb389"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb389-1"><a href="#cb389-1" aria-hidden="true" tabindex="-1"></a><span class="an">inline math:</span><span class="co"> \\(E=mc^2\\)</span></span> -<span id="cb389-2"><a href="#cb389-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb389-3"><a href="#cb389-3" aria-hidden="true" tabindex="-1"></a>display math: <span class="sc">\\</span><span class="co">[</span><span class="ot">E=mc^2\\]</span></span></code></pre></div> +<div class="sourceCode" id="cb423"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb423-1"><a href="#cb423-1" aria-hidden="true" tabindex="-1"></a><span class="an">inline math:</span><span class="co"> \\(E=mc^2\\)</span></span> +<span id="cb423-2"><a href="#cb423-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb423-3"><a href="#cb423-3" aria-hidden="true" tabindex="-1"></a>display math: <span class="sc">\\</span><span class="co">[</span><span class="ot">E=mc^2\\]</span></span></code></pre></div> </dd> </dl> </dd> @@ -6526,25 +7278,29 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb389-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="lua-module-example-13">Lua Module +<h5 class="unnumbered" id="lua-module-example-14">Lua Module Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb390"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb390-1"><a href="#cb390-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb390-2"><a href="#cb390-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb390-3"><a href="#cb390-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb390-4"><a href="#cb390-4" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb390-5"><a href="#cb390-5" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> -<span id="cb390-6"><a href="#cb390-6" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({texMathDoubleBackslash = true})</span> -<span id="cb390-7"><a href="#cb390-7" aria-hidden="true" tabindex="-1"></a> local input =</span> -<span id="cb390-8"><a href="#cb390-8" aria-hidden="true" tabindex="-1"></a> [[<span class="fu">\\</span>(E=mc^2<span class="fu">\\</span>)]] .. newline .. newline ..</span> -<span id="cb390-9"><a href="#cb390-9" aria-hidden="true" tabindex="-1"></a> [[<span class="fu">\\</span>[<span class="fu">\hat</span>{f} <span class="fu">\left</span> ( <span class="fu">\xi</span> <span class="fu">\right</span> )= <span class="fu">\int</span>_{-<span class="fu">\infty</span>}^{<span class="fu">\infty</span>} f<span class="fu">\left</span> ( x <span class="fu">\right</span> ) e^{-i2<span class="fu">\pi</span> <span class="fu">\xi</span> x} dx<span class="fu">\\</span>]]]</span> -<span id="cb390-10"><a href="#cb390-10" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb390-11"><a href="#cb390-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb424"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb424-1"><a href="#cb424-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb424-2"><a href="#cb424-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb424-3"><a href="#cb424-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb424-4"><a href="#cb424-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb424-5"><a href="#cb424-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb424-6"><a href="#cb424-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb424-7"><a href="#cb424-7" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb424-8"><a href="#cb424-8" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> +<span id="cb424-9"><a href="#cb424-9" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({texMathDoubleBackslash = true})</span> +<span id="cb424-10"><a href="#cb424-10" aria-hidden="true" tabindex="-1"></a> local input =</span> +<span id="cb424-11"><a href="#cb424-11" aria-hidden="true" tabindex="-1"></a> [[<span class="fu">\\</span>(E=mc^2<span class="fu">\\</span>)]] .. newline .. newline ..</span> +<span id="cb424-12"><a href="#cb424-12" aria-hidden="true" tabindex="-1"></a> [[<span class="fu">\\</span>[<span class="fu">\hat</span>{f} <span class="fu">\left</span> ( <span class="fu">\xi</span> <span class="fu">\right</span> )= <span class="fu">\int</span>_{-<span class="fu">\infty</span>}^{<span class="fu">\infty</span>} f<span class="fu">\left</span> ( x <span class="fu">\right</span> ) e^{-i2<span class="fu">\pi</span> <span class="fu">\xi</span> x} dx<span class="fu">\\</span>]]]</span> +<span id="cb424-13"><a href="#cb424-13" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb424-14"><a href="#cb424-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb424-15"><a href="#cb424-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Then, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb391"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb391-1"><a href="#cb391-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb425"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb425-1"><a href="#cb425-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6553,27 +7309,31 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h5 class="unnumbered" id="lua-cli-example-11">Lua CLI Example</h5> +<h5 class="unnumbered" id="lua-cli-example-13">Lua CLI Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb392"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb392-1"><a href="#cb392-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb392-2"><a href="#cb392-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb392-3"><a href="#cb392-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> -<span id="cb392-4"><a href="#cb392-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> -<span id="cb392-5"><a href="#cb392-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> -<span id="cb392-6"><a href="#cb392-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb426"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb426-1"><a href="#cb426-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb426-2"><a href="#cb426-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb426-3"><a href="#cb426-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb426-4"><a href="#cb426-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb426-5"><a href="#cb426-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb426-6"><a href="#cb426-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> +<span id="cb426-7"><a href="#cb426-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> +<span id="cb426-8"><a href="#cb426-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> +<span id="cb426-9"><a href="#cb426-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb426-10"><a href="#cb426-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p> -<div class="sourceCode" id="cb393"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb393-1"><a href="#cb393-1" aria-hidden="true" tabindex="-1"></a><span class="sc">\\</span>(E=mc^2<span class="sc">\\</span>)</span> -<span id="cb393-2"><a href="#cb393-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb393-3"><a href="#cb393-3" aria-hidden="true" tabindex="-1"></a><span class="sc">\\</span><span class="co">[</span><span class="ot">\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx\\]</span></span></code></pre></div> +<div class="sourceCode" id="cb427"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb427-1"><a href="#cb427-1" aria-hidden="true" tabindex="-1"></a><span class="sc">\\</span>(E=mc^2<span class="sc">\\</span>)</span> +<span id="cb427-2"><a href="#cb427-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb427-3"><a href="#cb427-3" aria-hidden="true" tabindex="-1"></a><span class="sc">\\</span><span class="co">[</span><span class="ot">\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx\\]</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb394"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb394-1"><a href="#cb394-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> -<span id="cb394-2"><a href="#cb394-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ texMathDoubleBackslash=true <span class="at">--</span> content.md optiontrue.tex</span> -<span id="cb394-3"><a href="#cb394-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb428"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb428-1"><a href="#cb428-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> +<span id="cb428-2"><a href="#cb428-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ texMathDoubleBackslash=true <span class="at">--</span> content.md optiontrue.tex</span> +<span id="cb428-3"><a href="#cb428-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems @@ -6595,24 +7355,24 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h5 class="unnumbered" id="plain-tex-example-19">Plain <span +<h5 class="unnumbered" id="plain-tex-example-21">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb395"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb395-1"><a href="#cb395-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb395-2"><a href="#cb395-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb395-3"><a href="#cb395-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTexMathDoubleBackslash</span>{true}</span> -<span id="cb395-4"><a href="#cb395-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb395-5"><a href="#cb395-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\\</span>(E=mc^2<span class="fu">\\</span>)</span> -<span id="cb395-6"><a href="#cb395-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb395-7"><a href="#cb395-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\\</span>[<span class="fu">\hat</span>{f} <span class="fu">\left</span> ( <span class="fu">\xi</span> <span class="fu">\right</span> )= <span class="fu">\int</span>_{-<span class="fu">\infty</span>}^{<span class="fu">\infty</span>} f<span class="fu">\left</span> ( x <span class="fu">\right</span> ) e^{-i2<span class="fu">\pi</span> <span class="fu">\xi</span> x} dx<span class="fu">\\</span>]</span> -<span id="cb395-8"><a href="#cb395-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb395-9"><a href="#cb395-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb395-10"><a href="#cb395-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb429"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb429-1"><a href="#cb429-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb429-2"><a href="#cb429-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb429-3"><a href="#cb429-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTexMathDoubleBackslash</span>{true}</span> +<span id="cb429-4"><a href="#cb429-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb429-5"><a href="#cb429-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\\</span>(E=mc^2<span class="fu">\\</span>)</span> +<span id="cb429-6"><a href="#cb429-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb429-7"><a href="#cb429-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\\</span>[<span class="fu">\hat</span>{f} <span class="fu">\left</span> ( <span class="fu">\xi</span> <span class="fu">\right</span> )= <span class="fu">\int</span>_{-<span class="fu">\infty</span>}^{<span class="fu">\infty</span>} f<span class="fu">\left</span> ( x <span class="fu">\right</span> ) e^{-i2<span class="fu">\pi</span> <span class="fu">\xi</span> x} dx<span class="fu">\\</span>]</span> +<span id="cb429-8"><a href="#cb429-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb429-9"><a href="#cb429-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb429-10"><a href="#cb429-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb396"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb396-1"><a href="#cb396-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb430"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb430-1"><a href="#cb430-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6621,25 +7381,25 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h5 class="unnumbered" id="latex-example-47"><span +<h5 class="unnumbered" id="latex-example-50"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb397"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb397-1"><a href="#cb397-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb397-2"><a href="#cb397-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[texMathDoubleBackslash]{<span class="ex">markdown</span>}</span> -<span id="cb397-3"><a href="#cb397-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb397-4"><a href="#cb397-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb397-5"><a href="#cb397-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb397-6"><a href="#cb397-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\\</span>(E=mc^2<span class="fu">\\</span>)</span> -<span id="cb397-7"><a href="#cb397-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb397-8"><a href="#cb397-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\\</span>[<span class="fu">\hat</span>{f} <span class="fu">\left</span> ( <span class="fu">\xi</span> <span class="fu">\right</span> )= <span class="fu">\int</span>_{-<span class="fu">\infty</span>}^{<span class="fu">\infty</span>} f<span class="fu">\left</span> ( x <span class="fu">\right</span> ) e^{-i2<span class="fu">\pi</span> <span class="fu">\xi</span> x} dx<span class="fu">\\</span>]</span> -<span id="cb397-9"><a href="#cb397-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb397-10"><a href="#cb397-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb397-11"><a href="#cb397-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb431"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb431-1"><a href="#cb431-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb431-2"><a href="#cb431-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[texMathDoubleBackslash]{<span class="ex">markdown</span>}</span> +<span id="cb431-3"><a href="#cb431-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb431-4"><a href="#cb431-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb431-5"><a href="#cb431-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb431-6"><a href="#cb431-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\\</span>(E=mc^2<span class="fu">\\</span>)</span> +<span id="cb431-7"><a href="#cb431-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb431-8"><a href="#cb431-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\\</span>[<span class="fu">\hat</span>{f} <span class="fu">\left</span> ( <span class="fu">\xi</span> <span class="fu">\right</span> )= <span class="fu">\int</span>_{-<span class="fu">\infty</span>}^{<span class="fu">\infty</span>} f<span class="fu">\left</span> ( x <span class="fu">\right</span> ) e^{-i2<span class="fu">\pi</span> <span class="fu">\xi</span> x} dx<span class="fu">\\</span>]</span> +<span id="cb431-9"><a href="#cb431-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb431-10"><a href="#cb431-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb431-11"><a href="#cb431-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb398"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb398-1"><a href="#cb398-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb432"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb432-1"><a href="#cb432-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6648,25 +7408,25 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h5 class="unnumbered" id="context-example-33">Con<span +<h5 class="unnumbered" id="context-example-35">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb399"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb399-1"><a href="#cb399-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb399-2"><a href="#cb399-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[texMathDoubleBackslash = yes]</span> -<span id="cb399-3"><a href="#cb399-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb399-4"><a href="#cb399-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb399-5"><a href="#cb399-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb399-6"><a href="#cb399-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\\</span>(E=mc^2<span class="fu">\\</span>)</span> -<span id="cb399-7"><a href="#cb399-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb399-8"><a href="#cb399-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\\</span>[<span class="fu">\hat</span>{f} <span class="fu">\left</span> ( <span class="fu">\xi</span> <span class="fu">\right</span> )= <span class="fu">\int</span>_{-<span class="fu">\infty</span>}^{<span class="fu">\infty</span>} f<span class="fu">\left</span> ( x <span class="fu">\right</span> ) e^{-i2<span class="fu">\pi</span> <span class="fu">\xi</span> x} dx<span class="fu">\\</span>]</span> -<span id="cb399-9"><a href="#cb399-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb399-10"><a href="#cb399-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb399-11"><a href="#cb399-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb433"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb433-1"><a href="#cb433-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb433-2"><a href="#cb433-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[texMathDoubleBackslash = yes]</span> +<span id="cb433-3"><a href="#cb433-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb433-4"><a href="#cb433-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb433-5"><a href="#cb433-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb433-6"><a href="#cb433-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\\</span>(E=mc^2<span class="fu">\\</span>)</span> +<span id="cb433-7"><a href="#cb433-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb433-8"><a href="#cb433-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\\</span>[<span class="fu">\hat</span>{f} <span class="fu">\left</span> ( <span class="fu">\xi</span> <span class="fu">\right</span> )= <span class="fu">\int</span>_{-<span class="fu">\infty</span>}^{<span class="fu">\infty</span>} f<span class="fu">\left</span> ( x <span class="fu">\right</span> ) e^{-i2<span class="fu">\pi</span> <span class="fu">\xi</span> x} dx<span class="fu">\\</span>]</span> +<span id="cb433-9"><a href="#cb433-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb433-10"><a href="#cb433-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb433-11"><a href="#cb433-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb400"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb400-1"><a href="#cb400-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb434"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb434-1"><a href="#cb434-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6675,8 +7435,8 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h4 data-number="2.2.1.54" id="option-texmathsinglebackslash"><span -class="header-section-number">2.2.1.54</span> Option +<h4 data-number="2.2.1.60" id="option-texmathsinglebackslash"><span +class="header-section-number">2.2.1.60</span> Option <code>texMathSingleBackslash</code></h4> <dl> <dt><code>texMathSingleBackslash</code> (default value: @@ -6688,10 +7448,10 @@ class="header-section-number">2.2.1.54</span> Option <p>Enable the Pandoc <a href="https://pandoc.org/MANUAL.html#extension-tex_math_single_backslash">single backslash math syntax extension</a>:</p> -<div class="sourceCode" id="cb401"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb401-1"><a href="#cb401-1" aria-hidden="true" tabindex="-1"></a><span class="an">inline math:</span><span class="co"> \(E=mc^2\)</span></span> -<span id="cb401-2"><a href="#cb401-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb401-3"><a href="#cb401-3" aria-hidden="true" tabindex="-1"></a>display math: <span class="sc">\[</span>E=mc^2<span class="sc">\]</span></span></code></pre></div> +<div class="sourceCode" id="cb435"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb435-1"><a href="#cb435-1" aria-hidden="true" tabindex="-1"></a><span class="an">inline math:</span><span class="co"> \(E=mc^2\)</span></span> +<span id="cb435-2"><a href="#cb435-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb435-3"><a href="#cb435-3" aria-hidden="true" tabindex="-1"></a>display math: <span class="sc">\[</span>E=mc^2<span class="sc">\]</span></span></code></pre></div> </dd> </dl> </dd> @@ -6704,25 +7464,29 @@ class="sourceCode md"><code class="sourceCode markdown"><span id="cb401-1"><a hr </dl> </dd> </dl> -<h5 class="unnumbered" id="lua-module-example-14">Lua Module +<h5 class="unnumbered" id="lua-module-example-15">Lua Module Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb402"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb402-1"><a href="#cb402-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb402-2"><a href="#cb402-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb402-3"><a href="#cb402-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> -<span id="cb402-4"><a href="#cb402-4" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> -<span id="cb402-5"><a href="#cb402-5" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> -<span id="cb402-6"><a href="#cb402-6" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({texMathSingleBackslash = true})</span> -<span id="cb402-7"><a href="#cb402-7" aria-hidden="true" tabindex="-1"></a> local input =</span> -<span id="cb402-8"><a href="#cb402-8" aria-hidden="true" tabindex="-1"></a> [[<span class="ss">\(E=mc^2\)</span>]] .. newline .. newline ..</span> -<span id="cb402-9"><a href="#cb402-9" aria-hidden="true" tabindex="-1"></a> [[<span class="ss">\[</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx\]</span>]]</span> -<span id="cb402-10"><a href="#cb402-10" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> -<span id="cb402-11"><a href="#cb402-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb436"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb436-1"><a href="#cb436-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb436-2"><a href="#cb436-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb436-3"><a href="#cb436-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb436-4"><a href="#cb436-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb436-5"><a href="#cb436-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb436-6"><a href="#cb436-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\directlua</span>{</span> +<span id="cb436-7"><a href="#cb436-7" aria-hidden="true" tabindex="-1"></a> local markdown = require("markdown")</span> +<span id="cb436-8"><a href="#cb436-8" aria-hidden="true" tabindex="-1"></a> local newline = [[^^J^^J]]</span> +<span id="cb436-9"><a href="#cb436-9" aria-hidden="true" tabindex="-1"></a> local convert = markdown.new({texMathSingleBackslash = true})</span> +<span id="cb436-10"><a href="#cb436-10" aria-hidden="true" tabindex="-1"></a> local input =</span> +<span id="cb436-11"><a href="#cb436-11" aria-hidden="true" tabindex="-1"></a> [[<span class="ss">\(E=mc^2\)</span>]] .. newline .. newline ..</span> +<span id="cb436-12"><a href="#cb436-12" aria-hidden="true" tabindex="-1"></a> [[<span class="ss">\[</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx\]</span>]]</span> +<span id="cb436-13"><a href="#cb436-13" aria-hidden="true" tabindex="-1"></a> tex.sprint(convert(input)) }</span> +<span id="cb436-14"><a href="#cb436-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb436-15"><a href="#cb436-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Then, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb403"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb403-1"><a href="#cb403-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb437"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb437-1"><a href="#cb437-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6731,27 +7495,31 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h5 class="unnumbered" id="lua-cli-example-12">Lua CLI Example</h5> +<h5 class="unnumbered" id="lua-cli-example-14">Lua CLI Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb404"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb404-1"><a href="#cb404-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb404-2"><a href="#cb404-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb404-3"><a href="#cb404-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> -<span id="cb404-4"><a href="#cb404-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> -<span id="cb404-5"><a href="#cb404-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> -<span id="cb404-6"><a href="#cb404-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb438"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb438-1"><a href="#cb438-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb438-2"><a href="#cb438-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb438-3"><a href="#cb438-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb438-4"><a href="#cb438-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb438-5"><a href="#cb438-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\#</span>=12</span> +<span id="cb438-6"><a href="#cb438-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optionfalse</span> +<span id="cb438-7"><a href="#cb438-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\par</span></span> +<span id="cb438-8"><a href="#cb438-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> optiontrue</span> +<span id="cb438-9"><a href="#cb438-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb438-10"><a href="#cb438-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>content.md</code> with the following content:</p> -<div class="sourceCode" id="cb405"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb405-1"><a href="#cb405-1" aria-hidden="true" tabindex="-1"></a><span class="sc">\(</span>E=mc^2<span class="sc">\)</span></span> -<span id="cb405-2"><a href="#cb405-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb405-3"><a href="#cb405-3" aria-hidden="true" tabindex="-1"></a><span class="sc">\[</span>\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx<span class="sc">\]</span></span></code></pre></div> +<div class="sourceCode" id="cb439"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb439-1"><a href="#cb439-1" aria-hidden="true" tabindex="-1"></a><span class="sc">\(</span>E=mc^2<span class="sc">\)</span></span> +<span id="cb439-2"><a href="#cb439-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb439-3"><a href="#cb439-3" aria-hidden="true" tabindex="-1"></a><span class="sc">\[</span>\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx<span class="sc">\]</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb406"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb406-1"><a href="#cb406-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> -<span id="cb406-2"><a href="#cb406-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ texMathSingleBackslash=true <span class="at">--</span> content.md optiontrue.tex</span> -<span id="cb406-3"><a href="#cb406-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb440"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb440-1"><a href="#cb440-1" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ <span class="at">--</span> content.md optionfalse.tex</span> +<span id="cb440-2"><a href="#cb440-2" aria-hidden="true" tabindex="-1"></a><span class="ex">texlua</span> ⟨CLI pathname⟩ texMathSingleBackslash=true <span class="at">--</span> content.md optiontrue.tex</span> +<span id="cb440-3"><a href="#cb440-3" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>where ⟨<em>CLI pathname</em>⟩ corresponds to the location of the Lua CLI script file, such as <code>~/texmf/scripts/markdown/markdown-cli.lua</code> on UN*X systems @@ -6772,24 +7540,24 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h5 class="unnumbered" id="plain-tex-example-20">Plain <span +<h5 class="unnumbered" id="plain-tex-example-22">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb407"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb407-1"><a href="#cb407-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb407-2"><a href="#cb407-2" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb407-3"><a href="#cb407-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTexMathSingleBackslash</span>{true}</span> -<span id="cb407-4"><a href="#cb407-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb407-5"><a href="#cb407-5" aria-hidden="true" tabindex="-1"></a><span class="ss">\(E=mc^2\)</span></span> -<span id="cb407-6"><a href="#cb407-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb407-7"><a href="#cb407-7" aria-hidden="true" tabindex="-1"></a><span class="ss">\[</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx\]</span></span> -<span id="cb407-8"><a href="#cb407-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb407-9"><a href="#cb407-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb407-10"><a href="#cb407-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb441"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb441-1"><a href="#cb441-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb441-2"><a href="#cb441-2" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb441-3"><a href="#cb441-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTexMathSingleBackslash</span>{true}</span> +<span id="cb441-4"><a href="#cb441-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb441-5"><a href="#cb441-5" aria-hidden="true" tabindex="-1"></a><span class="ss">\(E=mc^2\)</span></span> +<span id="cb441-6"><a href="#cb441-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb441-7"><a href="#cb441-7" aria-hidden="true" tabindex="-1"></a><span class="ss">\[</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx\]</span></span> +<span id="cb441-8"><a href="#cb441-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb441-9"><a href="#cb441-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb441-10"><a href="#cb441-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb408"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb408-1"><a href="#cb408-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb442"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb442-1"><a href="#cb442-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6798,25 +7566,25 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h5 class="unnumbered" id="latex-example-48"><span +<h5 class="unnumbered" id="latex-example-51"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb409"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb409-1"><a href="#cb409-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb409-2"><a href="#cb409-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[texMathSingleBackslash]{<span class="ex">markdown</span>}</span> -<span id="cb409-3"><a href="#cb409-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb409-4"><a href="#cb409-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb409-5"><a href="#cb409-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb409-6"><a href="#cb409-6" aria-hidden="true" tabindex="-1"></a><span class="ss">\(E=mc^2\)</span></span> -<span id="cb409-7"><a href="#cb409-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb409-8"><a href="#cb409-8" aria-hidden="true" tabindex="-1"></a><span class="ss">\[</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx\]</span></span> -<span id="cb409-9"><a href="#cb409-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb409-10"><a href="#cb409-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb409-11"><a href="#cb409-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb443"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb443-1"><a href="#cb443-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb443-2"><a href="#cb443-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[texMathSingleBackslash]{<span class="ex">markdown</span>}</span> +<span id="cb443-3"><a href="#cb443-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb443-4"><a href="#cb443-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb443-5"><a href="#cb443-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb443-6"><a href="#cb443-6" aria-hidden="true" tabindex="-1"></a><span class="ss">\(E=mc^2\)</span></span> +<span id="cb443-7"><a href="#cb443-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb443-8"><a href="#cb443-8" aria-hidden="true" tabindex="-1"></a><span class="ss">\[</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx\]</span></span> +<span id="cb443-9"><a href="#cb443-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb443-10"><a href="#cb443-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb443-11"><a href="#cb443-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb410"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb410-1"><a href="#cb410-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb444"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb444-1"><a href="#cb444-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6825,25 +7593,25 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h5 class="unnumbered" id="context-example-34">Con<span +<h5 class="unnumbered" id="context-example-36">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb411"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb411-1"><a href="#cb411-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb411-2"><a href="#cb411-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[texMathSingleBackslash = yes]</span> -<span id="cb411-3"><a href="#cb411-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb411-4"><a href="#cb411-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb411-5"><a href="#cb411-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb411-6"><a href="#cb411-6" aria-hidden="true" tabindex="-1"></a><span class="ss">\(E=mc^2\)</span></span> -<span id="cb411-7"><a href="#cb411-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb411-8"><a href="#cb411-8" aria-hidden="true" tabindex="-1"></a><span class="ss">\[</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx\]</span></span> -<span id="cb411-9"><a href="#cb411-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb411-10"><a href="#cb411-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb411-11"><a href="#cb411-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb445"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb445-1"><a href="#cb445-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb445-2"><a href="#cb445-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[texMathSingleBackslash = yes]</span> +<span id="cb445-3"><a href="#cb445-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb445-4"><a href="#cb445-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb445-5"><a href="#cb445-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb445-6"><a href="#cb445-6" aria-hidden="true" tabindex="-1"></a><span class="ss">\(E=mc^2\)</span></span> +<span id="cb445-7"><a href="#cb445-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb445-8"><a href="#cb445-8" aria-hidden="true" tabindex="-1"></a><span class="ss">\[</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx\]</span></span> +<span id="cb445-9"><a href="#cb445-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb445-10"><a href="#cb445-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb445-11"><a href="#cb445-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb412"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb412-1"><a href="#cb412-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb446"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb446-1"><a href="#cb446-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6852,8 +7620,8 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup></span></p> <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em></span></p> </blockquote> -<h4 data-number="2.2.1.55" id="option-tightlists"><span -class="header-section-number">2.2.1.55</span> Option +<h4 data-number="2.2.1.61" id="option-tightlists"><span +class="header-section-number">2.2.1.61</span> Option <code>tightLists</code></h4> <dl> <dt><code>tightLists</code> (default value: <code>true</code>)</dt> @@ -6865,16 +7633,16 @@ class="header-section-number">2.2.1.55</span> Option paragraphs will be considered <em>tight</em>. Tight lists will produce tight renderers that may produce different output than lists that are not tight:</p> -<div class="sourceCode" id="cb413"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb413-1"><a href="#cb413-1" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>This is</span> -<span id="cb413-2"><a href="#cb413-2" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>a tight</span> -<span id="cb413-3"><a href="#cb413-3" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>unordered list.</span> -<span id="cb413-4"><a href="#cb413-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb413-5"><a href="#cb413-5" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>This is</span> -<span id="cb413-6"><a href="#cb413-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb413-7"><a href="#cb413-7" aria-hidden="true" tabindex="-1"></a> not a tight</span> -<span id="cb413-8"><a href="#cb413-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb413-9"><a href="#cb413-9" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>unordered list.</span></code></pre></div> +<div class="sourceCode" id="cb447"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb447-1"><a href="#cb447-1" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>This is</span> +<span id="cb447-2"><a href="#cb447-2" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>a tight</span> +<span id="cb447-3"><a href="#cb447-3" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>unordered list.</span> +<span id="cb447-4"><a href="#cb447-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb447-5"><a href="#cb447-5" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>This is</span> +<span id="cb447-6"><a href="#cb447-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb447-7"><a href="#cb447-7" aria-hidden="true" tabindex="-1"></a> not a tight</span> +<span id="cb447-8"><a href="#cb447-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb447-9"><a href="#cb447-9" aria-hidden="true" tabindex="-1"></a><span class="ss">- </span>unordered list.</span></code></pre></div> </dd> </dl> </dd> @@ -6889,43 +7657,43 @@ multiple paragraphs.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="latex-example-49"><span +<h5 class="unnumbered" id="latex-example-52"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb414"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb414-1"><a href="#cb414-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb414-2"><a href="#cb414-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb414-3"><a href="#cb414-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb414-4"><a href="#cb414-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb414-5"><a href="#cb414-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb414-6"><a href="#cb414-6" aria-hidden="true" tabindex="-1"></a>The following list is tight:</span> -<span id="cb414-7"><a href="#cb414-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb414-8"><a href="#cb414-8" aria-hidden="true" tabindex="-1"></a>- first item</span> -<span id="cb414-9"><a href="#cb414-9" aria-hidden="true" tabindex="-1"></a>- second item</span> -<span id="cb414-10"><a href="#cb414-10" aria-hidden="true" tabindex="-1"></a>- third item</span> -<span id="cb414-11"><a href="#cb414-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb414-12"><a href="#cb414-12" aria-hidden="true" tabindex="-1"></a>The following list is loose:</span> -<span id="cb414-13"><a href="#cb414-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb414-14"><a href="#cb414-14" aria-hidden="true" tabindex="-1"></a>- first item</span> -<span id="cb414-15"><a href="#cb414-15" aria-hidden="true" tabindex="-1"></a>- second item that spans</span> -<span id="cb414-16"><a href="#cb414-16" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb414-17"><a href="#cb414-17" aria-hidden="true" tabindex="-1"></a> multiple paragraphs</span> -<span id="cb414-18"><a href="#cb414-18" aria-hidden="true" tabindex="-1"></a>- third item</span> -<span id="cb414-19"><a href="#cb414-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb414-20"><a href="#cb414-20" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb414-21"><a href="#cb414-21" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{tightLists=false}</span> -<span id="cb414-22"><a href="#cb414-22" aria-hidden="true" tabindex="-1"></a>The following list is now also loose:</span> -<span id="cb414-23"><a href="#cb414-23" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb414-24"><a href="#cb414-24" aria-hidden="true" tabindex="-1"></a>- first item</span> -<span id="cb414-25"><a href="#cb414-25" aria-hidden="true" tabindex="-1"></a>- second item</span> -<span id="cb414-26"><a href="#cb414-26" aria-hidden="true" tabindex="-1"></a>- third item</span> -<span id="cb414-27"><a href="#cb414-27" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb414-28"><a href="#cb414-28" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb414-29"><a href="#cb414-29" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb448"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb448-1"><a href="#cb448-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb448-2"><a href="#cb448-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb448-3"><a href="#cb448-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb448-4"><a href="#cb448-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb448-5"><a href="#cb448-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb448-6"><a href="#cb448-6" aria-hidden="true" tabindex="-1"></a>The following list is tight:</span> +<span id="cb448-7"><a href="#cb448-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb448-8"><a href="#cb448-8" aria-hidden="true" tabindex="-1"></a>- first item</span> +<span id="cb448-9"><a href="#cb448-9" aria-hidden="true" tabindex="-1"></a>- second item</span> +<span id="cb448-10"><a href="#cb448-10" aria-hidden="true" tabindex="-1"></a>- third item</span> +<span id="cb448-11"><a href="#cb448-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb448-12"><a href="#cb448-12" aria-hidden="true" tabindex="-1"></a>The following list is loose:</span> +<span id="cb448-13"><a href="#cb448-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb448-14"><a href="#cb448-14" aria-hidden="true" tabindex="-1"></a>- first item</span> +<span id="cb448-15"><a href="#cb448-15" aria-hidden="true" tabindex="-1"></a>- second item that spans</span> +<span id="cb448-16"><a href="#cb448-16" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb448-17"><a href="#cb448-17" aria-hidden="true" tabindex="-1"></a> multiple paragraphs</span> +<span id="cb448-18"><a href="#cb448-18" aria-hidden="true" tabindex="-1"></a>- third item</span> +<span id="cb448-19"><a href="#cb448-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb448-20"><a href="#cb448-20" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb448-21"><a href="#cb448-21" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[tightLists=false]</span> +<span id="cb448-22"><a href="#cb448-22" aria-hidden="true" tabindex="-1"></a>The following list is now also loose:</span> +<span id="cb448-23"><a href="#cb448-23" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb448-24"><a href="#cb448-24" aria-hidden="true" tabindex="-1"></a>- first item</span> +<span id="cb448-25"><a href="#cb448-25" aria-hidden="true" tabindex="-1"></a>- second item</span> +<span id="cb448-26"><a href="#cb448-26" aria-hidden="true" tabindex="-1"></a>- third item</span> +<span id="cb448-27"><a href="#cb448-27" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb448-28"><a href="#cb448-28" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb448-29"><a href="#cb448-29" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb415"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb415-1"><a href="#cb415-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb449"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb449-1"><a href="#cb449-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -6949,8 +7717,8 @@ contain the following text:</p> <li><p>third item</p></li> </ul> </blockquote> -<h4 data-number="2.2.1.56" id="option-underscores"><span -class="header-section-number">2.2.1.56</span> Option +<h4 data-number="2.2.1.62" id="option-underscores"><span +class="header-section-number">2.2.1.62</span> Option <code>underscores</code></h4> <dl> <dt><code>underscores</code> (default value: <code>true</code>)</dt> @@ -6960,11 +7728,11 @@ class="header-section-number">2.2.1.56</span> Option <dd> <p>Both underscores and asterisks can be used to denote emphasis and strong emphasis:</p> -<div class="sourceCode" id="cb416"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb416-1"><a href="#cb416-1" aria-hidden="true" tabindex="-1"></a>*single asterisks*</span> -<span id="cb416-2"><a href="#cb416-2" aria-hidden="true" tabindex="-1"></a>_single underscores_</span> -<span id="cb416-3"><a href="#cb416-3" aria-hidden="true" tabindex="-1"></a>**double asterisks**</span> -<span id="cb416-4"><a href="#cb416-4" aria-hidden="true" tabindex="-1"></a>__double underscores__</span></code></pre></div> +<div class="sourceCode" id="cb450"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb450-1"><a href="#cb450-1" aria-hidden="true" tabindex="-1"></a>*single asterisks*</span> +<span id="cb450-2"><a href="#cb450-2" aria-hidden="true" tabindex="-1"></a>_single underscores_</span> +<span id="cb450-3"><a href="#cb450-3" aria-hidden="true" tabindex="-1"></a>**double asterisks**</span> +<span id="cb450-4"><a href="#cb450-4" aria-hidden="true" tabindex="-1"></a>__double underscores__</span></code></pre></div> </dd> </dl> </dd> @@ -6980,27 +7748,27 @@ constantly escape subscripts.</p> </dl> </dd> </dl> -<h5 class="unnumbered" id="plain-tex-example-21">Plain <span +<h5 class="unnumbered" id="plain-tex-example-23">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb417"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb417-1"><a href="#cb417-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb417-2"><a href="#cb417-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionHybrid</span>{true}</span> -<span id="cb417-3"><a href="#cb417-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb417-4"><a href="#cb417-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb417-5"><a href="#cb417-5" aria-hidden="true" tabindex="-1"></a>This is _emphasized text_ and this is a math subscript: <span class="ss">$m</span><span class="sc">\_</span><span class="ss">n$</span>.</span> -<span id="cb417-6"><a href="#cb417-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb417-7"><a href="#cb417-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb417-8"><a href="#cb417-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionUnderscores</span>{false}</span> -<span id="cb417-9"><a href="#cb417-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb417-10"><a href="#cb417-10" aria-hidden="true" tabindex="-1"></a>This is *emphasized text* and this is a math subscript: <span class="ss">$m_n$</span>.</span> -<span id="cb417-11"><a href="#cb417-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb417-12"><a href="#cb417-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb417-13"><a href="#cb417-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb451"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb451-1"><a href="#cb451-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb451-2"><a href="#cb451-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionHybrid</span>{true}</span> +<span id="cb451-3"><a href="#cb451-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb451-4"><a href="#cb451-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb451-5"><a href="#cb451-5" aria-hidden="true" tabindex="-1"></a>This is _emphasized text_ and this is a math subscript: <span class="ss">$m</span><span class="sc">\_</span><span class="ss">n$</span>.</span> +<span id="cb451-6"><a href="#cb451-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb451-7"><a href="#cb451-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb451-8"><a href="#cb451-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionUnderscores</span>{false}</span> +<span id="cb451-9"><a href="#cb451-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb451-10"><a href="#cb451-10" aria-hidden="true" tabindex="-1"></a>This is *emphasized text* and this is a math subscript: <span class="ss">$m_n$</span>.</span> +<span id="cb451-11"><a href="#cb451-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb451-12"><a href="#cb451-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb451-13"><a href="#cb451-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb418"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb418-1"><a href="#cb418-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb452"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb452-1"><a href="#cb452-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -7009,27 +7777,27 @@ contain the following text:</p> <p>This is <em>emphasized text</em> and this is a math subscript: <em>mₙ</em>.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-50"><span +<h5 class="unnumbered" id="latex-example-53"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb419"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb419-1"><a href="#cb419-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb419-2"><a href="#cb419-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[hybrid]{<span class="ex">markdown</span>}</span> -<span id="cb419-3"><a href="#cb419-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb419-4"><a href="#cb419-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb419-5"><a href="#cb419-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb419-6"><a href="#cb419-6" aria-hidden="true" tabindex="-1"></a>This is _emphasized text_ and this is a math subscript: <span class="ss">$m</span><span class="sc">\_</span><span class="ss">n$</span>.</span> -<span id="cb419-7"><a href="#cb419-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb419-8"><a href="#cb419-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb419-9"><a href="#cb419-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{underscores=false}</span> -<span id="cb419-10"><a href="#cb419-10" aria-hidden="true" tabindex="-1"></a>This is *emphasized text* and this is a math subscript: <span class="ss">$m_n$</span>.</span> -<span id="cb419-11"><a href="#cb419-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb419-12"><a href="#cb419-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb419-13"><a href="#cb419-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb453"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb453-1"><a href="#cb453-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb453-2"><a href="#cb453-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[hybrid]{<span class="ex">markdown</span>}</span> +<span id="cb453-3"><a href="#cb453-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb453-4"><a href="#cb453-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb453-5"><a href="#cb453-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb453-6"><a href="#cb453-6" aria-hidden="true" tabindex="-1"></a>This is _emphasized text_ and this is a math subscript: <span class="ss">$m</span><span class="sc">\_</span><span class="ss">n$</span>.</span> +<span id="cb453-7"><a href="#cb453-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb453-8"><a href="#cb453-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb453-9"><a href="#cb453-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[underscores=false]</span> +<span id="cb453-10"><a href="#cb453-10" aria-hidden="true" tabindex="-1"></a>This is *emphasized text* and this is a math subscript: <span class="ss">$m_n$</span>.</span> +<span id="cb453-11"><a href="#cb453-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb453-12"><a href="#cb453-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb453-13"><a href="#cb453-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb420"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb420-1"><a href="#cb420-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb454"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb454-1"><a href="#cb454-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -7038,28 +7806,28 @@ contain the following text:</p> <p>This is <em>emphasized text</em> and this is a math subscript: <em>mₙ</em>.</p> </blockquote> -<h5 class="unnumbered" id="context-example-35">Con<span +<h5 class="unnumbered" id="context-example-37">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb421"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb421-1"><a href="#cb421-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb421-2"><a href="#cb421-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[hybrid = yes]</span> -<span id="cb421-3"><a href="#cb421-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb421-4"><a href="#cb421-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb421-5"><a href="#cb421-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb421-6"><a href="#cb421-6" aria-hidden="true" tabindex="-1"></a>This is _emphasized text_ and this is a math subscript: <span class="ss">$m</span><span class="sc">\_</span><span class="ss">n$</span>.</span> -<span id="cb421-7"><a href="#cb421-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb421-8"><a href="#cb421-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb421-9"><a href="#cb421-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[underscores = yes]</span> -<span id="cb421-10"><a href="#cb421-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb421-11"><a href="#cb421-11" aria-hidden="true" tabindex="-1"></a>This is *emphasized text* and this is a math subscript: <span class="ss">$m_n$</span>.</span> -<span id="cb421-12"><a href="#cb421-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb421-13"><a href="#cb421-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb421-14"><a href="#cb421-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb455"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb455-1"><a href="#cb455-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb455-2"><a href="#cb455-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[hybrid = yes]</span> +<span id="cb455-3"><a href="#cb455-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb455-4"><a href="#cb455-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb455-5"><a href="#cb455-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb455-6"><a href="#cb455-6" aria-hidden="true" tabindex="-1"></a>This is _emphasized text_ and this is a math subscript: <span class="ss">$m</span><span class="sc">\_</span><span class="ss">n$</span>.</span> +<span id="cb455-7"><a href="#cb455-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb455-8"><a href="#cb455-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb455-9"><a href="#cb455-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[underscores = yes]</span> +<span id="cb455-10"><a href="#cb455-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb455-11"><a href="#cb455-11" aria-hidden="true" tabindex="-1"></a>This is *emphasized text* and this is a math subscript: <span class="ss">$m_n$</span>.</span> +<span id="cb455-12"><a href="#cb455-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb455-13"><a href="#cb455-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb455-14"><a href="#cb455-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb422"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb422-1"><a href="#cb422-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb456"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb456-1"><a href="#cb456-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -7086,8 +7854,16 @@ plain <span class="tex">T<sub>e</sub>X</span></h4> <strong><code>taskLists</code></strong> Lua option to <code>true</code>, you would include the following code in your plain <span class="tex">T<sub>e</sub>X</span> document:</p> -<div class="sourceCode" id="cb423"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb423-1"><a href="#cb423-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTaskLists</span>{true}</span></code></pre></div> +<div class="sourceCode" id="cb457"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb457-1"><a href="#cb457-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTaskLists</span>{true}</span></code></pre></div> +<p>Alternatively, you can also set plain <span +class="tex">T<sub>e</sub>X</span> options using the +<code>\markdownSetup</code> <span class="tex">T<sub>e</sub>X</span> +macro. For example, to set the <strong><code>taskLists</code></strong> +Lua option to <code>true</code>, you would include the following code in +your plain <span class="tex">T<sub>e</sub>X</span> document:</p> +<div class="sourceCode" id="cb458"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb458-1"><a href="#cb458-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{taskLists = true}</span></code></pre></div> <h4 data-number="2.2.2.2" id="finalizing-and-freezing-the-cache"><span class="header-section-number">2.2.2.2</span> Finalizing and Freezing the Cache</h4> @@ -7122,10 +7898,7 @@ the following commands that you can use to specify the location of temporary files produced during the conversion from Markdown to <span class="tex">T<sub>e</sub>X</span>:</p> <ul> -<li><code>\markdownOptionHelperScriptFileName</code>,</li> <li><code>\markdownOptionInputTempFileName</code>,</li> -<li><code>\markdownOptionOutputTempFileName</code>,</li> -<li><code>\markdownOptionErrorTempFileName</code>,</li> <li><code>\markdownOptionOutputDir</code>,</li> <li><code>\markdownOptionCacheDir</code>, and</li> <li><code>\markdownOptionFrozenCacheFileName</code>.</li> @@ -7137,24 +7910,22 @@ options.</p> <p>Using a text editor, create a folder named <code>output-directory</code> and a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb424"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb424-1"><a href="#cb424-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb424-2"><a href="#cb424-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb424-3"><a href="#cb424-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionHelperScriptFileName</span>{helper-script.lua}</span> -<span id="cb424-4"><a href="#cb424-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionInputTempFileName</span>{temporary-input.md}</span> -<span id="cb424-5"><a href="#cb424-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionOutputTempFileName</span>{temporary-output.tex}</span> -<span id="cb424-6"><a href="#cb424-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionErrorTempFileName</span>{error-output.txt}</span> -<span id="cb424-7"><a href="#cb424-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionOutputDir</span>{output-directory}</span> -<span id="cb424-8"><a href="#cb424-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionCacheDir</span>{output-directory/cache-directory}</span> -<span id="cb424-9"><a href="#cb424-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownOptionFinalizeCachetrue</span></span> -<span id="cb424-10"><a href="#cb424-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFrozenCacheFileName</span>{output-directory/cache-directory/frozen-cache.tex}</span> -<span id="cb424-11"><a href="#cb424-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb424-12"><a href="#cb424-12" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb424-13"><a href="#cb424-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb424-14"><a href="#cb424-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb459"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb459-1"><a href="#cb459-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb459-2"><a href="#cb459-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb459-3"><a href="#cb459-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionInputTempFileName</span>{temporary-input.md}</span> +<span id="cb459-4"><a href="#cb459-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionOutputDir</span>{output-directory}</span> +<span id="cb459-5"><a href="#cb459-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionCacheDir</span>{output-directory/cache-directory}</span> +<span id="cb459-6"><a href="#cb459-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionEagerCache</span>{true}</span> +<span id="cb459-7"><a href="#cb459-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFinalizeCache</span>{true}</span> +<span id="cb459-8"><a href="#cb459-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionFrozenCacheFileName</span>{output-directory/cache-directory/frozen-cache.tex}</span> +<span id="cb459-9"><a href="#cb459-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb459-10"><a href="#cb459-10" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> +<span id="cb459-11"><a href="#cb459-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb459-12"><a href="#cb459-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb425"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb425-1"><a href="#cb425-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> <span class="at">--output-directory</span> output-directory document.tex</span></code></pre></div> +<div class="sourceCode" id="cb460"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb460-1"><a href="#cb460-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> <span class="at">--output-directory</span> output-directory document.tex</span></code></pre></div> <p>A text document named <code>temporary-input.md</code> should be produced in the folder named <code>output-directory</code> and contain the following text:</p> @@ -7167,23 +7938,65 @@ document. LuaTeX does not need other temporary files to perform the conversion from markdown to <span class="tex">T<sub>e</sub>X</span>. To produce the remaining temporary files, invoke pdfTeX from the terminal:</p> -<div class="sourceCode" id="cb426"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb426-1"><a href="#cb426-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdftex</span> <span class="at">--output-directory</span> output-directory <span class="at">--shell-escape</span> document.tex</span></code></pre></div> -<p>Text documents named <code>helper-script.lua</code>, and -<code>temporary-output.md</code> should be produced in the folder named -<code>output-directory</code>. The document named -<code>helper-script.lua</code> will contain Lua code that was executed -to convert markdown to plain <span class="tex">T<sub>e</sub>X</span>. -The document named <code>temporary-output.tex</code> will contain the -input markdown document converted to <span +<div class="sourceCode" id="cb461"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb461-1"><a href="#cb461-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pdftex</span> <span class="at">--output-directory</span> output-directory <span class="at">--shell-escape</span> document.tex</span></code></pre></div> +<p>Text document named <code>temporary-output.md</code> should be +produced in the folder named <code>output-directory</code>. The document +will contain the input markdown document converted to <span class="tex">T<sub>e</sub>X</span>.</p> -<p>No document named <code>error-output.txt</code> should be produced in -the folder named <code>output-directory</code>. This document would only -be produced if an error had occured while executing the Lua code. If -this happens, please <a -href="https://github.com/witiko/markdown/issues">file a bug</a>.</p> -<h4 data-number="2.2.2.4" id="package-documentation"><span -class="header-section-number">2.2.2.4</span> Package Documentation</h4> +<h4 data-number="2.2.2.4" id="plain"><span +class="header-section-number">2.2.2.4</span> No default token renderer +prototypes</h4> +<p>The Markdown package provides default definitions for token renderer +prototypes using the <code>witiko/markdown/defaults</code> theme. +Although these default definitions provide a useful starting point for +authors, they use extra resources, especially with higher-level <span +class="tex">T<sub>e</sub>X</span> formats such as <span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> and Con<span +class="tex">T<sub>e</sub>X</span>t. Furthermore, the default definitions +may change at any time, which may pose a problem for maintainers of +Markdown themes and templates who may require a stable output.</p> +<p>The <code>\markdownOptionPlain</code> macro specifies whether +higher-level <span class="tex">T<sub>e</sub>X</span> formats should only +use the plain <span class="tex">T<sub>e</sub>X</span> default +definitions or whether they should also use the format-specific default +definitions. Whereas plain <span class="tex">T<sub>e</sub>X</span> +default definitions only provide definitions for simple elements such as +emphasis, strong emphasis, and paragraph separators, format-specific +default definitions add support for more complex elements such as lists, +tables, and citations. On the flip side, plain <span +class="tex">T<sub>e</sub>X</span> default definitions load no extra +resources and are rather stable, whereas format-specific default +definitions load extra resources and are subject to a more rapid +change.</p> +<p>Here is how you would enable the macro in a <span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> document:</p> +<div class="sourceCode" id="cb462"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb462-1"><a href="#cb462-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[plain]{<span class="ex">markdown</span>}</span></code></pre></div> +<p>Here is how you would enable the macro in a Con<span +class="tex">T<sub>e</sub>X</span>t document:</p> +<div class="sourceCode" id="cb463"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb463-1"><a href="#cb463-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionPlain</span>{true}</span> +<span id="cb463-2"><a href="#cb463-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span></code></pre></div> +<p>The macro must be set before or during the loading of the package. +Setting the macro after loading the package has no effect.</p> +<p>The <code>\markdownOptionNoDefaults</code> macro specifies whether we +should prevent the loading of default definitions or not. This is useful +in contexts, where we want to have total control over how all elements +are rendered.</p> +<p>Here is how you would enable the macro in a <span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> document:</p> +<div class="sourceCode" id="cb464"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb464-1"><a href="#cb464-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[noDefaults]{<span class="ex">markdown</span>}</span></code></pre></div> +<p>Here is how you would enable the macro in a Con<span +class="tex">T<sub>e</sub>X</span>t document:</p> +<div class="sourceCode" id="cb465"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb465-1"><a href="#cb465-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionNoDefaults</span>{true}</span> +<span id="cb465-2"><a href="#cb465-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span></code></pre></div> +<p>The macro must be set before or during the loading of the package. +Setting the macro after loading the package has no effect.</p> +<h4 data-number="2.2.2.5" id="package-documentation"><span +class="header-section-number">2.2.2.5</span> Package Documentation</h4> <p>The <code>\markdownOptionStripPercentSigns</code> macro controls whether a percent sign (<code>\%</code>) at the beginning of a line will be discarded when reading Markdown input from a <span @@ -7197,33 +8010,179 @@ Mittelbach. The recognized values of the macro are <code>true</code> <code>false</code>.</p> <p>Using a text editor, create a text document named <code>document.dtx</code> with the following content:</p> -<div class="sourceCode" id="cb427"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb427-1"><a href="#cb427-1" aria-hidden="true" tabindex="-1"></a><span class="co">% \iffalse</span></span> -<span id="cb427-2"><a href="#cb427-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">ltxdoc</span>}</span> -<span id="cb427-3"><a href="#cb427-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[stripPercentSigns]{<span class="ex">markdown</span>}</span> -<span id="cb427-4"><a href="#cb427-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb427-5"><a href="#cb427-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\DocInput</span>{document.dtx}</span> -<span id="cb427-6"><a href="#cb427-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span> -<span id="cb427-7"><a href="#cb427-7" aria-hidden="true" tabindex="-1"></a><span class="co">% \fi</span></span> -<span id="cb427-8"><a href="#cb427-8" aria-hidden="true" tabindex="-1"></a><span class="co">%</span></span> -<span id="cb427-9"><a href="#cb427-9" aria-hidden="true" tabindex="-1"></a><span class="co">% \begin{markdown}</span></span> -<span id="cb427-10"><a href="#cb427-10" aria-hidden="true" tabindex="-1"></a><span class="co">% Hello *world*!</span></span> -<span id="cb427-11"><a href="#cb427-11" aria-hidden="true" tabindex="-1"></a><span class="co">% \end{markdown}</span></span></code></pre></div> +<div class="sourceCode" id="cb466"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb466-1"><a href="#cb466-1" aria-hidden="true" tabindex="-1"></a><span class="co">% \iffalse</span></span> +<span id="cb466-2"><a href="#cb466-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">ltxdoc</span>}</span> +<span id="cb466-3"><a href="#cb466-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[stripPercentSigns]{<span class="ex">markdown</span>}</span> +<span id="cb466-4"><a href="#cb466-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb466-5"><a href="#cb466-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\DocInput</span>{document.dtx}</span> +<span id="cb466-6"><a href="#cb466-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span> +<span id="cb466-7"><a href="#cb466-7" aria-hidden="true" tabindex="-1"></a><span class="co">% \fi</span></span> +<span id="cb466-8"><a href="#cb466-8" aria-hidden="true" tabindex="-1"></a><span class="co">%</span></span> +<span id="cb466-9"><a href="#cb466-9" aria-hidden="true" tabindex="-1"></a><span class="co">% \begin{markdown}</span></span> +<span id="cb466-10"><a href="#cb466-10" aria-hidden="true" tabindex="-1"></a><span class="co">% Hello *world*!</span></span> +<span id="cb466-11"><a href="#cb466-11" aria-hidden="true" tabindex="-1"></a><span class="co">% \end{markdown}</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb428"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb428-1"><a href="#cb428-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.dtx</span></code></pre></div> +<div class="sourceCode" id="cb467"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb467-1"><a href="#cb467-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.dtx</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the text “Hello <em>world</em>!”</p> -<h3 data-number="2.2.3" id="latex-1"><span -class="header-section-number">2.2.3</span> <span +<h3 data-number="2.2.3" id="themes"><span +class="header-section-number">2.2.3</span> Themes</h3> +<p>User-defined themes for the Markdown package provide a +domain-specific interpretation of Markdown tokens. Themes allow the +authors to achieve a specific look and other high-level goals without +low-level programming.</p> +<p>Built-in plain <span class="tex">T<sub>e</sub>X</span> themes +provided with the Markdown package include:</p> +<dl> +<dt><strong><code>witiko/tilde</code></strong></dt> +<dd> +<p>A theme that makes tilde (<code>~</code>) always typeset the +non-breaking space even when the <strong><code>hybrid</code></strong> +Lua option is disabled.</p> +</dd> +</dl> +<h5 class="unnumbered" id="plain-tex-example-24">Plain <span +class="tex">T<sub>e</sub>X</span> Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb468"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb468-1"><a href="#cb468-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb468-2"><a href="#cb468-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{import=witiko/tilde}</span> +<span id="cb468-3"><a href="#cb468-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb468-4"><a href="#cb468-4" aria-hidden="true" tabindex="-1"></a>Bartel~Leendert van~der~Waerden</span> +<span id="cb468-5"><a href="#cb468-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb468-6"><a href="#cb468-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb469"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb469-1"><a href="#cb469-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text, where the middot (<code>·</code>) denotes a +non-breaking space:</p> +<blockquote> +<p>Bartel·Leendert van·der·Waerden</p> +</blockquote> +<dl> +<dt><strong><code>witiko/markdown/defaults</code></strong></dt> +<dd> +<p>A plain <span class="tex">T<sub>e</sub>X</span> theme with the +default definitions of token renderer prototypes for plain <span +class="tex">T<sub>e</sub>X</span>. This theme is loaded automatically +together with the package and explicitly loading it has no effect.</p> +</dd> +</dl> +<h3 data-number="2.2.4" id="snippets"><span +class="header-section-number">2.2.4</span> Snippets</h3> +<p>User-defined themes provide global control over high-level goals. +However, it is often desirable to change only some local aspects of a +document. Snippets provide syntactic sugar for defining and invoking +various options locally.</p> +<p>Here is how we can use snippets to store options and invoke them +later in <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span>:</p> +<div class="sourceCode" id="cb470"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb470-1"><a href="#cb470-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetupSnippet</span>{romanNumerals}{</span> +<span id="cb470-2"><a href="#cb470-2" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb470-3"><a href="#cb470-3" aria-hidden="true" tabindex="-1"></a> olItemWithNumber = {<span class="co">%</span></span> +<span id="cb470-4"><a href="#cb470-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">\item</span>[<span class="fu">\romannumeral</span>#1<span class="fu">\relax</span>.]<span class="co">%</span></span> +<span id="cb470-5"><a href="#cb470-5" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb470-6"><a href="#cb470-6" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb470-7"><a href="#cb470-7" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb470-8"><a href="#cb470-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb470-9"><a href="#cb470-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb470-10"><a href="#cb470-10" aria-hidden="true" tabindex="-1"></a>The following ordered list will be preceded by arabic numerals:</span> +<span id="cb470-11"><a href="#cb470-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb470-12"><a href="#cb470-12" aria-hidden="true" tabindex="-1"></a>1. wahid</span> +<span id="cb470-13"><a href="#cb470-13" aria-hidden="true" tabindex="-1"></a>2. aithnayn</span> +<span id="cb470-14"><a href="#cb470-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb470-15"><a href="#cb470-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb470-16"><a href="#cb470-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[snippet=romanNumerals]</span> +<span id="cb470-17"><a href="#cb470-17" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb470-18"><a href="#cb470-18" aria-hidden="true" tabindex="-1"></a>The following ordered list will be preceded by roman numerals:</span> +<span id="cb470-19"><a href="#cb470-19" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb470-20"><a href="#cb470-20" aria-hidden="true" tabindex="-1"></a>3. tres</span> +<span id="cb470-21"><a href="#cb470-21" aria-hidden="true" tabindex="-1"></a>4. quattuor</span> +<span id="cb470-22"><a href="#cb470-22" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb470-23"><a href="#cb470-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span></code></pre></div> +<p>If the <code>romanNumerals</code> snippet were defined in the +<code>jdoe/lists</code> theme, we could import the +<code>jdoe/lists</code> theme and use the qualified name +<code>jdoe/lists/romanNumerals</code> to invoke the snippet:</p> +<div class="sourceCode" id="cb471"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb471-1"><a href="#cb471-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{import=jdoe/lists}</span> +<span id="cb471-2"><a href="#cb471-2" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[snippet=jdoe/lists/romanNumerals]</span> +<span id="cb471-3"><a href="#cb471-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb471-4"><a href="#cb471-4" aria-hidden="true" tabindex="-1"></a>The following ordered list will be preceded by roman numerals:</span> +<span id="cb471-5"><a href="#cb471-5" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb471-6"><a href="#cb471-6" aria-hidden="true" tabindex="-1"></a>3. tres</span> +<span id="cb471-7"><a href="#cb471-7" aria-hidden="true" tabindex="-1"></a>4. quattuor</span> +<span id="cb471-8"><a href="#cb471-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb471-9"><a href="#cb471-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span></code></pre></div> +<p>Alternatively, we can use the extended variant of the +<code>import</code> <span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> option that allows us +to import the <code>romanNumerals</code> snippet to the current +namespace for easier access:</p> +<div class="sourceCode" id="cb472"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb472-1"><a href="#cb472-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb472-2"><a href="#cb472-2" aria-hidden="true" tabindex="-1"></a> import = {</span> +<span id="cb472-3"><a href="#cb472-3" aria-hidden="true" tabindex="-1"></a> jdoe/lists = romanNumerals,</span> +<span id="cb472-4"><a href="#cb472-4" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb472-5"><a href="#cb472-5" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb472-6"><a href="#cb472-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[snippet=romanNumerals]</span> +<span id="cb472-7"><a href="#cb472-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb472-8"><a href="#cb472-8" aria-hidden="true" tabindex="-1"></a>The following ordered list will be preceded by roman numerals:</span> +<span id="cb472-9"><a href="#cb472-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb472-10"><a href="#cb472-10" aria-hidden="true" tabindex="-1"></a>3. tres</span> +<span id="cb472-11"><a href="#cb472-11" aria-hidden="true" tabindex="-1"></a>4. quattuor</span> +<span id="cb472-12"><a href="#cb472-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb472-13"><a href="#cb472-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span></code></pre></div> +<p>Furthermore, we can also specify the name of the snippet in the +current namespace, which can be different from the name of the snippet +in the <code>jdoe/lists</code> theme. For example, we can make the +snippet <code>jdoe/lists/romanNumerals</code> available under the name +<code>roman</code>.</p> +<div class="sourceCode" id="cb473"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb473-1"><a href="#cb473-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb473-2"><a href="#cb473-2" aria-hidden="true" tabindex="-1"></a> import = {</span> +<span id="cb473-3"><a href="#cb473-3" aria-hidden="true" tabindex="-1"></a> jdoe/lists = romanNumerals as roman,</span> +<span id="cb473-4"><a href="#cb473-4" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb473-5"><a href="#cb473-5" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb473-6"><a href="#cb473-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[snippet=roman]</span> +<span id="cb473-7"><a href="#cb473-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb473-8"><a href="#cb473-8" aria-hidden="true" tabindex="-1"></a>The following ordered list will be preceded by roman numerals:</span> +<span id="cb473-9"><a href="#cb473-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb473-10"><a href="#cb473-10" aria-hidden="true" tabindex="-1"></a>3. tres</span> +<span id="cb473-11"><a href="#cb473-11" aria-hidden="true" tabindex="-1"></a>4. quattuor</span> +<span id="cb473-12"><a href="#cb473-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb473-13"><a href="#cb473-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span></code></pre></div> +<p>Several themes and/or snippets can be loaded at once using the +extended variant of the <code>import</code> <span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> option:</p> +<div class="sourceCode" id="cb474"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb474-1"><a href="#cb474-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb474-2"><a href="#cb474-2" aria-hidden="true" tabindex="-1"></a> import = {</span> +<span id="cb474-3"><a href="#cb474-3" aria-hidden="true" tabindex="-1"></a> jdoe/longpackagename/lists = {</span> +<span id="cb474-4"><a href="#cb474-4" aria-hidden="true" tabindex="-1"></a> arabic as arabic1,</span> +<span id="cb474-5"><a href="#cb474-5" aria-hidden="true" tabindex="-1"></a> roman,</span> +<span id="cb474-6"><a href="#cb474-6" aria-hidden="true" tabindex="-1"></a> alphabetic,</span> +<span id="cb474-7"><a href="#cb474-7" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb474-8"><a href="#cb474-8" aria-hidden="true" tabindex="-1"></a> jdoe/anotherlongpackagename/lists = {</span> +<span id="cb474-9"><a href="#cb474-9" aria-hidden="true" tabindex="-1"></a> arabic as arabic2,</span> +<span id="cb474-10"><a href="#cb474-10" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb474-11"><a href="#cb474-11" aria-hidden="true" tabindex="-1"></a> jdoe/yetanotherlongpackagename,</span> +<span id="cb474-12"><a href="#cb474-12" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb474-13"><a href="#cb474-13" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> +<h3 data-number="2.2.5" id="latex-1"><span +class="header-section-number">2.2.5</span> <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span></h3> <p><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> options allow us to disable the redefinition of the default renderer prototypes from plain <span class="tex">T<sub>e</sub>X</span>, load user-defined themes, and invoke user-defined set-up snippets.</p> -<h4 data-number="2.2.3.1" +<h4 data-number="2.2.5.1" id="setting-lua-and-plain-tex-options-from-latex"><span -class="header-section-number">2.2.3.1</span> Setting Lua and plain <span +class="header-section-number">2.2.5.1</span> Setting Lua and plain <span class="tex">T<sub>e</sub>X</span> options from <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span></h4> <p>As a rule of thumb, we can set all Lua options directly from <span @@ -7231,59 +8190,60 @@ class="latex">L<sup>a</sup>T<sub>e</sub>X</span>. For example, to set the <strong><code>taskLists</code></strong> Lua option to <code>true</code>, we would include the following code in our <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> document:</p> -<div class="sourceCode" id="cb429"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb429-1"><a href="#cb429-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb429-2"><a href="#cb429-2" aria-hidden="true" tabindex="-1"></a> taskLists = true,</span> -<span id="cb429-3"><a href="#cb429-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> +<div class="sourceCode" id="cb475"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb475-1"><a href="#cb475-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb475-2"><a href="#cb475-2" aria-hidden="true" tabindex="-1"></a> taskLists = true,</span> +<span id="cb475-3"><a href="#cb475-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> <p>We can also set all plain <span class="tex">T<sub>e</sub>X</span> options directly from <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span>. For example, to set -the <code>\markdownOptionHelperScriptFileName</code> plain <span +the <code>\markdownOptionInputTempFileName</code> plain <span class="tex">T<sub>e</sub>X</span> option to <code>helper-script.lua</code>, we would inclde the following code in our <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> document:</p> -<div class="sourceCode" id="cb430"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb430-1"><a href="#cb430-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb430-2"><a href="#cb430-2" aria-hidden="true" tabindex="-1"></a> helperScriptFileName = helper-script.lua,</span> -<span id="cb430-3"><a href="#cb430-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> -<h4 data-number="2.2.3.2" id="latexplain"><span -class="header-section-number">2.2.3.2</span> No default token renderer -prototypes</h4> -<p>Default token renderer prototypes require <span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> packages that may clash -with other packages used in a document. Additionally, if we redefine -token renderers and renderer prototypes ourselves, the default -definitions will bring no benefit to us. Using the <code>plain</code> -package option, we can keep the default definitions from the plain <span -class="tex">T<sub>e</sub>X</span> implementation and prevent the soft -<span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> prerequisites -from being loaded: The plain option must be set before or when loading -the package. Setting the option after loading the package will have no -effect.</p> -<div class="sourceCode" id="cb431"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb431-1"><a href="#cb431-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[plain]{<span class="ex">markdown</span>}</span></code></pre></div> -<h4 data-number="2.2.3.3" id="latexthemes"><span -class="header-section-number">2.2.3.3</span> <span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> themes</h4> -<p>User-defined <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> -themes for the Markdown package provide a domain-specific interpretation -of Markdown tokens. Similarly to <span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> packages, themes allow -the authors to achieve a specific look and other high-level goals -without low-level programming.</p> +<div class="sourceCode" id="cb476"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb476-1"><a href="#cb476-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb476-2"><a href="#cb476-2" aria-hidden="true" tabindex="-1"></a> inputTempFileName = temporary-input.md,</span> +<span id="cb476-3"><a href="#cb476-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> +<h3 data-number="2.2.6" id="latexthemes"><span +class="header-section-number">2.2.6</span> Themes</h3> +<p>In <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span>, we expand +on the concept of <a href="#themes">themes</a> by allowing a theme to be +a full-blown <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> +package. Specifically, the key-values <code>theme</code>=⟨<em>theme +name</em>⟩ and <code>import</code>=⟨<em>theme name</em>⟩ load a <span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> package named +<code>markdowntheme</code>⟨<em>munged theme name</em>⟩<code>.sty</code> +if it exists and a <span class="tex">T<sub>e</sub>X</span> document +named <code>markdowntheme</code>\meta{munged theme +name}<code>.tex</code> otherwise.</p> +<p>Having the Markdown package automatically load either the generic +<code>.tex</code> <em>theme file</em> or the <span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span>-specific +<code>.sty</code> theme file allows developers to have a single +<em>theme file</em>, when the theme is small or the difference between +<span class="tex">T<sub>e</sub>X</span> formats is unimportant, and +scale up to separate theme files native to different <span +class="tex">T<sub>e</sub>X</span> formats for large multi-format themes, +where different code is needed for different <span +class="tex">T<sub>e</sub>X</span> formats. To enable code reuse, +developers can load the <code>.tex</code> theme file from the +<code>.sty</code> theme file using the +<code>\markdownLoadPlainTeXTheme</code> macro.</p> <p>For example, to load themes named <code>witiko/beamer/MU</code> and <code>witiko/dot</code>, you would use the following code in the preamble of your document:</p> -<div class="sourceCode" id="cb432"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb432-1"><a href="#cb432-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[</span> -<span id="cb432-2"><a href="#cb432-2" aria-hidden="true" tabindex="-1"></a> import=witiko/beamer/MU,</span> -<span id="cb432-3"><a href="#cb432-3" aria-hidden="true" tabindex="-1"></a> import=witiko/dot,</span> -<span id="cb432-4"><a href="#cb432-4" aria-hidden="true" tabindex="-1"></a>]{<span class="ex">markdown</span>}</span></code></pre></div> +<div class="sourceCode" id="cb477"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb477-1"><a href="#cb477-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[</span> +<span id="cb477-2"><a href="#cb477-2" aria-hidden="true" tabindex="-1"></a> import=witiko/beamer/MU,</span> +<span id="cb477-3"><a href="#cb477-3" aria-hidden="true" tabindex="-1"></a> import=witiko/dot,</span> +<span id="cb477-4"><a href="#cb477-4" aria-hidden="true" tabindex="-1"></a>]{<span class="ex">markdown</span>}</span></code></pre></div> <p>Due to limitations of <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span>, themes may not be loaded after the beginning of a <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> document.</p> -<p>Example themes provided with the Markdown package include:</p> +<p>Built-in <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> +themes provided with the Markdown package include:</p> <dl> <dt><strong><code>witiko/dot</code></strong></dt> <dd> @@ -7296,48 +8256,48 @@ installed. The theme also requires shell access unless the class="tex">T<sub>e</sub>X</span> option is enabled.</p> </dd> </dl> -<h5 class="unnumbered" id="latex-example-51"><span +<h5 class="unnumbered" id="latex-example-54"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb433"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb433-1"><a href="#cb433-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb433-2"><a href="#cb433-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[import=witiko/dot]{<span class="ex">markdown</span>}</span> -<span id="cb433-3"><a href="#cb433-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\setkeys</span>{Gin}{</span> -<span id="cb433-4"><a href="#cb433-4" aria-hidden="true" tabindex="-1"></a> width=<span class="fu">\columnwidth</span>,</span> -<span id="cb433-5"><a href="#cb433-5" aria-hidden="true" tabindex="-1"></a> height=0.65<span class="fu">\paperheight</span>,</span> -<span id="cb433-6"><a href="#cb433-6" aria-hidden="true" tabindex="-1"></a> keepaspectratio}</span> -<span id="cb433-7"><a href="#cb433-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb433-8"><a href="#cb433-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb433-9"><a href="#cb433-9" aria-hidden="true" tabindex="-1"></a>``` dot Various formats of mathemathical formulae</span> -<span id="cb433-10"><a href="#cb433-10" aria-hidden="true" tabindex="-1"></a>digraph tree {</span> -<span id="cb433-11"><a href="#cb433-11" aria-hidden="true" tabindex="-1"></a> margin = 0;</span> -<span id="cb433-12"><a href="#cb433-12" aria-hidden="true" tabindex="-1"></a> rankdir = "LR";</span> -<span id="cb433-13"><a href="#cb433-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb433-14"><a href="#cb433-14" aria-hidden="true" tabindex="-1"></a> latex -> pmml;</span> -<span id="cb433-15"><a href="#cb433-15" aria-hidden="true" tabindex="-1"></a> latex -> cmml;</span> -<span id="cb433-16"><a href="#cb433-16" aria-hidden="true" tabindex="-1"></a> pmml -> slt;</span> -<span id="cb433-17"><a href="#cb433-17" aria-hidden="true" tabindex="-1"></a> cmml -> opt;</span> -<span id="cb433-18"><a href="#cb433-18" aria-hidden="true" tabindex="-1"></a> cmml -> prefix;</span> -<span id="cb433-19"><a href="#cb433-19" aria-hidden="true" tabindex="-1"></a> cmml -> infix;</span> -<span id="cb433-20"><a href="#cb433-20" aria-hidden="true" tabindex="-1"></a> pmml -> mterms [style=dashed];</span> -<span id="cb433-21"><a href="#cb433-21" aria-hidden="true" tabindex="-1"></a> cmml -> mterms;</span> -<span id="cb433-22"><a href="#cb433-22" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb433-23"><a href="#cb433-23" aria-hidden="true" tabindex="-1"></a> latex [label = "LaTeX"];</span> -<span id="cb433-24"><a href="#cb433-24" aria-hidden="true" tabindex="-1"></a> pmml [label = "Presentation MathML"];</span> -<span id="cb433-25"><a href="#cb433-25" aria-hidden="true" tabindex="-1"></a> cmml [label = "Content MathML"];</span> -<span id="cb433-26"><a href="#cb433-26" aria-hidden="true" tabindex="-1"></a> slt [label = "Symbol Layout Tree"];</span> -<span id="cb433-27"><a href="#cb433-27" aria-hidden="true" tabindex="-1"></a> opt [label = "Operator Tree"];</span> -<span id="cb433-28"><a href="#cb433-28" aria-hidden="true" tabindex="-1"></a> prefix [label = "Prefix"];</span> -<span id="cb433-29"><a href="#cb433-29" aria-hidden="true" tabindex="-1"></a> infix [label = "Infix"];</span> -<span id="cb433-30"><a href="#cb433-30" aria-hidden="true" tabindex="-1"></a> mterms [label = "M-Terms"];</span> -<span id="cb433-31"><a href="#cb433-31" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb433-32"><a href="#cb433-32" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb433-33"><a href="#cb433-33" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb433-34"><a href="#cb433-34" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb478"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb478-1"><a href="#cb478-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb478-2"><a href="#cb478-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[import=witiko/dot]{<span class="ex">markdown</span>}</span> +<span id="cb478-3"><a href="#cb478-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\setkeys</span>{Gin}{</span> +<span id="cb478-4"><a href="#cb478-4" aria-hidden="true" tabindex="-1"></a> width=<span class="fu">\columnwidth</span>,</span> +<span id="cb478-5"><a href="#cb478-5" aria-hidden="true" tabindex="-1"></a> height=0.65<span class="fu">\paperheight</span>,</span> +<span id="cb478-6"><a href="#cb478-6" aria-hidden="true" tabindex="-1"></a> keepaspectratio}</span> +<span id="cb478-7"><a href="#cb478-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb478-8"><a href="#cb478-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb478-9"><a href="#cb478-9" aria-hidden="true" tabindex="-1"></a>``` dot Various formats of mathemathical formulae</span> +<span id="cb478-10"><a href="#cb478-10" aria-hidden="true" tabindex="-1"></a>digraph tree {</span> +<span id="cb478-11"><a href="#cb478-11" aria-hidden="true" tabindex="-1"></a> margin = 0;</span> +<span id="cb478-12"><a href="#cb478-12" aria-hidden="true" tabindex="-1"></a> rankdir = "LR";</span> +<span id="cb478-13"><a href="#cb478-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb478-14"><a href="#cb478-14" aria-hidden="true" tabindex="-1"></a> latex -> pmml;</span> +<span id="cb478-15"><a href="#cb478-15" aria-hidden="true" tabindex="-1"></a> latex -> cmml;</span> +<span id="cb478-16"><a href="#cb478-16" aria-hidden="true" tabindex="-1"></a> pmml -> slt;</span> +<span id="cb478-17"><a href="#cb478-17" aria-hidden="true" tabindex="-1"></a> cmml -> opt;</span> +<span id="cb478-18"><a href="#cb478-18" aria-hidden="true" tabindex="-1"></a> cmml -> prefix;</span> +<span id="cb478-19"><a href="#cb478-19" aria-hidden="true" tabindex="-1"></a> cmml -> infix;</span> +<span id="cb478-20"><a href="#cb478-20" aria-hidden="true" tabindex="-1"></a> pmml -> mterms [style=dashed];</span> +<span id="cb478-21"><a href="#cb478-21" aria-hidden="true" tabindex="-1"></a> cmml -> mterms;</span> +<span id="cb478-22"><a href="#cb478-22" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb478-23"><a href="#cb478-23" aria-hidden="true" tabindex="-1"></a> latex [label = "LaTeX"];</span> +<span id="cb478-24"><a href="#cb478-24" aria-hidden="true" tabindex="-1"></a> pmml [label = "Presentation MathML"];</span> +<span id="cb478-25"><a href="#cb478-25" aria-hidden="true" tabindex="-1"></a> cmml [label = "Content MathML"];</span> +<span id="cb478-26"><a href="#cb478-26" aria-hidden="true" tabindex="-1"></a> slt [label = "Symbol Layout Tree"];</span> +<span id="cb478-27"><a href="#cb478-27" aria-hidden="true" tabindex="-1"></a> opt [label = "Operator Tree"];</span> +<span id="cb478-28"><a href="#cb478-28" aria-hidden="true" tabindex="-1"></a> prefix [label = "Prefix"];</span> +<span id="cb478-29"><a href="#cb478-29" aria-hidden="true" tabindex="-1"></a> infix [label = "Infix"];</span> +<span id="cb478-30"><a href="#cb478-30" aria-hidden="true" tabindex="-1"></a> mterms [label = "M-Terms"];</span> +<span id="cb478-31"><a href="#cb478-31" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb478-32"><a href="#cb478-32" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb478-33"><a href="#cb478-33" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb478-34"><a href="#cb478-34" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb434"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb434-1"><a href="#cb434-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb479"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb479-1"><a href="#cb479-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain a drawing of a directed graph similar to Figure 1 from the following conference article:</p> @@ -7363,164 +8323,82 @@ Wget or cURL installed. The theme also requires shell access unless the class="tex">T<sub>e</sub>X</span> option is enabled.</p> </dd> </dl> -<h5 class="unnumbered" id="latex-example-52"><span +<h5 class="unnumbered" id="latex-example-55"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb435"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb435-1"><a href="#cb435-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb435-2"><a href="#cb435-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[import=witiko/graphicx/http]{<span class="ex">markdown</span>}</span> -<span id="cb435-3"><a href="#cb435-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb435-4"><a href="#cb435-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb435-5"><a href="#cb435-5" aria-hidden="true" tabindex="-1"></a>![img](https://github.com/witiko/markdown/raw/main/markdown.png</span> -<span id="cb435-6"><a href="#cb435-6" aria-hidden="true" tabindex="-1"></a> "The banner of the Markdown package")</span> -<span id="cb435-7"><a href="#cb435-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb435-8"><a href="#cb435-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb480"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb480-1"><a href="#cb480-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb480-2"><a href="#cb480-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[import=witiko/graphicx/http]{<span class="ex">markdown</span>}</span> +<span id="cb480-3"><a href="#cb480-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb480-4"><a href="#cb480-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb480-5"><a href="#cb480-5" aria-hidden="true" tabindex="-1"></a>![img](https://github.com/witiko/markdown/raw/main/markdown.png</span> +<span id="cb480-6"><a href="#cb480-6" aria-hidden="true" tabindex="-1"></a> "The banner of the Markdown package")</span> +<span id="cb480-7"><a href="#cb480-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb480-8"><a href="#cb480-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb436"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb436-1"><a href="#cb436-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb481"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb481-1"><a href="#cb481-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following image:</p> <blockquote> <figure> -<img -src="https://github.com/witiko/markdown/raw/main/markdown.png%20%22The%20banner%20of%20the%20Markdown%20package%22" -alt="img" /> +<img src="https://github.com/witiko/markdown/raw/main/markdown.png" +title="The banner of the Markdown package" alt="img" /> <figcaption aria-hidden="true">img</figcaption> </figure> </blockquote> <dl> -<dt><strong><code>witiko/tilde</code></strong></dt> +<dt><strong><code>witiko/markdown/defaults</code></strong></dt> +<dd> +<p>A <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> theme with +the default definitions of token renderer prototypes for plain <span +class="tex">T<sub>e</sub>X</span>. This theme is loaded automatically +together with the package and explicitly loading it has no effect.</p> +</dd> +</dl> +<h3 data-number="2.2.7" id="themes-1"><span +class="header-section-number">2.2.7</span> Themes</h3> +<p>In Con<span class="tex">T<sub>e</sub>X</span>t, we expand on the +concept of <a href="#themes">themes</a> by allowing a theme to be a +full-blown Con<span class="tex">T<sub>e</sub>X</span>t module. +Specifically, the key-values <code>theme</code>=⟨<em>theme name</em>⟩ +and <code>import</code>=⟨<em>theme name</em>⟩ load a Con<span +class="tex">T<sub>e</sub>X</span>t module named +<code>t-markdowntheme</code>⟨<em>munged theme +name</em>⟩<code>.tex</code> if it exists and a <span +class="tex">T<sub>e</sub>X</span> document named +<code>markdowntheme</code>\meta{munged theme name}<code>.tex</code> +otherwise.</p> +<p>Having the Markdown package automatically load either the generic +<code>.tex</code> <em>theme file</em> or the Con<span +class="tex">T<sub>e</sub>X</span>t-specific <code>t-*.tex</code> theme +file allows developers to have a single <em>theme file</em>, when the +theme is small or the difference between <span +class="tex">T<sub>e</sub>X</span> formats is unimportant, and scale up +to separate theme files native to different <span +class="tex">T<sub>e</sub>X</span> formats for large multi-format themes, +where different code is needed for different <span +class="tex">T<sub>e</sub>X</span> formats. To enable code reuse, +developers can load the <code>.tex</code> theme file from the +<code>t-*.tex</code> theme file using the +<code>\markdownLoadPlainTeXTheme</code> macro.</p> +<p>For example, to load a theme named <code>witiko/tilde</code> in your +document:</p> +<div class="sourceCode" id="cb482"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb482-1"><a href="#cb482-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb482-2"><a href="#cb482-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[import=witiko/tilde]</span></code></pre></div> +<p>Built-in Con<span class="tex">T<sub>e</sub>X</span>t themes provided +with the Markdown package include:</p> +<dl> +<dt><strong><code>witiko/markdown/defaults</code></strong></dt> <dd> -<p>A theme that makes tilde (<code>~</code>) always typeset the -non-breaking space even when the <strong><code>hybrid</code></strong> -Lua option is disabled.</p> +<p>A Con<span class="tex">T<sub>e</sub>X</span>t theme with the default +definitions of token renderer prototypes for plain <span +class="tex">T<sub>e</sub>X</span>. This theme is loaded automatically +together with the package and explicitly loading it has no effect.</p> </dd> </dl> -<h5 class="unnumbered" id="latex-example-53"><span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> -<p>Using a text editor, create a text document named -<code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb437"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb437-1"><a href="#cb437-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb437-2"><a href="#cb437-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[import=witiko/tilde]{<span class="ex">markdown</span>}</span> -<span id="cb437-3"><a href="#cb437-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb437-4"><a href="#cb437-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb437-5"><a href="#cb437-5" aria-hidden="true" tabindex="-1"></a>Bartel~Leendert van~der~Waerden</span> -<span id="cb437-6"><a href="#cb437-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb437-7"><a href="#cb437-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb438"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb438-1"><a href="#cb438-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> -<p>A PDF document named <code>document.pdf</code> should be produced and -contain the following text, where the middot (<code>·</code>) denotes a -non-breaking space:</p> -<blockquote> -<p>Bartel·Leendert van·der·Waerden</p> -</blockquote> -<h4 data-number="2.2.3.4" id="latexsnippets"><span -class="header-section-number">2.2.3.4</span> <span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> snippets</h4> -<p>User-defined <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> -themes provide global control over high-level goals. However, it is -often desirable to change only some local aspects of a document. <span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> snippets provide -syntactic sugar for defining and invoking various options locally.</p> -<p>Here is how we can use snippets to store options and invoke them -later:</p> -<div class="sourceCode" id="cb439"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb439-1"><a href="#cb439-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetupSnippet</span>{romanNumerals}{</span> -<span id="cb439-2"><a href="#cb439-2" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb439-3"><a href="#cb439-3" aria-hidden="true" tabindex="-1"></a> olItemWithNumber = {<span class="co">%</span></span> -<span id="cb439-4"><a href="#cb439-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">\item</span>[<span class="fu">\romannumeral</span>#1<span class="fu">\relax</span>.]<span class="co">%</span></span> -<span id="cb439-5"><a href="#cb439-5" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb439-6"><a href="#cb439-6" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb439-7"><a href="#cb439-7" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb439-8"><a href="#cb439-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb439-9"><a href="#cb439-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb439-10"><a href="#cb439-10" aria-hidden="true" tabindex="-1"></a>The following ordered list will be preceded by arabic numerals:</span> -<span id="cb439-11"><a href="#cb439-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb439-12"><a href="#cb439-12" aria-hidden="true" tabindex="-1"></a>1. wahid</span> -<span id="cb439-13"><a href="#cb439-13" aria-hidden="true" tabindex="-1"></a>2. aithnayn</span> -<span id="cb439-14"><a href="#cb439-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb439-15"><a href="#cb439-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb439-16"><a href="#cb439-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{snippet=romanNumerals}</span> -<span id="cb439-17"><a href="#cb439-17" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb439-18"><a href="#cb439-18" aria-hidden="true" tabindex="-1"></a>The following ordered list will be preceded by roman numerals:</span> -<span id="cb439-19"><a href="#cb439-19" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb439-20"><a href="#cb439-20" aria-hidden="true" tabindex="-1"></a>3. tres</span> -<span id="cb439-21"><a href="#cb439-21" aria-hidden="true" tabindex="-1"></a>4. quattuor</span> -<span id="cb439-22"><a href="#cb439-22" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb439-23"><a href="#cb439-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span></code></pre></div> -<p>If the <code>romanNumerals</code> snippet were defined in the -<code>jdoe/lists</code> theme, we could import the -<code>jdoe/lists</code> theme and use the qualified name -<code>jdoe/lists/romanNumerals</code> to invoke the snippet:</p> -<div class="sourceCode" id="cb440"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb440-1"><a href="#cb440-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{import=jdoe/lists}</span> -<span id="cb440-2"><a href="#cb440-2" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{snippet=jdoe/lists/romanNumerals}</span> -<span id="cb440-3"><a href="#cb440-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb440-4"><a href="#cb440-4" aria-hidden="true" tabindex="-1"></a>The following ordered list will be preceded by roman numerals:</span> -<span id="cb440-5"><a href="#cb440-5" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb440-6"><a href="#cb440-6" aria-hidden="true" tabindex="-1"></a>3. tres</span> -<span id="cb440-7"><a href="#cb440-7" aria-hidden="true" tabindex="-1"></a>4. quattuor</span> -<span id="cb440-8"><a href="#cb440-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb440-9"><a href="#cb440-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span></code></pre></div> -<p>Alternatively, we can use the extended variant of the -<code>import</code> <span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> option that allows us -to import the <code>romanNumerals</code> snippet to the current -namespace for easier access:</p> -<div class="sourceCode" id="cb441"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb441-1"><a href="#cb441-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb441-2"><a href="#cb441-2" aria-hidden="true" tabindex="-1"></a> import = {</span> -<span id="cb441-3"><a href="#cb441-3" aria-hidden="true" tabindex="-1"></a> jdoe/lists = romanNumerals,</span> -<span id="cb441-4"><a href="#cb441-4" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb441-5"><a href="#cb441-5" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb441-6"><a href="#cb441-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{snippet=romanNumerals}</span> -<span id="cb441-7"><a href="#cb441-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb441-8"><a href="#cb441-8" aria-hidden="true" tabindex="-1"></a>The following ordered list will be preceded by roman numerals:</span> -<span id="cb441-9"><a href="#cb441-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb441-10"><a href="#cb441-10" aria-hidden="true" tabindex="-1"></a>3. tres</span> -<span id="cb441-11"><a href="#cb441-11" aria-hidden="true" tabindex="-1"></a>4. quattuor</span> -<span id="cb441-12"><a href="#cb441-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb441-13"><a href="#cb441-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span></code></pre></div> -<p>Furthermore, we can also specify the name of the snippet in the -current namespace, which can be different from the name of the snippet -in the <code>jdoe/lists</code> theme. For example, we can make the -snippet <code>jdoe/lists/romanNumerals</code> available under the name -<code>roman</code>.</p> -<div class="sourceCode" id="cb442"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb442-1"><a href="#cb442-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb442-2"><a href="#cb442-2" aria-hidden="true" tabindex="-1"></a> import = {</span> -<span id="cb442-3"><a href="#cb442-3" aria-hidden="true" tabindex="-1"></a> jdoe/lists = romanNumerals as roman,</span> -<span id="cb442-4"><a href="#cb442-4" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb442-5"><a href="#cb442-5" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb442-6"><a href="#cb442-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{snippet=roman}</span> -<span id="cb442-7"><a href="#cb442-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb442-8"><a href="#cb442-8" aria-hidden="true" tabindex="-1"></a>The following ordered list will be preceded by roman numerals:</span> -<span id="cb442-9"><a href="#cb442-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb442-10"><a href="#cb442-10" aria-hidden="true" tabindex="-1"></a>3. tres</span> -<span id="cb442-11"><a href="#cb442-11" aria-hidden="true" tabindex="-1"></a>4. quattuor</span> -<span id="cb442-12"><a href="#cb442-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb442-13"><a href="#cb442-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span></code></pre></div> -<p>Several themes and/or snippets can be loaded at once using the -extended variant of the <code>import</code> <span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> option:</p> -<div class="sourceCode" id="cb443"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb443-1"><a href="#cb443-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb443-2"><a href="#cb443-2" aria-hidden="true" tabindex="-1"></a> import = {</span> -<span id="cb443-3"><a href="#cb443-3" aria-hidden="true" tabindex="-1"></a> jdoe/longpackagename/lists = {</span> -<span id="cb443-4"><a href="#cb443-4" aria-hidden="true" tabindex="-1"></a> arabic as arabic1,</span> -<span id="cb443-5"><a href="#cb443-5" aria-hidden="true" tabindex="-1"></a> roman,</span> -<span id="cb443-6"><a href="#cb443-6" aria-hidden="true" tabindex="-1"></a> alphabetic,</span> -<span id="cb443-7"><a href="#cb443-7" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb443-8"><a href="#cb443-8" aria-hidden="true" tabindex="-1"></a> jdoe/anotherlongpackagename/lists = {</span> -<span id="cb443-9"><a href="#cb443-9" aria-hidden="true" tabindex="-1"></a> arabic as arabic2,</span> -<span id="cb443-10"><a href="#cb443-10" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb443-11"><a href="#cb443-11" aria-hidden="true" tabindex="-1"></a> jdoe/yetanotherlongpackagename,</span> -<span id="cb443-12"><a href="#cb443-12" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb443-13"><a href="#cb443-13" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> <h2 data-number="2.3" id="markdown-tokens"><span class="header-section-number">2.3</span> Markdown Tokens</h2> <p>A key feature of the Markdown package is the support for manipulating @@ -7536,67 +8414,74 @@ class="tex">T<sub>e</sub>X</span> macros, which render markdown tokens. In this section, I will describe the individual token renderers.</p> <h4 data-number="2.3.1.1" id="attribute-renderers"><span class="header-section-number">2.3.1.1</span> Attribute Renderers</h4> -<p>The following macros are only produced, when the -<strong><code>headerAttributes</code></strong> option is enabled.</p> +<p>The following macros are only produced, when at least one of the +following options for markdown attributes on different elements is +enabled:</p> +<ul> +<li><strong><code>autoIdentifiers</code></strong></li> +<li><strong><code>fencedCodeAttributes</code></strong></li> +<li><strong><code>gfmAutoIdentifiers</code></strong></li> +<li><strong><code>headerAttributes</code></strong></li> +<li><strong><code>inlineCodeAttributes</code></strong></li> +<li><strong><code>linkAttributes</code></strong></li> +</ul> <p><code>\markdownRendererAttributeIdentifier</code> represents the ⟨<em>identifier</em>⟩ of a markdown element (<code>id="</code>⟨<em>identifier</em>⟩<code>"</code> in HTML and -<code>#</code>⟨<em>identifier</em>⟩ in Markdown’s -<strong><code>headerAttributes</code></strong> syntax extension). The -macro receives a single attribute that corresponds to the +<code>#</code>⟨<em>identifier</em>⟩ in markdown attributes). The macro +receives a single attribute that corresponds to the ⟨<em>identifier</em>⟩.</p> <p><code>\markdownRendererAttributeClassName</code> represents the ⟨<em>class name</em>⟩ of a markdown element (<code>class="</code>⟨<em>class name</em>⟩ …<code>"</code> in HTML and -<code>.</code>⟨<em>class name</em>⟩ in Markdown’s -<strong><code>headerAttributes</code></strong> syntax extension). The -macro receives a single attribute that corresponds to the \meta{class -name}.</p> +<code>.</code>⟨<em>class name</em>⟩ in markdown attributes). The macro +receives a single attribute that corresponds to the ⟨<em>class +name</em>⟩.</p> <p><code>\markdownRendererAttributeKeyValue</code> represents a HTML attribute in the form ⟨<em>key</em>⟩<code>=</code>⟨<em>value</em>⟩ that is neither an identifier nor a class name. The macro receives two attributes that correspond to the ⟨<em>key</em>⟩ and the ⟨<em>value</em>⟩, respectively.</p> -<h5 class="unnumbered" id="latex-example-54"><span +<h5 class="unnumbered" id="latex-example-56"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb444"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb444-1"><a href="#cb444-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb444-2"><a href="#cb444-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[headerAttributes, underscores=false]{<span class="ex">markdown</span>}</span> -<span id="cb444-3"><a href="#cb444-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb444-4"><a href="#cb444-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb444-5"><a href="#cb444-5" aria-hidden="true" tabindex="-1"></a> attributeIdentifier = {<span class="co">%</span></span> -<span id="cb444-6"><a href="#cb444-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb444-7"><a href="#cb444-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(Identifier: #1)}</span> -<span id="cb444-8"><a href="#cb444-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb444-9"><a href="#cb444-9" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb444-10"><a href="#cb444-10" aria-hidden="true" tabindex="-1"></a> attributeClassName = {<span class="co">%</span></span> -<span id="cb444-11"><a href="#cb444-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb444-12"><a href="#cb444-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(Class name: #1)}</span> -<span id="cb444-13"><a href="#cb444-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb444-14"><a href="#cb444-14" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb444-15"><a href="#cb444-15" aria-hidden="true" tabindex="-1"></a> attributeKeyValue = {<span class="co">%</span></span> -<span id="cb444-16"><a href="#cb444-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb444-17"><a href="#cb444-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(Key: #1, Value: #2)}</span> -<span id="cb444-18"><a href="#cb444-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb444-19"><a href="#cb444-19" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb444-20"><a href="#cb444-20" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb444-21"><a href="#cb444-21" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb444-22"><a href="#cb444-22" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb444-23"><a href="#cb444-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb444-24"><a href="#cb444-24" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb444-25"><a href="#cb444-25" aria-hidden="true" tabindex="-1"></a># First top-level heading {jane=doe}</span> -<span id="cb444-26"><a href="#cb444-26" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb444-27"><a href="#cb444-27" aria-hidden="true" tabindex="-1"></a>## A subheading {#identifier}</span> -<span id="cb444-28"><a href="#cb444-28" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb444-29"><a href="#cb444-29" aria-hidden="true" tabindex="-1"></a># Second top-level heading {.class_name}</span> -<span id="cb444-30"><a href="#cb444-30" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb444-31"><a href="#cb444-31" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb444-32"><a href="#cb444-32" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb483"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb483-1"><a href="#cb483-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb483-2"><a href="#cb483-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[headerAttributes, underscores=false]{<span class="ex">markdown</span>}</span> +<span id="cb483-3"><a href="#cb483-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb483-4"><a href="#cb483-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb483-5"><a href="#cb483-5" aria-hidden="true" tabindex="-1"></a> attributeIdentifier = {<span class="co">%</span></span> +<span id="cb483-6"><a href="#cb483-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb483-7"><a href="#cb483-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(Identifier: #1)}</span> +<span id="cb483-8"><a href="#cb483-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb483-9"><a href="#cb483-9" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb483-10"><a href="#cb483-10" aria-hidden="true" tabindex="-1"></a> attributeClassName = {<span class="co">%</span></span> +<span id="cb483-11"><a href="#cb483-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb483-12"><a href="#cb483-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(Class name: #1)}</span> +<span id="cb483-13"><a href="#cb483-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb483-14"><a href="#cb483-14" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb483-15"><a href="#cb483-15" aria-hidden="true" tabindex="-1"></a> attributeKeyValue = {<span class="co">%</span></span> +<span id="cb483-16"><a href="#cb483-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb483-17"><a href="#cb483-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(Key: #1, Value: #2)}</span> +<span id="cb483-18"><a href="#cb483-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb483-19"><a href="#cb483-19" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb483-20"><a href="#cb483-20" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb483-21"><a href="#cb483-21" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb483-22"><a href="#cb483-22" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb483-23"><a href="#cb483-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb483-24"><a href="#cb483-24" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb483-25"><a href="#cb483-25" aria-hidden="true" tabindex="-1"></a># First top-level heading {jane=doe}</span> +<span id="cb483-26"><a href="#cb483-26" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb483-27"><a href="#cb483-27" aria-hidden="true" tabindex="-1"></a>## A subheading {#identifier}</span> +<span id="cb483-28"><a href="#cb483-28" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb483-29"><a href="#cb483-29" aria-hidden="true" tabindex="-1"></a># Second top-level heading {.class_name}</span> +<span id="cb483-30"><a href="#cb483-30" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb483-31"><a href="#cb483-31" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb483-32"><a href="#cb483-32" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb445"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb445-1"><a href="#cb445-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb484"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb484-1"><a href="#cb484-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -7613,35 +8498,35 @@ class="header-section-number">2.3.1.2</span> Block Quote Renderers</h4> the beginning of a block quote. The macro receives no arguments.</p> <p>The <code>\markdownRendererBlockQuoteEnd</code> macro represents the end of a block quote. The macro receives no arguments.</p> -<h5 class="unnumbered" id="plain-tex-example-22">Plain <span +<h5 class="unnumbered" id="plain-tex-example-25">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb446"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb446-1"><a href="#cb446-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb446-2"><a href="#cb446-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererBlockQuoteBegin</span>{<span class="co">%</span></span> -<span id="cb446-3"><a href="#cb446-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">\begingroup</span></span> -<span id="cb446-4"><a href="#cb446-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">\vskip\parindent</span></span> -<span id="cb446-5"><a href="#cb446-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">\leftskip</span>=2<span class="fu">\parindent</span></span> -<span id="cb446-6"><a href="#cb446-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\parindent</span>=0pt</span> -<span id="cb446-7"><a href="#cb446-7" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb446-8"><a href="#cb446-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererBlockQuoteEnd</span>{<span class="co">%</span></span> -<span id="cb446-9"><a href="#cb446-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb446-10"><a href="#cb446-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\vskip\parindent</span></span> -<span id="cb446-11"><a href="#cb446-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\endgroup</span></span> -<span id="cb446-12"><a href="#cb446-12" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb446-13"><a href="#cb446-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb446-14"><a href="#cb446-14" aria-hidden="true" tabindex="-1"></a>A quote from William Shakespeare's King Lear:</span> -<span id="cb446-15"><a href="#cb446-15" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb446-16"><a href="#cb446-16" aria-hidden="true" tabindex="-1"></a>> This is the excellent foppery of the world that when we are</span> -<span id="cb446-17"><a href="#cb446-17" aria-hidden="true" tabindex="-1"></a>> sick in fortune---often the surfeit of our own behavior---we</span> -<span id="cb446-18"><a href="#cb446-18" aria-hidden="true" tabindex="-1"></a>> make guilty of our disasters the sun, the moon, and the</span> -<span id="cb446-19"><a href="#cb446-19" aria-hidden="true" tabindex="-1"></a>> stars [...]</span> -<span id="cb446-20"><a href="#cb446-20" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb446-21"><a href="#cb446-21" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb485"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb485-1"><a href="#cb485-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb485-2"><a href="#cb485-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererBlockQuoteBegin</span>{<span class="co">%</span></span> +<span id="cb485-3"><a href="#cb485-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">\begingroup</span></span> +<span id="cb485-4"><a href="#cb485-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">\vskip\parindent</span></span> +<span id="cb485-5"><a href="#cb485-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">\leftskip</span>=2<span class="fu">\parindent</span></span> +<span id="cb485-6"><a href="#cb485-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\parindent</span>=0pt</span> +<span id="cb485-7"><a href="#cb485-7" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb485-8"><a href="#cb485-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererBlockQuoteEnd</span>{<span class="co">%</span></span> +<span id="cb485-9"><a href="#cb485-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb485-10"><a href="#cb485-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\vskip\parindent</span></span> +<span id="cb485-11"><a href="#cb485-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\endgroup</span></span> +<span id="cb485-12"><a href="#cb485-12" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb485-13"><a href="#cb485-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb485-14"><a href="#cb485-14" aria-hidden="true" tabindex="-1"></a>A quote from William Shakespeare's King Lear:</span> +<span id="cb485-15"><a href="#cb485-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb485-16"><a href="#cb485-16" aria-hidden="true" tabindex="-1"></a>> This is the excellent foppery of the world that when we are</span> +<span id="cb485-17"><a href="#cb485-17" aria-hidden="true" tabindex="-1"></a>> sick in fortune---often the surfeit of our own behavior---we</span> +<span id="cb485-18"><a href="#cb485-18" aria-hidden="true" tabindex="-1"></a>> make guilty of our disasters the sun, the moon, and the</span> +<span id="cb485-19"><a href="#cb485-19" aria-hidden="true" tabindex="-1"></a>> stars [...]</span> +<span id="cb485-20"><a href="#cb485-20" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb485-21"><a href="#cb485-21" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb447"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb447-1"><a href="#cb447-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb486"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb486-1"><a href="#cb486-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -7652,32 +8537,32 @@ fortune—often the surfeit of our own behavior—we make guilty of our disasters the sun, the moon, and the stars […]</p> </blockquote> </blockquote> -<h5 class="unnumbered" id="latex-example-55"><span +<h5 class="unnumbered" id="latex-example-57"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb448"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb448-1"><a href="#cb448-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb448-2"><a href="#cb448-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb448-3"><a href="#cb448-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb448-4"><a href="#cb448-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb448-5"><a href="#cb448-5" aria-hidden="true" tabindex="-1"></a> blockQuoteBegin = {<span class="kw">\begin</span>{<span class="ex">quote</span>}},</span> -<span id="cb448-6"><a href="#cb448-6" aria-hidden="true" tabindex="-1"></a> blockQuoteEnd = {<span class="kw">\end</span>{<span class="ex">quote</span>}},</span> -<span id="cb448-7"><a href="#cb448-7" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb448-8"><a href="#cb448-8" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb448-9"><a href="#cb448-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb448-10"><a href="#cb448-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb448-11"><a href="#cb448-11" aria-hidden="true" tabindex="-1"></a>A quote from William Shakespeare's King Lear:</span> -<span id="cb448-12"><a href="#cb448-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb448-13"><a href="#cb448-13" aria-hidden="true" tabindex="-1"></a>> This is the excellent foppery of the world that when we are</span> -<span id="cb448-14"><a href="#cb448-14" aria-hidden="true" tabindex="-1"></a>> sick in fortune---often the surfeit of our own behavior---we</span> -<span id="cb448-15"><a href="#cb448-15" aria-hidden="true" tabindex="-1"></a>> make guilty of our disasters the sun, the moon, and the</span> -<span id="cb448-16"><a href="#cb448-16" aria-hidden="true" tabindex="-1"></a>> stars [...]</span> -<span id="cb448-17"><a href="#cb448-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb448-18"><a href="#cb448-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb487"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb487-1"><a href="#cb487-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb487-2"><a href="#cb487-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb487-3"><a href="#cb487-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb487-4"><a href="#cb487-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb487-5"><a href="#cb487-5" aria-hidden="true" tabindex="-1"></a> blockQuoteBegin = {<span class="kw">\begin</span>{<span class="ex">quote</span>}},</span> +<span id="cb487-6"><a href="#cb487-6" aria-hidden="true" tabindex="-1"></a> blockQuoteEnd = {<span class="kw">\end</span>{<span class="ex">quote</span>}},</span> +<span id="cb487-7"><a href="#cb487-7" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb487-8"><a href="#cb487-8" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb487-9"><a href="#cb487-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb487-10"><a href="#cb487-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb487-11"><a href="#cb487-11" aria-hidden="true" tabindex="-1"></a>A quote from William Shakespeare's King Lear:</span> +<span id="cb487-12"><a href="#cb487-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb487-13"><a href="#cb487-13" aria-hidden="true" tabindex="-1"></a>> This is the excellent foppery of the world that when we are</span> +<span id="cb487-14"><a href="#cb487-14" aria-hidden="true" tabindex="-1"></a>> sick in fortune---often the surfeit of our own behavior---we</span> +<span id="cb487-15"><a href="#cb487-15" aria-hidden="true" tabindex="-1"></a>> make guilty of our disasters the sun, the moon, and the</span> +<span id="cb487-16"><a href="#cb487-16" aria-hidden="true" tabindex="-1"></a>> stars [...]</span> +<span id="cb487-17"><a href="#cb487-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb487-18"><a href="#cb487-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb449"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb449-1"><a href="#cb449-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb488"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb488-1"><a href="#cb488-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -7688,27 +8573,27 @@ fortune—often the surfeit of our own behavior—we make guilty of our disasters the sun, the moon, and the stars […]</p> </blockquote> </blockquote> -<h5 class="unnumbered" id="context-example-36">Con<span +<h5 class="unnumbered" id="context-example-38">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb450"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb450-1"><a href="#cb450-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb450-2"><a href="#cb450-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererBlockQuoteBegin</span>{<span class="fu">\startquotation</span>}</span> -<span id="cb450-3"><a href="#cb450-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererBlockQuoteEnd</span>{<span class="fu">\stopquotation</span>}</span> -<span id="cb450-4"><a href="#cb450-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb450-5"><a href="#cb450-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb450-6"><a href="#cb450-6" aria-hidden="true" tabindex="-1"></a>A quote from William Shakespeare's King Lear:</span> -<span id="cb450-7"><a href="#cb450-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb450-8"><a href="#cb450-8" aria-hidden="true" tabindex="-1"></a>> This is the excellent foppery of the world that when we are</span> -<span id="cb450-9"><a href="#cb450-9" aria-hidden="true" tabindex="-1"></a>> sick in fortune---often the surfeit of our own behavior---we</span> -<span id="cb450-10"><a href="#cb450-10" aria-hidden="true" tabindex="-1"></a>> make guilty of our disasters the sun, the moon, and the</span> -<span id="cb450-11"><a href="#cb450-11" aria-hidden="true" tabindex="-1"></a>> stars [...]</span> -<span id="cb450-12"><a href="#cb450-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb450-13"><a href="#cb450-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb489"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb489-1"><a href="#cb489-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb489-2"><a href="#cb489-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererBlockQuoteBegin</span>{<span class="fu">\startquotation</span>}</span> +<span id="cb489-3"><a href="#cb489-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererBlockQuoteEnd</span>{<span class="fu">\stopquotation</span>}</span> +<span id="cb489-4"><a href="#cb489-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb489-5"><a href="#cb489-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb489-6"><a href="#cb489-6" aria-hidden="true" tabindex="-1"></a>A quote from William Shakespeare's King Lear:</span> +<span id="cb489-7"><a href="#cb489-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb489-8"><a href="#cb489-8" aria-hidden="true" tabindex="-1"></a>> This is the excellent foppery of the world that when we are</span> +<span id="cb489-9"><a href="#cb489-9" aria-hidden="true" tabindex="-1"></a>> sick in fortune---often the surfeit of our own behavior---we</span> +<span id="cb489-10"><a href="#cb489-10" aria-hidden="true" tabindex="-1"></a>> make guilty of our disasters the sun, the moon, and the</span> +<span id="cb489-11"><a href="#cb489-11" aria-hidden="true" tabindex="-1"></a>> stars [...]</span> +<span id="cb489-12"><a href="#cb489-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb489-13"><a href="#cb489-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb451"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb451-1"><a href="#cb451-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb490"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb490-1"><a href="#cb490-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -7727,32 +8612,32 @@ Context Renderers</h4> <strong><code>bracketedSpans</code></strong> option is enabled.</p> <p>The <code>\markdownRendererBracketedSpanAttributeContextBegin</code> and <code>\markdownRendererBracketedSpanAttributeContextEnd</code> -macros represent the beginning and the end of an inline bracketed span -in which the attributes of the span apply. The macros receive no +macros represent the beginning and the end of a context in which the +attributes of an inline bracketed span apply. The macros receive no arguments.</p> -<h5 class="unnumbered" id="latex-example-56"><span +<h5 class="unnumbered" id="latex-example-58"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb452"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb452-1"><a href="#cb452-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb452-2"><a href="#cb452-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[bracketedSpans]{<span class="ex">markdown</span>}</span> -<span id="cb452-3"><a href="#cb452-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb452-4"><a href="#cb452-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb452-5"><a href="#cb452-5" aria-hidden="true" tabindex="-1"></a> bracketedSpanAttributeContextBegin = {(},</span> -<span id="cb452-6"><a href="#cb452-6" aria-hidden="true" tabindex="-1"></a> bracketedSpanAttributeContextEnd = {)},</span> -<span id="cb452-7"><a href="#cb452-7" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb452-8"><a href="#cb452-8" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb452-9"><a href="#cb452-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb452-10"><a href="#cb452-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb452-11"><a href="#cb452-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb452-12"><a href="#cb452-12" aria-hidden="true" tabindex="-1"></a>[foo [bar]{#identifier}]{key=value} [baz]{.class_name}</span> -<span id="cb452-13"><a href="#cb452-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb452-14"><a href="#cb452-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb452-15"><a href="#cb452-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb491"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb491-1"><a href="#cb491-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb491-2"><a href="#cb491-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[bracketedSpans]{<span class="ex">markdown</span>}</span> +<span id="cb491-3"><a href="#cb491-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb491-4"><a href="#cb491-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb491-5"><a href="#cb491-5" aria-hidden="true" tabindex="-1"></a> bracketedSpanAttributeContextBegin = {(},</span> +<span id="cb491-6"><a href="#cb491-6" aria-hidden="true" tabindex="-1"></a> bracketedSpanAttributeContextEnd = {)},</span> +<span id="cb491-7"><a href="#cb491-7" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb491-8"><a href="#cb491-8" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb491-9"><a href="#cb491-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb491-10"><a href="#cb491-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb491-11"><a href="#cb491-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb491-12"><a href="#cb491-12" aria-hidden="true" tabindex="-1"></a>[foo [bar]{#identifier}]{key=value} [baz]{.class_name}</span> +<span id="cb491-13"><a href="#cb491-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb491-14"><a href="#cb491-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb491-15"><a href="#cb491-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb453"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb453-1"><a href="#cb453-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb492"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb492-1"><a href="#cb492-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -7781,56 +8666,56 @@ of a bulleted list that contains no item with several paragraphs of text (the list is tight). This macro will only be produced, when the <strong><code>tightLists</code></strong> option is disabled. The macro receives no arguments.</p> -<h5 class="unnumbered" id="plain-tex-example-23">Plain <span +<h5 class="unnumbered" id="plain-tex-example-26">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb454"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb454-1"><a href="#cb454-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb454-2"><a href="#cb454-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTightLists</span>{true}</span> -<span id="cb454-3"><a href="#cb454-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb454-4"><a href="#cb454-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{}</span> -<span id="cb454-5"><a href="#cb454-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlBeginTight</span>{ (}</span> -<span id="cb454-6"><a href="#cb454-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItem</span>{<span class="co">%</span></span> -<span id="cb454-7"><a href="#cb454-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererUlItem</span>{<span class="co">%</span></span> -<span id="cb454-8"><a href="#cb454-8" aria-hidden="true" tabindex="-1"></a> ,</span> -<span id="cb454-9"><a href="#cb454-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererUlItem</span>{, and }<span class="co">%</span></span> -<span id="cb454-10"><a href="#cb454-10" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb454-11"><a href="#cb454-11" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb454-12"><a href="#cb454-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItemEnd</span>{}</span> -<span id="cb454-13"><a href="#cb454-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlEndTight</span>{).}</span> -<span id="cb454-14"><a href="#cb454-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb454-15"><a href="#cb454-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb454-16"><a href="#cb454-16" aria-hidden="true" tabindex="-1"></a>This is a tight list</span> -<span id="cb454-17"><a href="#cb454-17" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb454-18"><a href="#cb454-18" aria-hidden="true" tabindex="-1"></a>- the first item</span> -<span id="cb454-19"><a href="#cb454-19" aria-hidden="true" tabindex="-1"></a>- the second item</span> -<span id="cb454-20"><a href="#cb454-20" aria-hidden="true" tabindex="-1"></a>- the third item</span> -<span id="cb454-21"><a href="#cb454-21" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb454-22"><a href="#cb454-22" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb454-23"><a href="#cb454-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> -<span id="cb454-24"><a href="#cb454-24" aria-hidden="true" tabindex="-1"></a> :<span class="fu">\par</span></span> -<span id="cb454-25"><a href="#cb454-25" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> -<span id="cb454-26"><a href="#cb454-26" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb454-27"><a href="#cb454-27" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlBegin</span>{}</span> -<span id="cb454-28"><a href="#cb454-28" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItem</span>{--<span class="fu">\kern</span> 0.5em}</span> -<span id="cb454-29"><a href="#cb454-29" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItemEnd</span>{.<span class="fu">\par</span>}</span> -<span id="cb454-30"><a href="#cb454-30" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlEnd</span>{}</span> -<span id="cb454-31"><a href="#cb454-31" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb454-32"><a href="#cb454-32" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb454-33"><a href="#cb454-33" aria-hidden="true" tabindex="-1"></a>This is a loose list</span> -<span id="cb454-34"><a href="#cb454-34" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb454-35"><a href="#cb454-35" aria-hidden="true" tabindex="-1"></a>- This is the first item</span> -<span id="cb454-36"><a href="#cb454-36" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb454-37"><a href="#cb454-37" aria-hidden="true" tabindex="-1"></a>- This is the second item</span> -<span id="cb454-38"><a href="#cb454-38" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb454-39"><a href="#cb454-39" aria-hidden="true" tabindex="-1"></a>- This is the third item</span> -<span id="cb454-40"><a href="#cb454-40" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb454-41"><a href="#cb454-41" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb454-42"><a href="#cb454-42" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb493"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb493-1"><a href="#cb493-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb493-2"><a href="#cb493-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTightLists</span>{true}</span> +<span id="cb493-3"><a href="#cb493-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb493-4"><a href="#cb493-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{}</span> +<span id="cb493-5"><a href="#cb493-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlBeginTight</span>{ (}</span> +<span id="cb493-6"><a href="#cb493-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItem</span>{<span class="co">%</span></span> +<span id="cb493-7"><a href="#cb493-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererUlItem</span>{<span class="co">%</span></span> +<span id="cb493-8"><a href="#cb493-8" aria-hidden="true" tabindex="-1"></a> ,</span> +<span id="cb493-9"><a href="#cb493-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererUlItem</span>{, and }<span class="co">%</span></span> +<span id="cb493-10"><a href="#cb493-10" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb493-11"><a href="#cb493-11" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb493-12"><a href="#cb493-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItemEnd</span>{}</span> +<span id="cb493-13"><a href="#cb493-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlEndTight</span>{).}</span> +<span id="cb493-14"><a href="#cb493-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb493-15"><a href="#cb493-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb493-16"><a href="#cb493-16" aria-hidden="true" tabindex="-1"></a>This is a tight list</span> +<span id="cb493-17"><a href="#cb493-17" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb493-18"><a href="#cb493-18" aria-hidden="true" tabindex="-1"></a>- the first item</span> +<span id="cb493-19"><a href="#cb493-19" aria-hidden="true" tabindex="-1"></a>- the second item</span> +<span id="cb493-20"><a href="#cb493-20" aria-hidden="true" tabindex="-1"></a>- the third item</span> +<span id="cb493-21"><a href="#cb493-21" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb493-22"><a href="#cb493-22" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb493-23"><a href="#cb493-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> +<span id="cb493-24"><a href="#cb493-24" aria-hidden="true" tabindex="-1"></a> :<span class="fu">\par</span></span> +<span id="cb493-25"><a href="#cb493-25" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> +<span id="cb493-26"><a href="#cb493-26" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb493-27"><a href="#cb493-27" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlBegin</span>{}</span> +<span id="cb493-28"><a href="#cb493-28" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItem</span>{--<span class="fu">\kern</span> 0.5em}</span> +<span id="cb493-29"><a href="#cb493-29" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItemEnd</span>{.<span class="fu">\par</span>}</span> +<span id="cb493-30"><a href="#cb493-30" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlEnd</span>{}</span> +<span id="cb493-31"><a href="#cb493-31" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb493-32"><a href="#cb493-32" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb493-33"><a href="#cb493-33" aria-hidden="true" tabindex="-1"></a>This is a loose list</span> +<span id="cb493-34"><a href="#cb493-34" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb493-35"><a href="#cb493-35" aria-hidden="true" tabindex="-1"></a>- This is the first item</span> +<span id="cb493-36"><a href="#cb493-36" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb493-37"><a href="#cb493-37" aria-hidden="true" tabindex="-1"></a>- This is the second item</span> +<span id="cb493-38"><a href="#cb493-38" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb493-39"><a href="#cb493-39" aria-hidden="true" tabindex="-1"></a>- This is the third item</span> +<span id="cb493-40"><a href="#cb493-40" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb493-41"><a href="#cb493-41" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb493-42"><a href="#cb493-42" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb455"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb455-1"><a href="#cb455-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb494"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb494-1"><a href="#cb494-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -7843,61 +8728,61 @@ item).</p> <li><p>This is the third item.</p></li> </ul> </blockquote> -<h5 class="unnumbered" id="latex-example-57"><span +<h5 class="unnumbered" id="latex-example-59"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb456"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb456-1"><a href="#cb456-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb456-2"><a href="#cb456-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[tightLists]{<span class="ex">markdown</span>}</span> -<span id="cb456-3"><a href="#cb456-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb456-4"><a href="#cb456-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb456-5"><a href="#cb456-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{</span> -<span id="cb456-6"><a href="#cb456-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb456-7"><a href="#cb456-7" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {},</span> -<span id="cb456-8"><a href="#cb456-8" aria-hidden="true" tabindex="-1"></a> ulBeginTight = { (},</span> -<span id="cb456-9"><a href="#cb456-9" aria-hidden="true" tabindex="-1"></a> ulItem = {<span class="co">%</span></span> -<span id="cb456-10"><a href="#cb456-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererUlItem</span>{<span class="co">%</span></span> -<span id="cb456-11"><a href="#cb456-11" aria-hidden="true" tabindex="-1"></a> ,</span> -<span id="cb456-12"><a href="#cb456-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererUlItem</span>{, and }<span class="co">%</span></span> -<span id="cb456-13"><a href="#cb456-13" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb456-14"><a href="#cb456-14" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb456-15"><a href="#cb456-15" aria-hidden="true" tabindex="-1"></a> ulItemEnd = {},</span> -<span id="cb456-16"><a href="#cb456-16" aria-hidden="true" tabindex="-1"></a> ulEndTight = {).},</span> -<span id="cb456-17"><a href="#cb456-17" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb456-18"><a href="#cb456-18" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb456-19"><a href="#cb456-19" aria-hidden="true" tabindex="-1"></a>This is a tight list</span> -<span id="cb456-20"><a href="#cb456-20" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb456-21"><a href="#cb456-21" aria-hidden="true" tabindex="-1"></a>- the first item</span> -<span id="cb456-22"><a href="#cb456-22" aria-hidden="true" tabindex="-1"></a>- the second item</span> -<span id="cb456-23"><a href="#cb456-23" aria-hidden="true" tabindex="-1"></a>- the third item</span> -<span id="cb456-24"><a href="#cb456-24" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb456-25"><a href="#cb456-25" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb456-26"><a href="#cb456-26" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{</span> -<span id="cb456-27"><a href="#cb456-27" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb456-28"><a href="#cb456-28" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {<span class="co">%</span></span> -<span id="cb456-29"><a href="#cb456-29" aria-hidden="true" tabindex="-1"></a> :<span class="fu">\par</span></span> -<span id="cb456-30"><a href="#cb456-30" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> -<span id="cb456-31"><a href="#cb456-31" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb456-32"><a href="#cb456-32" aria-hidden="true" tabindex="-1"></a> ulBeginTight = {<span class="kw">\begin</span>{<span class="ex">itemize</span>}},</span> -<span id="cb456-33"><a href="#cb456-33" aria-hidden="true" tabindex="-1"></a> ulItem = {<span class="fu">\item</span>},</span> -<span id="cb456-34"><a href="#cb456-34" aria-hidden="true" tabindex="-1"></a> ulItemEnd = {.},</span> -<span id="cb456-35"><a href="#cb456-35" aria-hidden="true" tabindex="-1"></a> ulEnd = {<span class="kw">\end</span>{<span class="ex">itemize</span>}},</span> -<span id="cb456-36"><a href="#cb456-36" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb456-37"><a href="#cb456-37" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb456-38"><a href="#cb456-38" aria-hidden="true" tabindex="-1"></a>This is a loose list</span> -<span id="cb456-39"><a href="#cb456-39" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb456-40"><a href="#cb456-40" aria-hidden="true" tabindex="-1"></a>- This is the first item</span> -<span id="cb456-41"><a href="#cb456-41" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb456-42"><a href="#cb456-42" aria-hidden="true" tabindex="-1"></a>- This is the second item</span> -<span id="cb456-43"><a href="#cb456-43" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb456-44"><a href="#cb456-44" aria-hidden="true" tabindex="-1"></a>- This is the third item</span> -<span id="cb456-45"><a href="#cb456-45" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb456-46"><a href="#cb456-46" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb456-47"><a href="#cb456-47" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb495"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb495-1"><a href="#cb495-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb495-2"><a href="#cb495-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[tightLists]{<span class="ex">markdown</span>}</span> +<span id="cb495-3"><a href="#cb495-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb495-4"><a href="#cb495-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb495-5"><a href="#cb495-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[</span> +<span id="cb495-6"><a href="#cb495-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb495-7"><a href="#cb495-7" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {},</span> +<span id="cb495-8"><a href="#cb495-8" aria-hidden="true" tabindex="-1"></a> ulBeginTight = { (},</span> +<span id="cb495-9"><a href="#cb495-9" aria-hidden="true" tabindex="-1"></a> ulItem = {<span class="co">%</span></span> +<span id="cb495-10"><a href="#cb495-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererUlItem</span>{<span class="co">%</span></span> +<span id="cb495-11"><a href="#cb495-11" aria-hidden="true" tabindex="-1"></a> ,</span> +<span id="cb495-12"><a href="#cb495-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererUlItem</span>{, and }<span class="co">%</span></span> +<span id="cb495-13"><a href="#cb495-13" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb495-14"><a href="#cb495-14" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb495-15"><a href="#cb495-15" aria-hidden="true" tabindex="-1"></a> ulItemEnd = {},</span> +<span id="cb495-16"><a href="#cb495-16" aria-hidden="true" tabindex="-1"></a> ulEndTight = {).},</span> +<span id="cb495-17"><a href="#cb495-17" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb495-18"><a href="#cb495-18" aria-hidden="true" tabindex="-1"></a>]</span> +<span id="cb495-19"><a href="#cb495-19" aria-hidden="true" tabindex="-1"></a>This is a tight list</span> +<span id="cb495-20"><a href="#cb495-20" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb495-21"><a href="#cb495-21" aria-hidden="true" tabindex="-1"></a>- the first item</span> +<span id="cb495-22"><a href="#cb495-22" aria-hidden="true" tabindex="-1"></a>- the second item</span> +<span id="cb495-23"><a href="#cb495-23" aria-hidden="true" tabindex="-1"></a>- the third item</span> +<span id="cb495-24"><a href="#cb495-24" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb495-25"><a href="#cb495-25" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb495-26"><a href="#cb495-26" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[</span> +<span id="cb495-27"><a href="#cb495-27" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb495-28"><a href="#cb495-28" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {<span class="co">%</span></span> +<span id="cb495-29"><a href="#cb495-29" aria-hidden="true" tabindex="-1"></a> :<span class="fu">\par</span></span> +<span id="cb495-30"><a href="#cb495-30" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> +<span id="cb495-31"><a href="#cb495-31" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb495-32"><a href="#cb495-32" aria-hidden="true" tabindex="-1"></a> ulBeginTight = {<span class="kw">\begin</span>{<span class="ex">itemize</span>}},</span> +<span id="cb495-33"><a href="#cb495-33" aria-hidden="true" tabindex="-1"></a> ulItem = {<span class="fu">\item</span>},</span> +<span id="cb495-34"><a href="#cb495-34" aria-hidden="true" tabindex="-1"></a> ulItemEnd = {.},</span> +<span id="cb495-35"><a href="#cb495-35" aria-hidden="true" tabindex="-1"></a> ulEnd = {<span class="kw">\end</span>{<span class="ex">itemize</span>}},</span> +<span id="cb495-36"><a href="#cb495-36" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb495-37"><a href="#cb495-37" aria-hidden="true" tabindex="-1"></a>]</span> +<span id="cb495-38"><a href="#cb495-38" aria-hidden="true" tabindex="-1"></a>This is a loose list</span> +<span id="cb495-39"><a href="#cb495-39" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb495-40"><a href="#cb495-40" aria-hidden="true" tabindex="-1"></a>- This is the first item</span> +<span id="cb495-41"><a href="#cb495-41" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb495-42"><a href="#cb495-42" aria-hidden="true" tabindex="-1"></a>- This is the second item</span> +<span id="cb495-43"><a href="#cb495-43" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb495-44"><a href="#cb495-44" aria-hidden="true" tabindex="-1"></a>- This is the third item</span> +<span id="cb495-45"><a href="#cb495-45" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb495-46"><a href="#cb495-46" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb495-47"><a href="#cb495-47" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb457"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb457-1"><a href="#cb457-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb496"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb496-1"><a href="#cb496-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -7910,57 +8795,57 @@ item).</p> <li><p>This is the third item.</p></li> </ul> </blockquote> -<h5 class="unnumbered" id="context-example-37">Con<span +<h5 class="unnumbered" id="context-example-39">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb458"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb458-1"><a href="#cb458-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb458-2"><a href="#cb458-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[tightLists = yes]</span> -<span id="cb458-3"><a href="#cb458-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb458-4"><a href="#cb458-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb458-5"><a href="#cb458-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{}</span> -<span id="cb458-6"><a href="#cb458-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlBeginTight</span>{ (}</span> -<span id="cb458-7"><a href="#cb458-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItem</span>{<span class="co">%</span></span> -<span id="cb458-8"><a href="#cb458-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererUlItem</span>{<span class="co">%</span></span> -<span id="cb458-9"><a href="#cb458-9" aria-hidden="true" tabindex="-1"></a> ,</span> -<span id="cb458-10"><a href="#cb458-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererUlItem</span>{, and }<span class="co">%</span></span> -<span id="cb458-11"><a href="#cb458-11" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb458-12"><a href="#cb458-12" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb458-13"><a href="#cb458-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItemEnd</span>{}</span> -<span id="cb458-14"><a href="#cb458-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlEndTight</span>{).}</span> -<span id="cb458-15"><a href="#cb458-15" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb458-16"><a href="#cb458-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb458-17"><a href="#cb458-17" aria-hidden="true" tabindex="-1"></a>This is a tight list</span> -<span id="cb458-18"><a href="#cb458-18" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb458-19"><a href="#cb458-19" aria-hidden="true" tabindex="-1"></a>- the first item</span> -<span id="cb458-20"><a href="#cb458-20" aria-hidden="true" tabindex="-1"></a>- the second item</span> -<span id="cb458-21"><a href="#cb458-21" aria-hidden="true" tabindex="-1"></a>- the third item</span> -<span id="cb458-22"><a href="#cb458-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb458-23"><a href="#cb458-23" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb458-24"><a href="#cb458-24" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> -<span id="cb458-25"><a href="#cb458-25" aria-hidden="true" tabindex="-1"></a> :<span class="fu">\par</span></span> -<span id="cb458-26"><a href="#cb458-26" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> -<span id="cb458-27"><a href="#cb458-27" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb458-28"><a href="#cb458-28" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlBegin</span>{<span class="fu">\startitemize</span>}</span> -<span id="cb458-29"><a href="#cb458-29" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItem</span>{<span class="fu">\item</span>}</span> -<span id="cb458-30"><a href="#cb458-30" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItemEnd</span>{.}</span> -<span id="cb458-31"><a href="#cb458-31" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlEnd</span>{<span class="fu">\stopitemize</span>}</span> -<span id="cb458-32"><a href="#cb458-32" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb458-33"><a href="#cb458-33" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb458-34"><a href="#cb458-34" aria-hidden="true" tabindex="-1"></a>This is a loose list</span> -<span id="cb458-35"><a href="#cb458-35" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb458-36"><a href="#cb458-36" aria-hidden="true" tabindex="-1"></a>- This is the first item</span> -<span id="cb458-37"><a href="#cb458-37" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb458-38"><a href="#cb458-38" aria-hidden="true" tabindex="-1"></a>- This is the second item</span> -<span id="cb458-39"><a href="#cb458-39" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb458-40"><a href="#cb458-40" aria-hidden="true" tabindex="-1"></a>- This is the third item</span> -<span id="cb458-41"><a href="#cb458-41" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb458-42"><a href="#cb458-42" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb458-43"><a href="#cb458-43" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb497"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb497-1"><a href="#cb497-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb497-2"><a href="#cb497-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[tightLists = yes]</span> +<span id="cb497-3"><a href="#cb497-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb497-4"><a href="#cb497-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb497-5"><a href="#cb497-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{}</span> +<span id="cb497-6"><a href="#cb497-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlBeginTight</span>{ (}</span> +<span id="cb497-7"><a href="#cb497-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItem</span>{<span class="co">%</span></span> +<span id="cb497-8"><a href="#cb497-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererUlItem</span>{<span class="co">%</span></span> +<span id="cb497-9"><a href="#cb497-9" aria-hidden="true" tabindex="-1"></a> ,</span> +<span id="cb497-10"><a href="#cb497-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererUlItem</span>{, and }<span class="co">%</span></span> +<span id="cb497-11"><a href="#cb497-11" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb497-12"><a href="#cb497-12" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb497-13"><a href="#cb497-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItemEnd</span>{}</span> +<span id="cb497-14"><a href="#cb497-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlEndTight</span>{).}</span> +<span id="cb497-15"><a href="#cb497-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb497-16"><a href="#cb497-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb497-17"><a href="#cb497-17" aria-hidden="true" tabindex="-1"></a>This is a tight list</span> +<span id="cb497-18"><a href="#cb497-18" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb497-19"><a href="#cb497-19" aria-hidden="true" tabindex="-1"></a>- the first item</span> +<span id="cb497-20"><a href="#cb497-20" aria-hidden="true" tabindex="-1"></a>- the second item</span> +<span id="cb497-21"><a href="#cb497-21" aria-hidden="true" tabindex="-1"></a>- the third item</span> +<span id="cb497-22"><a href="#cb497-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb497-23"><a href="#cb497-23" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb497-24"><a href="#cb497-24" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> +<span id="cb497-25"><a href="#cb497-25" aria-hidden="true" tabindex="-1"></a> :<span class="fu">\par</span></span> +<span id="cb497-26"><a href="#cb497-26" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> +<span id="cb497-27"><a href="#cb497-27" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb497-28"><a href="#cb497-28" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlBegin</span>{<span class="fu">\startitemize</span>}</span> +<span id="cb497-29"><a href="#cb497-29" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItem</span>{<span class="fu">\item</span>}</span> +<span id="cb497-30"><a href="#cb497-30" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlItemEnd</span>{.}</span> +<span id="cb497-31"><a href="#cb497-31" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUlEnd</span>{<span class="fu">\stopitemize</span>}</span> +<span id="cb497-32"><a href="#cb497-32" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb497-33"><a href="#cb497-33" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb497-34"><a href="#cb497-34" aria-hidden="true" tabindex="-1"></a>This is a loose list</span> +<span id="cb497-35"><a href="#cb497-35" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb497-36"><a href="#cb497-36" aria-hidden="true" tabindex="-1"></a>- This is the first item</span> +<span id="cb497-37"><a href="#cb497-37" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb497-38"><a href="#cb497-38" aria-hidden="true" tabindex="-1"></a>- This is the second item</span> +<span id="cb497-39"><a href="#cb497-39" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb497-40"><a href="#cb497-40" aria-hidden="true" tabindex="-1"></a>- This is the third item</span> +<span id="cb497-41"><a href="#cb497-41" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb497-42"><a href="#cb497-42" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb497-43"><a href="#cb497-43" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb459"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb459-1"><a href="#cb459-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb498"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb498-1"><a href="#cb498-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -7973,124 +8858,252 @@ item).</p> <li><p>This is the third item.</p></li> </ul> </blockquote> -<h4 data-number="2.3.1.5" id="code-block-renderers"><span -class="header-section-number">2.3.1.5</span> Code Block Renderers</h4> +<h4 data-number="2.3.1.5" id="citation-renderers"><span +class="header-section-number">2.3.1.5</span> Citation Renderers</h4> +<p>The <code>\markdownRendererCite</code> macro represents a string of +one or more parenthetical citations. This macro will only be produced, +when the <strong><code>citations</code></strong> option is enabled. The +macro receives the parameter <code>{</code>⟨<em>number of +citations</em>⟩<code>}</code> followed by ⟨<em>suppress author</em>⟩ +<code>{</code>⟨<em>prenote</em>⟩<code>}{</code>⟨<em>postnote</em>⟩<code>}{</code>⟨<em>name</em>⟩<code>}</code> +repeated ⟨<em>number of citations</em>⟩ times. The ⟨<em>suppress +author</em>⟩ parameter is either the token <code>-</code>, when the +author’s name is to be suppressed, or <code>+</code> otherwise.</p> +<h5 class="unnumbered" id="latex-example-60"><span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb499"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb499-1"><a href="#cb499-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb499-2"><a href="#cb499-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[citations]{<span class="ex">markdown</span>}</span> +<span id="cb499-3"><a href="#cb499-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\newcount\citationsCounter</span></span> +<span id="cb499-4"><a href="#cb499-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\newcount\citationsTotal</span></span> +<span id="cb499-5"><a href="#cb499-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\makeatletter</span></span> +<span id="cb499-6"><a href="#cb499-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\citations</span>#1#2#3#4{<span class="co">%</span></span> +<span id="cb499-7"><a href="#cb499-7" aria-hidden="true" tabindex="-1"></a> a parenthesized citation <span class="fu">\emph</span>{#4}</span> +<span id="cb499-8"><a href="#cb499-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\advance\citationsCounter</span> by 1<span class="fu">\relax</span></span> +<span id="cb499-9"><a href="#cb499-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifx\relax</span>#2<span class="fu">\relax</span></span> +<span id="cb499-10"><a href="#cb499-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifx\relax</span>#3<span class="fu">\relax\else</span></span> +<span id="cb499-11"><a href="#cb499-11" aria-hidden="true" tabindex="-1"></a> with a postfix <span class="fu">\emph</span>{#3}<span class="co">%</span></span> +<span id="cb499-12"><a href="#cb499-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb499-13"><a href="#cb499-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb499-14"><a href="#cb499-14" aria-hidden="true" tabindex="-1"></a> with a prefix <span class="fu">\emph</span>{#2}<span class="co">%</span></span> +<span id="cb499-15"><a href="#cb499-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifx\relax</span>#3<span class="fu">\relax\else</span></span> +<span id="cb499-16"><a href="#cb499-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ </span>and a postfix <span class="fu">\emph</span>{#3}<span class="co">%</span></span> +<span id="cb499-17"><a href="#cb499-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb499-18"><a href="#cb499-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb499-19"><a href="#cb499-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\citationsCounter</span>><span class="fu">\citationsTotal\relax</span></span> +<span id="cb499-20"><a href="#cb499-20" aria-hidden="true" tabindex="-1"></a> .<span class="co">%</span></span> +<span id="cb499-21"><a href="#cb499-21" aria-hidden="true" tabindex="-1"></a> <span class="fu">\expandafter\@gobble</span></span> +<span id="cb499-22"><a href="#cb499-22" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb499-23"><a href="#cb499-23" aria-hidden="true" tabindex="-1"></a> , and</span> +<span id="cb499-24"><a href="#cb499-24" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi\citations</span>}</span> +<span id="cb499-25"><a href="#cb499-25" aria-hidden="true" tabindex="-1"></a><span class="fu">\makeatother</span></span> +<span id="cb499-26"><a href="#cb499-26" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb499-27"><a href="#cb499-27" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb499-28"><a href="#cb499-28" aria-hidden="true" tabindex="-1"></a> cite = {<span class="co">%</span></span> +<span id="cb499-29"><a href="#cb499-29" aria-hidden="true" tabindex="-1"></a> <span class="fu">\citationsCounter</span>=1<span class="co">%</span></span> +<span id="cb499-30"><a href="#cb499-30" aria-hidden="true" tabindex="-1"></a> <span class="fu">\citationsTotal</span>=#1<span class="co">%</span></span> +<span id="cb499-31"><a href="#cb499-31" aria-hidden="true" tabindex="-1"></a> This is</span> +<span id="cb499-32"><a href="#cb499-32" aria-hidden="true" tabindex="-1"></a> <span class="fu">\expandafter\citations</span></span> +<span id="cb499-33"><a href="#cb499-33" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb499-34"><a href="#cb499-34" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb499-35"><a href="#cb499-35" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb499-36"><a href="#cb499-36" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb499-37"><a href="#cb499-37" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb499-38"><a href="#cb499-38" aria-hidden="true" tabindex="-1"></a>[see @abrahams90, pp. 12; @eijkhout91, pp. 34]</span> +<span id="cb499-39"><a href="#cb499-39" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb499-40"><a href="#cb499-40" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb500"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb500-1"><a href="#cb500-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>This is a parenthesized citation <em>abrahams90</em> with a prefix +see and a postfix <em>pp. 12</em>, and a citation <em>eijkhout91</em> +with a postfix <em>pp. 34</em>.</p> +</blockquote> +<p>The <code>\markdownRendererTextCite</code> macro represents a string +of one or more text citations. This macro will only be produced, when +the <strong><code>citations</code></strong> option is enabled. The macro +receives parameters in the same format as the +<code>\markdownRendererCite</code> macro.</p> +<h5 class="unnumbered" id="latex-example-61"><span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb501"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb501-1"><a href="#cb501-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb501-2"><a href="#cb501-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[citations]{<span class="ex">markdown</span>}</span> +<span id="cb501-3"><a href="#cb501-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\newcount\citationsCounter</span></span> +<span id="cb501-4"><a href="#cb501-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\newcount\citationsTotal</span></span> +<span id="cb501-5"><a href="#cb501-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\makeatletter</span></span> +<span id="cb501-6"><a href="#cb501-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\citations</span>#1#2#3#4{<span class="co">%</span></span> +<span id="cb501-7"><a href="#cb501-7" aria-hidden="true" tabindex="-1"></a> a text citation <span class="fu">\emph</span>{#4}</span> +<span id="cb501-8"><a href="#cb501-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\advance\citationsCounter</span> by 1<span class="fu">\relax</span></span> +<span id="cb501-9"><a href="#cb501-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifx\relax</span>#2<span class="fu">\relax</span></span> +<span id="cb501-10"><a href="#cb501-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifx\relax</span>#3<span class="fu">\relax\else</span></span> +<span id="cb501-11"><a href="#cb501-11" aria-hidden="true" tabindex="-1"></a> with a postfix <span class="fu">\emph</span>{#3}<span class="co">%</span></span> +<span id="cb501-12"><a href="#cb501-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb501-13"><a href="#cb501-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb501-14"><a href="#cb501-14" aria-hidden="true" tabindex="-1"></a> with a prefix <span class="fu">\emph</span>{#2}<span class="co">%</span></span> +<span id="cb501-15"><a href="#cb501-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifx\relax</span>#3<span class="fu">\relax\else</span></span> +<span id="cb501-16"><a href="#cb501-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ </span>and a postfix <span class="fu">\emph</span>{#3}<span class="co">%</span></span> +<span id="cb501-17"><a href="#cb501-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb501-18"><a href="#cb501-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb501-19"><a href="#cb501-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\citationsCounter</span>><span class="fu">\citationsTotal\relax</span></span> +<span id="cb501-20"><a href="#cb501-20" aria-hidden="true" tabindex="-1"></a> .<span class="co">%</span></span> +<span id="cb501-21"><a href="#cb501-21" aria-hidden="true" tabindex="-1"></a> <span class="fu">\expandafter\@gobble</span></span> +<span id="cb501-22"><a href="#cb501-22" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb501-23"><a href="#cb501-23" aria-hidden="true" tabindex="-1"></a> , and</span> +<span id="cb501-24"><a href="#cb501-24" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi\citations</span>}</span> +<span id="cb501-25"><a href="#cb501-25" aria-hidden="true" tabindex="-1"></a><span class="fu">\makeatother</span></span> +<span id="cb501-26"><a href="#cb501-26" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb501-27"><a href="#cb501-27" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb501-28"><a href="#cb501-28" aria-hidden="true" tabindex="-1"></a> textCite = {<span class="co">%</span></span> +<span id="cb501-29"><a href="#cb501-29" aria-hidden="true" tabindex="-1"></a> <span class="fu">\citationsCounter</span>=1<span class="co">%</span></span> +<span id="cb501-30"><a href="#cb501-30" aria-hidden="true" tabindex="-1"></a> <span class="fu">\citationsTotal</span>=#1<span class="co">%</span></span> +<span id="cb501-31"><a href="#cb501-31" aria-hidden="true" tabindex="-1"></a> This is</span> +<span id="cb501-32"><a href="#cb501-32" aria-hidden="true" tabindex="-1"></a> <span class="fu">\expandafter\citations</span></span> +<span id="cb501-33"><a href="#cb501-33" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb501-34"><a href="#cb501-34" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb501-35"><a href="#cb501-35" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb501-36"><a href="#cb501-36" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb501-37"><a href="#cb501-37" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb501-38"><a href="#cb501-38" aria-hidden="true" tabindex="-1"></a>@abrahams90 [pp. 12; also @eijkhout91]</span> +<span id="cb501-39"><a href="#cb501-39" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb501-40"><a href="#cb501-40" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb502"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb502-1"><a href="#cb502-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>This is a text citation <em>abrahams90</em> with a postfix +<em>pp. 12</em>, and a citation <em>eijkhout91</em> with a prefix +<em>also</em>.</p> +</blockquote> +<h4 data-number="2.3.1.6" id="code-block-renderers"><span +class="header-section-number">2.3.1.6</span> Code Block Renderers</h4> <p>The <code>\markdownRendererInputVerbatim</code> macro represents a code block. The macro receives a single argument that corresponds to the filename of a file contaning the code block contents.</p> <p>The <code>\markdownRendererInputFencedCode</code> macro represents a fenced code block. This macro will only be produced, when the <strong><code>fencedCode</code></strong> option is enabled. The macro -receives two arguments that correspond to the filename of a file -contaning the code block contents and to the code fence infostring.</p> -<h5 class="unnumbered" id="latex-example-58"><span +receives three arguments that correspond to the filename of a file +contaning the code block contents, the fully escaped code fence +infostring that can be directly typeset, and the raw code fence +infostring that can be used outside typesetting.</p> +<h5 class="unnumbered" id="latex-example-62"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb460"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb460-1"><a href="#cb460-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb460-2"><a href="#cb460-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">verbatim</span>}</span> -<span id="cb460-3"><a href="#cb460-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[hyphens]{<span class="ex">url</span>}</span> -<span id="cb460-4"><a href="#cb460-4" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedCode]{<span class="ex">markdown</span>}</span> -<span id="cb460-5"><a href="#cb460-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb460-6"><a href="#cb460-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb460-7"><a href="#cb460-7" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {</span> -<span id="cb460-8"><a href="#cb460-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> -<span id="cb460-9"><a href="#cb460-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb460-10"><a href="#cb460-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> -<span id="cb460-11"><a href="#cb460-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> -<span id="cb460-12"><a href="#cb460-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb460-13"><a href="#cb460-13" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb460-14"><a href="#cb460-14" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb460-15"><a href="#cb460-15" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb460-16"><a href="#cb460-16" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb460-17"><a href="#cb460-17" aria-hidden="true" tabindex="-1"></a> inputVerbatim = {</span> -<span id="cb460-18"><a href="#cb460-18" aria-hidden="true" tabindex="-1"></a> is contained in file <span class="fu">\url</span>{#1}:<span class="co">%</span></span> -<span id="cb460-19"><a href="#cb460-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\verbatiminput</span>{#1}<span class="co">%</span></span> -<span id="cb460-20"><a href="#cb460-20" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb460-21"><a href="#cb460-21" aria-hidden="true" tabindex="-1"></a> inputFencedCode = {</span> -<span id="cb460-22"><a href="#cb460-22" aria-hidden="true" tabindex="-1"></a> in #2 <span class="fu">\markdownRendererInputVerbatim</span>{#1}<span class="co">%</span></span> -<span id="cb460-23"><a href="#cb460-23" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb460-24"><a href="#cb460-24" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb460-25"><a href="#cb460-25" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb460-26"><a href="#cb460-26" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb460-27"><a href="#cb460-27" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb460-28"><a href="#cb460-28" aria-hidden="true" tabindex="-1"></a>The following code</span> -<span id="cb460-29"><a href="#cb460-29" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb460-30"><a href="#cb460-30" aria-hidden="true" tabindex="-1"></a> def foo(bar):</span> -<span id="cb460-31"><a href="#cb460-31" aria-hidden="true" tabindex="-1"></a> if len(bar) <= 1:</span> -<span id="cb460-32"><a href="#cb460-32" aria-hidden="true" tabindex="-1"></a> return bar[0]</span> -<span id="cb460-33"><a href="#cb460-33" aria-hidden="true" tabindex="-1"></a> elif len(bar) == 2:</span> -<span id="cb460-34"><a href="#cb460-34" aria-hidden="true" tabindex="-1"></a> return sorted(bar)</span> -<span id="cb460-35"><a href="#cb460-35" aria-hidden="true" tabindex="-1"></a> else:</span> -<span id="cb460-36"><a href="#cb460-36" aria-hidden="true" tabindex="-1"></a> baz = len(bar) // 2</span> -<span id="cb460-37"><a href="#cb460-37" aria-hidden="true" tabindex="-1"></a> return foo(bar[baz:], bar[:baz])</span> -<span id="cb460-38"><a href="#cb460-38" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb460-39"><a href="#cb460-39" aria-hidden="true" tabindex="-1"></a>The following code</span> -<span id="cb460-40"><a href="#cb460-40" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb460-41"><a href="#cb460-41" aria-hidden="true" tabindex="-1"></a>~~~ Python</span> -<span id="cb460-42"><a href="#cb460-42" aria-hidden="true" tabindex="-1"></a>>>> foo([4, 2, 1, 3])</span> -<span id="cb460-43"><a href="#cb460-43" aria-hidden="true" tabindex="-1"></a>[1, 2, 3, 4]</span> -<span id="cb460-44"><a href="#cb460-44" aria-hidden="true" tabindex="-1"></a>~~~~~~~~~~</span> -<span id="cb460-45"><a href="#cb460-45" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb460-46"><a href="#cb460-46" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb503"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb503-1"><a href="#cb503-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb503-2"><a href="#cb503-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">verbatim</span>}</span> +<span id="cb503-3"><a href="#cb503-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[hyphens]{<span class="ex">url</span>}</span> +<span id="cb503-4"><a href="#cb503-4" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedCode]{<span class="ex">markdown</span>}</span> +<span id="cb503-5"><a href="#cb503-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb503-6"><a href="#cb503-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb503-7"><a href="#cb503-7" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {</span> +<span id="cb503-8"><a href="#cb503-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> +<span id="cb503-9"><a href="#cb503-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb503-10"><a href="#cb503-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> +<span id="cb503-11"><a href="#cb503-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> +<span id="cb503-12"><a href="#cb503-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb503-13"><a href="#cb503-13" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb503-14"><a href="#cb503-14" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb503-15"><a href="#cb503-15" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb503-16"><a href="#cb503-16" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb503-17"><a href="#cb503-17" aria-hidden="true" tabindex="-1"></a> inputVerbatim = {</span> +<span id="cb503-18"><a href="#cb503-18" aria-hidden="true" tabindex="-1"></a> is contained in file <span class="fu">\url</span>{#1}:<span class="co">%</span></span> +<span id="cb503-19"><a href="#cb503-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\verbatiminput</span>{#1}<span class="co">%</span></span> +<span id="cb503-20"><a href="#cb503-20" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb503-21"><a href="#cb503-21" aria-hidden="true" tabindex="-1"></a> inputFencedCode = {</span> +<span id="cb503-22"><a href="#cb503-22" aria-hidden="true" tabindex="-1"></a> in #2 <span class="fu">\markdownRendererInputVerbatim</span>{#1}<span class="co">%</span></span> +<span id="cb503-23"><a href="#cb503-23" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb503-24"><a href="#cb503-24" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb503-25"><a href="#cb503-25" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb503-26"><a href="#cb503-26" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb503-27"><a href="#cb503-27" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb503-28"><a href="#cb503-28" aria-hidden="true" tabindex="-1"></a>The following code</span> +<span id="cb503-29"><a href="#cb503-29" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb503-30"><a href="#cb503-30" aria-hidden="true" tabindex="-1"></a> def foo(bar):</span> +<span id="cb503-31"><a href="#cb503-31" aria-hidden="true" tabindex="-1"></a> if len(bar) <= 1:</span> +<span id="cb503-32"><a href="#cb503-32" aria-hidden="true" tabindex="-1"></a> return bar[0]</span> +<span id="cb503-33"><a href="#cb503-33" aria-hidden="true" tabindex="-1"></a> elif len(bar) == 2:</span> +<span id="cb503-34"><a href="#cb503-34" aria-hidden="true" tabindex="-1"></a> return sorted(bar)</span> +<span id="cb503-35"><a href="#cb503-35" aria-hidden="true" tabindex="-1"></a> else:</span> +<span id="cb503-36"><a href="#cb503-36" aria-hidden="true" tabindex="-1"></a> baz = len(bar) // 2</span> +<span id="cb503-37"><a href="#cb503-37" aria-hidden="true" tabindex="-1"></a> return foo(bar[baz:], bar[:baz])</span> +<span id="cb503-38"><a href="#cb503-38" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb503-39"><a href="#cb503-39" aria-hidden="true" tabindex="-1"></a>The following code</span> +<span id="cb503-40"><a href="#cb503-40" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb503-41"><a href="#cb503-41" aria-hidden="true" tabindex="-1"></a>~~~ Python</span> +<span id="cb503-42"><a href="#cb503-42" aria-hidden="true" tabindex="-1"></a>>>> foo([4, 2, 1, 3])</span> +<span id="cb503-43"><a href="#cb503-43" aria-hidden="true" tabindex="-1"></a>[1, 2, 3, 4]</span> +<span id="cb503-44"><a href="#cb503-44" aria-hidden="true" tabindex="-1"></a>~~~~~~~~~~</span> +<span id="cb503-45"><a href="#cb503-45" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb503-46"><a href="#cb503-46" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb461"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb461-1"><a href="#cb461-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb504"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb504-1"><a href="#cb504-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text except for the filename, which may differ:</p> <blockquote> <p>The following code is contained in file <code>./_markdown_document/882453149edcf288976647f6fe147ada.verbatim</code>:</p> -<div class="sourceCode" id="cb462"><pre -class="sourceCode py"><code class="sourceCode python"><span id="cb462-1"><a href="#cb462-1" aria-hidden="true" tabindex="-1"></a><span class="kw">def</span> foo(bar):</span> -<span id="cb462-2"><a href="#cb462-2" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="bu">len</span>(bar) <span class="op"><=</span> <span class="dv">1</span>:</span> -<span id="cb462-3"><a href="#cb462-3" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> bar[:<span class="dv">1</span>]</span> -<span id="cb462-4"><a href="#cb462-4" aria-hidden="true" tabindex="-1"></a> <span class="cf">elif</span> <span class="bu">len</span>(bar) <span class="op">==</span> <span class="dv">2</span>:</span> -<span id="cb462-5"><a href="#cb462-5" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="bu">sorted</span>(bar)</span> -<span id="cb462-6"><a href="#cb462-6" aria-hidden="true" tabindex="-1"></a> <span class="cf">else</span>:</span> -<span id="cb462-7"><a href="#cb462-7" aria-hidden="true" tabindex="-1"></a> baz <span class="op">=</span> bar[<span class="bu">len</span>(bar) <span class="op">//</span> <span class="dv">2</span>]</span> -<span id="cb462-8"><a href="#cb462-8" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> (</span> -<span id="cb462-9"><a href="#cb462-9" aria-hidden="true" tabindex="-1"></a> foo([qux <span class="cf">for</span> qux <span class="kw">in</span> bar <span class="cf">if</span> qux <span class="op"><</span> baz]) <span class="op">+</span> [baz] <span class="op">+</span></span> -<span id="cb462-10"><a href="#cb462-10" aria-hidden="true" tabindex="-1"></a> foo([qux <span class="cf">for</span> qux <span class="kw">in</span> bar <span class="cf">if</span> qux <span class="op">></span> baz])</span> -<span id="cb462-11"><a href="#cb462-11" aria-hidden="true" tabindex="-1"></a> )</span></code></pre></div> +<div class="sourceCode" id="cb505"><pre +class="sourceCode py"><code class="sourceCode python"><span id="cb505-1"><a href="#cb505-1" aria-hidden="true" tabindex="-1"></a><span class="kw">def</span> foo(bar):</span> +<span id="cb505-2"><a href="#cb505-2" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="bu">len</span>(bar) <span class="op"><=</span> <span class="dv">1</span>:</span> +<span id="cb505-3"><a href="#cb505-3" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> bar[:<span class="dv">1</span>]</span> +<span id="cb505-4"><a href="#cb505-4" aria-hidden="true" tabindex="-1"></a> <span class="cf">elif</span> <span class="bu">len</span>(bar) <span class="op">==</span> <span class="dv">2</span>:</span> +<span id="cb505-5"><a href="#cb505-5" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="bu">sorted</span>(bar)</span> +<span id="cb505-6"><a href="#cb505-6" aria-hidden="true" tabindex="-1"></a> <span class="cf">else</span>:</span> +<span id="cb505-7"><a href="#cb505-7" aria-hidden="true" tabindex="-1"></a> baz <span class="op">=</span> bar[<span class="bu">len</span>(bar) <span class="op">//</span> <span class="dv">2</span>]</span> +<span id="cb505-8"><a href="#cb505-8" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> (</span> +<span id="cb505-9"><a href="#cb505-9" aria-hidden="true" tabindex="-1"></a> foo([qux <span class="cf">for</span> qux <span class="kw">in</span> bar <span class="cf">if</span> qux <span class="op"><</span> baz]) <span class="op">+</span> [baz] <span class="op">+</span></span> +<span id="cb505-10"><a href="#cb505-10" aria-hidden="true" tabindex="-1"></a> foo([qux <span class="cf">for</span> qux <span class="kw">in</span> bar <span class="cf">if</span> qux <span class="op">></span> baz])</span> +<span id="cb505-11"><a href="#cb505-11" aria-hidden="true" tabindex="-1"></a> )</span></code></pre></div> <p>The following code in Python contained in file <code>./_markdown_document/cf2a96e2120cef5b1fae5fea36fcc27b.verbatim</code>:</p> -<div class="sourceCode" id="cb463"><pre -class="sourceCode py"><code class="sourceCode python"><span id="cb463-1"><a href="#cb463-1" aria-hidden="true" tabindex="-1"></a><span class="op">>>></span> foo([<span class="dv">4</span>, <span class="dv">2</span>, <span class="dv">1</span>, <span class="dv">3</span>])</span> -<span id="cb463-2"><a href="#cb463-2" aria-hidden="true" tabindex="-1"></a>[<span class="dv">1</span>, <span class="dv">2</span>, <span class="dv">3</span>, <span class="dv">4</span>]</span></code></pre></div> +<div class="sourceCode" id="cb506"><pre +class="sourceCode py"><code class="sourceCode python"><span id="cb506-1"><a href="#cb506-1" aria-hidden="true" tabindex="-1"></a><span class="op">>>></span> foo([<span class="dv">4</span>, <span class="dv">2</span>, <span class="dv">1</span>, <span class="dv">3</span>])</span> +<span id="cb506-2"><a href="#cb506-2" aria-hidden="true" tabindex="-1"></a>[<span class="dv">1</span>, <span class="dv">2</span>, <span class="dv">3</span>, <span class="dv">4</span>]</span></code></pre></div> </blockquote> -<h4 data-number="2.3.1.6" id="code-span-renderer"><span -class="header-section-number">2.3.1.6</span> Code Span Renderer</h4> +<h4 data-number="2.3.1.7" id="code-span-renderer"><span +class="header-section-number">2.3.1.7</span> Code Span Renderer</h4> <p>The <code>\markdownRendererCodeSpan</code> macro represents inline code span in the input text. It receives a single argument that corresponds to the inline code span.</p> -<h5 class="unnumbered" id="plain-tex-example-24">Plain <span +<h5 class="unnumbered" id="plain-tex-example-27">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb464"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb464-1"><a href="#cb464-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb464-2"><a href="#cb464-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> -<span id="cb464-3"><a href="#cb464-3" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb464-4"><a href="#cb464-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererCodeSpan</span>#1{#1}</span> -<span id="cb464-5"><a href="#cb464-5" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb464-6"><a href="#cb464-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb464-7"><a href="#cb464-7" aria-hidden="true" tabindex="-1"></a>`<span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>`</span> -<span id="cb464-8"><a href="#cb464-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb464-9"><a href="#cb464-9" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> -<span id="cb464-10"><a href="#cb464-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb464-11"><a href="#cb464-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb464-12"><a href="#cb464-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionHybrid</span>{true}</span> -<span id="cb464-13"><a href="#cb464-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb464-14"><a href="#cb464-14" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> -<span id="cb464-15"><a href="#cb464-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb464-16"><a href="#cb464-16" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb464-17"><a href="#cb464-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb507"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb507-1"><a href="#cb507-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb507-2"><a href="#cb507-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> lmfonts</span> +<span id="cb507-3"><a href="#cb507-3" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb507-4"><a href="#cb507-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererCodeSpan</span>#1{#1}</span> +<span id="cb507-5"><a href="#cb507-5" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb507-6"><a href="#cb507-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb507-7"><a href="#cb507-7" aria-hidden="true" tabindex="-1"></a>`<span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>`</span> +<span id="cb507-8"><a href="#cb507-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb507-9"><a href="#cb507-9" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> +<span id="cb507-10"><a href="#cb507-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb507-11"><a href="#cb507-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb507-12"><a href="#cb507-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionHybrid</span>{true}</span> +<span id="cb507-13"><a href="#cb507-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb507-14"><a href="#cb507-14" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> +<span id="cb507-15"><a href="#cb507-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb507-16"><a href="#cb507-16" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb507-17"><a href="#cb507-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb465"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb465-1"><a href="#cb465-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb508"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb508-1"><a href="#cb508-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -8099,34 +9112,34 @@ contain the following text:</p> <p><math><mroot><msqrt><mo>−</mo><mn>1</mn></msqrt></mroot></math> <em>equals</em> <math><mi>i</mi></math>.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-59"><span +<h5 class="unnumbered" id="latex-example-63"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb466"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb466-1"><a href="#cb466-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb466-2"><a href="#cb466-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[smartEllipses]{<span class="ex">markdown</span>}</span> -<span id="cb466-3"><a href="#cb466-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb466-4"><a href="#cb466-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb466-5"><a href="#cb466-5" aria-hidden="true" tabindex="-1"></a> codeSpan = {#1},</span> -<span id="cb466-6"><a href="#cb466-6" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb466-7"><a href="#cb466-7" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb466-8"><a href="#cb466-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb466-9"><a href="#cb466-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb466-10"><a href="#cb466-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb466-11"><a href="#cb466-11" aria-hidden="true" tabindex="-1"></a>`<span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>`</span> -<span id="cb466-12"><a href="#cb466-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb466-13"><a href="#cb466-13" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> -<span id="cb466-14"><a href="#cb466-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb466-15"><a href="#cb466-15" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb466-16"><a href="#cb466-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{hybrid}</span> -<span id="cb466-17"><a href="#cb466-17" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> -<span id="cb466-18"><a href="#cb466-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb466-19"><a href="#cb466-19" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb466-20"><a href="#cb466-20" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb509"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb509-1"><a href="#cb509-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb509-2"><a href="#cb509-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[smartEllipses]{<span class="ex">markdown</span>}</span> +<span id="cb509-3"><a href="#cb509-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb509-4"><a href="#cb509-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb509-5"><a href="#cb509-5" aria-hidden="true" tabindex="-1"></a> codeSpan = {#1},</span> +<span id="cb509-6"><a href="#cb509-6" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb509-7"><a href="#cb509-7" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb509-8"><a href="#cb509-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb509-9"><a href="#cb509-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb509-10"><a href="#cb509-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb509-11"><a href="#cb509-11" aria-hidden="true" tabindex="-1"></a>`<span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>`</span> +<span id="cb509-12"><a href="#cb509-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb509-13"><a href="#cb509-13" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> +<span id="cb509-14"><a href="#cb509-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb509-15"><a href="#cb509-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb509-16"><a href="#cb509-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[hybrid]</span> +<span id="cb509-17"><a href="#cb509-17" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> +<span id="cb509-18"><a href="#cb509-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb509-19"><a href="#cb509-19" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb509-20"><a href="#cb509-20" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb467"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb467-1"><a href="#cb467-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb510"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb510-1"><a href="#cb510-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -8135,30 +9148,30 @@ contain the following text:</p> <p><math><mroot><msqrt><mo>−</mo><mn>1</mn></msqrt></mroot></math> <em>equals</em> <math><mi>i</mi></math>.</p> </blockquote> -<h5 class="unnumbered" id="context-example-38">Con<span +<h5 class="unnumbered" id="context-example-40">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb468"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb468-1"><a href="#cb468-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb468-2"><a href="#cb468-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererCodeSpan</span>#1{#1}</span> -<span id="cb468-3"><a href="#cb468-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb468-4"><a href="#cb468-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb468-5"><a href="#cb468-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb468-6"><a href="#cb468-6" aria-hidden="true" tabindex="-1"></a>`<span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>`</span> -<span id="cb468-7"><a href="#cb468-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb468-8"><a href="#cb468-8" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> -<span id="cb468-9"><a href="#cb468-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb468-10"><a href="#cb468-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb468-11"><a href="#cb468-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[hybrid = yes]</span> -<span id="cb468-12"><a href="#cb468-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb468-13"><a href="#cb468-13" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> -<span id="cb468-14"><a href="#cb468-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb468-15"><a href="#cb468-15" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb468-16"><a href="#cb468-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb469"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb469-1"><a href="#cb469-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb511"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb511-1"><a href="#cb511-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb511-2"><a href="#cb511-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererCodeSpan</span>#1{#1}</span> +<span id="cb511-3"><a href="#cb511-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb511-4"><a href="#cb511-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb511-5"><a href="#cb511-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb511-6"><a href="#cb511-6" aria-hidden="true" tabindex="-1"></a>`<span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span>`</span> +<span id="cb511-7"><a href="#cb511-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb511-8"><a href="#cb511-8" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> +<span id="cb511-9"><a href="#cb511-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb511-10"><a href="#cb511-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb511-11"><a href="#cb511-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[hybrid = yes]</span> +<span id="cb511-12"><a href="#cb511-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb511-13"><a href="#cb511-13" aria-hidden="true" tabindex="-1"></a><span class="ss">$</span><span class="sc">\sqrt</span><span class="ss">{-1}$</span> *equals* <span class="ss">$i$</span></span> +<span id="cb511-14"><a href="#cb511-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb511-15"><a href="#cb511-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb511-16"><a href="#cb511-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb512"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb512-1"><a href="#cb512-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -8167,61 +9180,60 @@ contain the following text:</p> <p><math><mroot><msqrt><mo>−</mo><mn>1</mn></msqrt></mroot></math> <em>equals</em> <math><mi>i</mi></math>.</p> </blockquote> -<h4 data-number="2.3.1.7" +<h4 data-number="2.3.1.8" id="code-span-attribute-context-renderers"><span -class="header-section-number">2.3.1.7</span> Code Span Attribute Context +class="header-section-number">2.3.1.8</span> Code Span Attribute Context Renderers</h4> <p>The following macros are only produced, when the <strong><code>inlineCodeAttributes</code></strong> option is enabled.</p> <p>The <code>\markdownRendererCodeSpanAttributeContextBegin</code> and <code>\markdownRendererCodeSpanAttributeContextEnd</code> macros -represent the beginning and the end of an inline code span in which the -attributes of the inline code span apply. The macros receive no -arguments.</p> -<h5 class="unnumbered" id="latex-example-60"><span +represent the beginning and the end of a context in which the attributes +of an inline code span apply. The macros receive no arguments.</p> +<h5 class="unnumbered" id="latex-example-64"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb470"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb470-1"><a href="#cb470-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb470-2"><a href="#cb470-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[inlineCodeAttributes]{<span class="ex">markdown</span>}</span> -<span id="cb470-3"><a href="#cb470-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb470-4"><a href="#cb470-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb470-5"><a href="#cb470-5" aria-hidden="true" tabindex="-1"></a> codeSpanAttributeContextBegin = {(},</span> -<span id="cb470-6"><a href="#cb470-6" aria-hidden="true" tabindex="-1"></a> codeSpan = {#1},</span> -<span id="cb470-7"><a href="#cb470-7" aria-hidden="true" tabindex="-1"></a> codeSpanAttributeContextEnd = {)},</span> -<span id="cb470-8"><a href="#cb470-8" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb470-9"><a href="#cb470-9" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb470-10"><a href="#cb470-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb470-11"><a href="#cb470-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb470-12"><a href="#cb470-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb470-13"><a href="#cb470-13" aria-hidden="true" tabindex="-1"></a>foo `bar`{key=value} baz</span> -<span id="cb470-14"><a href="#cb470-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb470-15"><a href="#cb470-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb470-16"><a href="#cb470-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb513"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb513-1"><a href="#cb513-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb513-2"><a href="#cb513-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[inlineCodeAttributes]{<span class="ex">markdown</span>}</span> +<span id="cb513-3"><a href="#cb513-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb513-4"><a href="#cb513-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb513-5"><a href="#cb513-5" aria-hidden="true" tabindex="-1"></a> codeSpanAttributeContextBegin = {(},</span> +<span id="cb513-6"><a href="#cb513-6" aria-hidden="true" tabindex="-1"></a> codeSpan = {#1},</span> +<span id="cb513-7"><a href="#cb513-7" aria-hidden="true" tabindex="-1"></a> codeSpanAttributeContextEnd = {)},</span> +<span id="cb513-8"><a href="#cb513-8" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb513-9"><a href="#cb513-9" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb513-10"><a href="#cb513-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb513-11"><a href="#cb513-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb513-12"><a href="#cb513-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb513-13"><a href="#cb513-13" aria-hidden="true" tabindex="-1"></a>foo `bar`{key=value} baz</span> +<span id="cb513-14"><a href="#cb513-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb513-15"><a href="#cb513-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb513-16"><a href="#cb513-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb471"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb471-1"><a href="#cb471-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb514"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb514-1"><a href="#cb514-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>foo (bar) baz</p> </blockquote> -<h4 data-number="2.3.1.8" id="texcontentblockrenderers"><span -class="header-section-number">2.3.1.8</span> Content Block +<h4 data-number="2.3.1.9" id="texcontentblockrenderers"><span +class="header-section-number">2.3.1.9</span> Content Block Renderers</h4> -<p>The <code>\markdownRendererContentBlock</code> macro represents an iA -Writer content block. It receives four arguments: the local file or +<p>The <code>\markdownRendererContentBlock</code> macro represents an +iA Writer content block. It receives four arguments: the local file or online image filename extension cast to the lower case, the fully escaped <abbr>uri</abbr> that can be directly typeset, the raw <abbr>uri</abbr> that can be used outside typesetting, and the title of the content block.</p> <p>The <code>\markdownRendererContentBlockOnlineImage</code> macro -represents an iA Writer online image content block. The macro receives +represents an iA Writer online image content block. The macro receives the same arguments as <code>\markdownRendererContentBlock</code>.</p> <p>The <code>\markdownRendererContentBlockCode</code> macro represents -an iA Writer content block that was recognized as a file in a known +an iA Writer content block that was recognized as a file in a known programming language by its filename extension <span class="math inline"><em>s</em></span>. If any <code>markdown-languages.json</code> file found by @@ -8249,38 +9261,38 @@ highlighting. <a href="https://github.com/iainc/Markdown-Content-Blocks" title="File transclusion syntax for Markdown">The <code>Languages.json</code> file provided by Anton Sotkov</a> is a good starting point.</p> -<h5 class="unnumbered" id="plain-tex-example-25">Plain <span +<h5 class="unnumbered" id="plain-tex-example-28">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb472"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb472-1"><a href="#cb472-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb472-2"><a href="#cb472-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionContentBlocks</span>{true}</span> -<span id="cb472-3"><a href="#cb472-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererContentBlock</span>#1#2#3#4{<span class="co">%</span></span> -<span id="cb472-4"><a href="#cb472-4" aria-hidden="true" tabindex="-1"></a> This is {<span class="fu">\tt</span> #2}, #4.</span> -<span id="cb472-5"><a href="#cb472-5" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb472-6"><a href="#cb472-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererContentBlockOnlineImage</span>#1#2#3#4{<span class="co">%</span></span> -<span id="cb472-7"><a href="#cb472-7" aria-hidden="true" tabindex="-1"></a> This is the image {<span class="fu">\tt</span> #2}, #4.</span> -<span id="cb472-8"><a href="#cb472-8" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb472-9"><a href="#cb472-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererContentBlockCode</span>#1#2#3#4#5{<span class="co">%</span></span> -<span id="cb472-10"><a href="#cb472-10" aria-hidden="true" tabindex="-1"></a> This is the #2 (<span class="fu">\uppercase</span>{#1}) document {<span class="fu">\tt</span> #3}, #5.</span> -<span id="cb472-11"><a href="#cb472-11" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb472-12"><a href="#cb472-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb472-13"><a href="#cb472-13" aria-hidden="true" tabindex="-1"></a>/document.tex (the document that we are currently typesetting)</span> -<span id="cb472-14"><a href="#cb472-14" aria-hidden="true" tabindex="-1"></a>/markdown-languages.json (the mapping between filename extensions</span> -<span id="cb472-15"><a href="#cb472-15" aria-hidden="true" tabindex="-1"></a> and programming language names)</span> -<span id="cb472-16"><a href="#cb472-16" aria-hidden="true" tabindex="-1"></a>https://tug.org/tugboat/noword.jpg (the logotype of TUGboat)</span> -<span id="cb472-17"><a href="#cb472-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb472-18"><a href="#cb472-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb515"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb515-1"><a href="#cb515-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb515-2"><a href="#cb515-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionContentBlocks</span>{true}</span> +<span id="cb515-3"><a href="#cb515-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererContentBlock</span>#1#2#3#4{<span class="co">%</span></span> +<span id="cb515-4"><a href="#cb515-4" aria-hidden="true" tabindex="-1"></a> This is {<span class="fu">\tt</span> #2}, #4.</span> +<span id="cb515-5"><a href="#cb515-5" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb515-6"><a href="#cb515-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererContentBlockOnlineImage</span>#1#2#3#4{<span class="co">%</span></span> +<span id="cb515-7"><a href="#cb515-7" aria-hidden="true" tabindex="-1"></a> This is the image {<span class="fu">\tt</span> #2}, #4.</span> +<span id="cb515-8"><a href="#cb515-8" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb515-9"><a href="#cb515-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererContentBlockCode</span>#1#2#3#4#5{<span class="co">%</span></span> +<span id="cb515-10"><a href="#cb515-10" aria-hidden="true" tabindex="-1"></a> This is the #2 (<span class="fu">\uppercase</span>{#1}) document {<span class="fu">\tt</span> #3}, #5.</span> +<span id="cb515-11"><a href="#cb515-11" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb515-12"><a href="#cb515-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb515-13"><a href="#cb515-13" aria-hidden="true" tabindex="-1"></a>/document.tex (the document that we are currently typesetting)</span> +<span id="cb515-14"><a href="#cb515-14" aria-hidden="true" tabindex="-1"></a>/markdown-languages.json (the mapping between filename extensions</span> +<span id="cb515-15"><a href="#cb515-15" aria-hidden="true" tabindex="-1"></a> and programming language names)</span> +<span id="cb515-16"><a href="#cb515-16" aria-hidden="true" tabindex="-1"></a>https://tug.org/tugboat/noword.jpg (the logotype of TUGboat)</span> +<span id="cb515-17"><a href="#cb515-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb515-18"><a href="#cb515-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Create also a text document named <code>markdown-languages.json</code> with the following content:</p> -<div class="sourceCode" id="cb473"><pre -class="sourceCode js"><code class="sourceCode javascript"><span id="cb473-1"><a href="#cb473-1" aria-hidden="true" tabindex="-1"></a>{</span> -<span id="cb473-2"><a href="#cb473-2" aria-hidden="true" tabindex="-1"></a> <span class="st">"json"</span><span class="op">:</span> <span class="st">"JavaScript Object Notation"</span><span class="op">,</span></span> -<span id="cb473-3"><a href="#cb473-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> +<div class="sourceCode" id="cb516"><pre +class="sourceCode js"><code class="sourceCode javascript"><span id="cb516-1"><a href="#cb516-1" aria-hidden="true" tabindex="-1"></a>{</span> +<span id="cb516-2"><a href="#cb516-2" aria-hidden="true" tabindex="-1"></a> <span class="st">"json"</span><span class="op">:</span> <span class="st">"JavaScript Object Notation"</span><span class="op">,</span></span> +<span id="cb516-3"><a href="#cb516-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb474"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb474-1"><a href="#cb474-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb517"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb517-1"><a href="#cb517-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -8292,38 +9304,38 @@ extensions and programming language names.</p> <p>This is the image <code>https://tug.org/tugboat/noword.jpg</code>, the logotype of TUGboat.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-61"><span +<h5 class="unnumbered" id="latex-example-65"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb475"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb475-1"><a href="#cb475-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb475-2"><a href="#cb475-2" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">filecontents</span>}[overwrite,nosearch,noheader]{markdown-languages.json}</span> -<span id="cb475-3"><a href="#cb475-3" aria-hidden="true" tabindex="-1"></a>{</span> -<span id="cb475-4"><a href="#cb475-4" aria-hidden="true" tabindex="-1"></a> "json": "JavaScript Object Notation",</span> -<span id="cb475-5"><a href="#cb475-5" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb475-6"><a href="#cb475-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">filecontents</span>}</span> -<span id="cb475-7"><a href="#cb475-7" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[contentBlocks]{<span class="ex">markdown</span>}</span> -<span id="cb475-8"><a href="#cb475-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb475-9"><a href="#cb475-9" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb475-10"><a href="#cb475-10" aria-hidden="true" tabindex="-1"></a> contentBlock = {This is <span class="fu">\texttt</span>{#2}, #4.},</span> -<span id="cb475-11"><a href="#cb475-11" aria-hidden="true" tabindex="-1"></a> contentBlockOnlineImage = {This is the image <span class="fu">\texttt</span>{#2}, #4.},</span> -<span id="cb475-12"><a href="#cb475-12" aria-hidden="true" tabindex="-1"></a> contentBlockCode = {<span class="co">%</span></span> -<span id="cb475-13"><a href="#cb475-13" aria-hidden="true" tabindex="-1"></a> This is the #2 (<span class="fu">\MakeUppercase</span>{#1}) document <span class="fu">\texttt</span>{#3}, #5.</span> -<span id="cb475-14"><a href="#cb475-14" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb475-15"><a href="#cb475-15" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb475-16"><a href="#cb475-16" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb475-17"><a href="#cb475-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb475-18"><a href="#cb475-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb475-19"><a href="#cb475-19" aria-hidden="true" tabindex="-1"></a>/document.tex (the document that we are currently typesetting)</span> -<span id="cb475-20"><a href="#cb475-20" aria-hidden="true" tabindex="-1"></a>/markdown-languages.json (the mapping between filename extensions</span> -<span id="cb475-21"><a href="#cb475-21" aria-hidden="true" tabindex="-1"></a> and programming language names)</span> -<span id="cb475-22"><a href="#cb475-22" aria-hidden="true" tabindex="-1"></a>https://tug.org/tugboat/noword.jpg (the logotype of TUGboat)</span> -<span id="cb475-23"><a href="#cb475-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb475-24"><a href="#cb475-24" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb518"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb518-1"><a href="#cb518-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb518-2"><a href="#cb518-2" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">filecontents</span>}[overwrite,nosearch,noheader]{markdown-languages.json}</span> +<span id="cb518-3"><a href="#cb518-3" aria-hidden="true" tabindex="-1"></a>{</span> +<span id="cb518-4"><a href="#cb518-4" aria-hidden="true" tabindex="-1"></a> "json": "JavaScript Object Notation",</span> +<span id="cb518-5"><a href="#cb518-5" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb518-6"><a href="#cb518-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">filecontents</span>}</span> +<span id="cb518-7"><a href="#cb518-7" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[contentBlocks]{<span class="ex">markdown</span>}</span> +<span id="cb518-8"><a href="#cb518-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb518-9"><a href="#cb518-9" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb518-10"><a href="#cb518-10" aria-hidden="true" tabindex="-1"></a> contentBlock = {This is <span class="fu">\texttt</span>{#2}, #4.},</span> +<span id="cb518-11"><a href="#cb518-11" aria-hidden="true" tabindex="-1"></a> contentBlockOnlineImage = {This is the image <span class="fu">\texttt</span>{#2}, #4.},</span> +<span id="cb518-12"><a href="#cb518-12" aria-hidden="true" tabindex="-1"></a> contentBlockCode = {<span class="co">%</span></span> +<span id="cb518-13"><a href="#cb518-13" aria-hidden="true" tabindex="-1"></a> This is the #2 (<span class="fu">\MakeUppercase</span>{#1}) document <span class="fu">\texttt</span>{#3}, #5.</span> +<span id="cb518-14"><a href="#cb518-14" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb518-15"><a href="#cb518-15" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb518-16"><a href="#cb518-16" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb518-17"><a href="#cb518-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb518-18"><a href="#cb518-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb518-19"><a href="#cb518-19" aria-hidden="true" tabindex="-1"></a>/document.tex (the document that we are currently typesetting)</span> +<span id="cb518-20"><a href="#cb518-20" aria-hidden="true" tabindex="-1"></a>/markdown-languages.json (the mapping between filename extensions</span> +<span id="cb518-21"><a href="#cb518-21" aria-hidden="true" tabindex="-1"></a> and programming language names)</span> +<span id="cb518-22"><a href="#cb518-22" aria-hidden="true" tabindex="-1"></a>https://tug.org/tugboat/noword.jpg (the logotype of TUGboat)</span> +<span id="cb518-23"><a href="#cb518-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb518-24"><a href="#cb518-24" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb476"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb476-1"><a href="#cb476-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb519"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb519-1"><a href="#cb519-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -8335,39 +9347,39 @@ extensions and programming language names.</p> <p>This is the image <code>https://tug.org/tugboat/noword.jpg</code>, the logotype of TUGboat.</p> </blockquote> -<h5 class="unnumbered" id="context-example-39">Con<span +<h5 class="unnumbered" id="context-example-41">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb477"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb477-1"><a href="#cb477-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb477-2"><a href="#cb477-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[contentBlocks = yes]</span> -<span id="cb477-3"><a href="#cb477-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererContentBlock</span>#1#2#3#4{<span class="co">%</span></span> -<span id="cb477-4"><a href="#cb477-4" aria-hidden="true" tabindex="-1"></a> This is {<span class="fu">\tt</span> #2}, #4.</span> -<span id="cb477-5"><a href="#cb477-5" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb477-6"><a href="#cb477-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererContentBlockOnlineImage</span>#1#2#3#4{<span class="co">%</span></span> -<span id="cb477-7"><a href="#cb477-7" aria-hidden="true" tabindex="-1"></a> This is the image {<span class="fu">\tt</span> #2}, #4.</span> -<span id="cb477-8"><a href="#cb477-8" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb477-9"><a href="#cb477-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererContentBlockCode</span>#1#2#3#4#5{<span class="co">%</span></span> -<span id="cb477-10"><a href="#cb477-10" aria-hidden="true" tabindex="-1"></a> This is the #2 (<span class="fu">\uppercase</span>{#1}) document {<span class="fu">\tt</span> #3}, #5.</span> -<span id="cb477-11"><a href="#cb477-11" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb477-12"><a href="#cb477-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb477-13"><a href="#cb477-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb477-14"><a href="#cb477-14" aria-hidden="true" tabindex="-1"></a>/document.tex (the document that we are currently typesetting)</span> -<span id="cb477-15"><a href="#cb477-15" aria-hidden="true" tabindex="-1"></a>/markdown-languages.json (the mapping between filename extensions</span> -<span id="cb477-16"><a href="#cb477-16" aria-hidden="true" tabindex="-1"></a> and programming language names)</span> -<span id="cb477-17"><a href="#cb477-17" aria-hidden="true" tabindex="-1"></a>https://tug.org/tugboat/noword.jpg (the logotype of TUGboat)</span> -<span id="cb477-18"><a href="#cb477-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb477-19"><a href="#cb477-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb520"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb520-1"><a href="#cb520-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb520-2"><a href="#cb520-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[contentBlocks = yes]</span> +<span id="cb520-3"><a href="#cb520-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererContentBlock</span>#1#2#3#4{<span class="co">%</span></span> +<span id="cb520-4"><a href="#cb520-4" aria-hidden="true" tabindex="-1"></a> This is {<span class="fu">\tt</span> #2}, #4.</span> +<span id="cb520-5"><a href="#cb520-5" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb520-6"><a href="#cb520-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererContentBlockOnlineImage</span>#1#2#3#4{<span class="co">%</span></span> +<span id="cb520-7"><a href="#cb520-7" aria-hidden="true" tabindex="-1"></a> This is the image {<span class="fu">\tt</span> #2}, #4.</span> +<span id="cb520-8"><a href="#cb520-8" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb520-9"><a href="#cb520-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererContentBlockCode</span>#1#2#3#4#5{<span class="co">%</span></span> +<span id="cb520-10"><a href="#cb520-10" aria-hidden="true" tabindex="-1"></a> This is the #2 (<span class="fu">\uppercase</span>{#1}) document {<span class="fu">\tt</span> #3}, #5.</span> +<span id="cb520-11"><a href="#cb520-11" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb520-12"><a href="#cb520-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb520-13"><a href="#cb520-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb520-14"><a href="#cb520-14" aria-hidden="true" tabindex="-1"></a>/document.tex (the document that we are currently typesetting)</span> +<span id="cb520-15"><a href="#cb520-15" aria-hidden="true" tabindex="-1"></a>/markdown-languages.json (the mapping between filename extensions</span> +<span id="cb520-16"><a href="#cb520-16" aria-hidden="true" tabindex="-1"></a> and programming language names)</span> +<span id="cb520-17"><a href="#cb520-17" aria-hidden="true" tabindex="-1"></a>https://tug.org/tugboat/noword.jpg (the logotype of TUGboat)</span> +<span id="cb520-18"><a href="#cb520-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb520-19"><a href="#cb520-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Create also a text document named <code>markdown-languages.json</code> with the following content:</p> -<div class="sourceCode" id="cb478"><pre -class="sourceCode js"><code class="sourceCode javascript"><span id="cb478-1"><a href="#cb478-1" aria-hidden="true" tabindex="-1"></a>{</span> -<span id="cb478-2"><a href="#cb478-2" aria-hidden="true" tabindex="-1"></a> <span class="st">"json"</span><span class="op">:</span> <span class="st">"JavaScript Object Notation"</span><span class="op">,</span></span> -<span id="cb478-3"><a href="#cb478-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> +<div class="sourceCode" id="cb521"><pre +class="sourceCode js"><code class="sourceCode javascript"><span id="cb521-1"><a href="#cb521-1" aria-hidden="true" tabindex="-1"></a>{</span> +<span id="cb521-2"><a href="#cb521-2" aria-hidden="true" tabindex="-1"></a> <span class="st">"json"</span><span class="op">:</span> <span class="st">"JavaScript Object Notation"</span><span class="op">,</span></span> +<span id="cb521-3"><a href="#cb521-3" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb479"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb479-1"><a href="#cb479-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb522"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb522-1"><a href="#cb522-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -8379,8 +9391,8 @@ extensions and programming language names.</p> <p>This is the image <code>https://tug.org/tugboat/noword.jpg</code>, the logotype of TUGboat.</p> </blockquote> -<h4 data-number="2.3.1.9" id="definition-list-renderers"><span -class="header-section-number">2.3.1.9</span> Definition List +<h4 data-number="2.3.1.10" id="definition-list-renderers"><span +class="header-section-number">2.3.1.10</span> Definition List Renderers</h4> <p>The following macros are only produced, when the <strong><code>definitionLists</code></strong> option is enabled.</p> @@ -8412,92 +9424,92 @@ of a definition list that contains no item with several paragraphs of text (the list is tight). This macro will only be produced, when the <strong><code>tightLists</code></strong> option is disabled. The macro receives no arguments.</p> -<h5 class="unnumbered" id="plain-tex-example-26">Plain <span +<h5 class="unnumbered" id="plain-tex-example-29">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb480"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb480-1"><a href="#cb480-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb480-2"><a href="#cb480-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionDefinitionLists</span>{true}</span> -<span id="cb480-3"><a href="#cb480-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTightLists</span>{true}</span> -<span id="cb480-4"><a href="#cb480-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-5"><a href="#cb480-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> -<span id="cb480-6"><a href="#cb480-6" aria-hidden="true" tabindex="-1"></a> :<span class="co">%</span></span> -<span id="cb480-7"><a href="#cb480-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> -<span id="cb480-8"><a href="#cb480-8" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb480-9"><a href="#cb480-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlBeginTight</span>{<span class="co">%</span></span> -<span id="cb480-10"><a href="#cb480-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\begingroup</span></span> -<span id="cb480-11"><a href="#cb480-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\parindent</span>=0pt</span> -<span id="cb480-12"><a href="#cb480-12" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb480-13"><a href="#cb480-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItem</span>#1{<span class="co">%</span></span> -<span id="cb480-14"><a href="#cb480-14" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span>{<span class="fu">\bf</span>#1}<span class="co">%</span></span> -<span id="cb480-15"><a href="#cb480-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{<span class="co">%</span></span> -<span id="cb480-16"><a href="#cb480-16" aria-hidden="true" tabindex="-1"></a> ,</span> -<span id="cb480-17"><a href="#cb480-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{<span class="co">%</span></span> -<span id="cb480-18"><a href="#cb480-18" aria-hidden="true" tabindex="-1"></a> , and</span> -<span id="cb480-19"><a href="#cb480-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{.}<span class="co">%</span></span> -<span id="cb480-20"><a href="#cb480-20" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb480-21"><a href="#cb480-21" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb480-22"><a href="#cb480-22" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb480-23"><a href="#cb480-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItemEnd</span>{}</span> -<span id="cb480-24"><a href="#cb480-24" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="fu">\par</span>--<span class="fu">\kern</span> 0.5em}</span> -<span id="cb480-25"><a href="#cb480-25" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlEndTight</span>{<span class="fu">\endgroup</span>}</span> -<span id="cb480-26"><a href="#cb480-26" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-27"><a href="#cb480-27" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb480-28"><a href="#cb480-28" aria-hidden="true" tabindex="-1"></a>This is a tight definition list</span> -<span id="cb480-29"><a href="#cb480-29" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-30"><a href="#cb480-30" aria-hidden="true" tabindex="-1"></a>Coffee</span> -<span id="cb480-31"><a href="#cb480-31" aria-hidden="true" tabindex="-1"></a>: black hot drink</span> -<span id="cb480-32"><a href="#cb480-32" aria-hidden="true" tabindex="-1"></a>: prepared from roasted coffee beans</span> -<span id="cb480-33"><a href="#cb480-33" aria-hidden="true" tabindex="-1"></a>: one of the most traded agricultural commodities in the world</span> -<span id="cb480-34"><a href="#cb480-34" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-35"><a href="#cb480-35" aria-hidden="true" tabindex="-1"></a>Milk</span> -<span id="cb480-36"><a href="#cb480-36" aria-hidden="true" tabindex="-1"></a>: white cold drink</span> -<span id="cb480-37"><a href="#cb480-37" aria-hidden="true" tabindex="-1"></a>: nutrient-rich</span> -<span id="cb480-38"><a href="#cb480-38" aria-hidden="true" tabindex="-1"></a>: produced on an industrial scale</span> -<span id="cb480-39"><a href="#cb480-39" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb480-40"><a href="#cb480-40" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-41"><a href="#cb480-41" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> -<span id="cb480-42"><a href="#cb480-42" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> -<span id="cb480-43"><a href="#cb480-43" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb480-44"><a href="#cb480-44" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlBegin</span>{}</span> -<span id="cb480-45"><a href="#cb480-45" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItem</span>#1{<span class="co">%</span></span> -<span id="cb480-46"><a href="#cb480-46" aria-hidden="true" tabindex="-1"></a> . #1 is a</span> -<span id="cb480-47"><a href="#cb480-47" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="co">%</span></span> -<span id="cb480-48"><a href="#cb480-48" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="co">%</span></span> -<span id="cb480-49"><a href="#cb480-49" aria-hidden="true" tabindex="-1"></a> ,</span> -<span id="cb480-50"><a href="#cb480-50" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{, and }<span class="co">%</span></span> -<span id="cb480-51"><a href="#cb480-51" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb480-52"><a href="#cb480-52" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb480-53"><a href="#cb480-53" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb480-54"><a href="#cb480-54" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItemEnd</span>{}</span> -<span id="cb480-55"><a href="#cb480-55" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlDefinitionEnd</span>{}</span> -<span id="cb480-56"><a href="#cb480-56" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlEnd</span>{.}</span> -<span id="cb480-57"><a href="#cb480-57" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-58"><a href="#cb480-58" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb480-59"><a href="#cb480-59" aria-hidden="true" tabindex="-1"></a>This is a loose definition list</span> -<span id="cb480-60"><a href="#cb480-60" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-61"><a href="#cb480-61" aria-hidden="true" tabindex="-1"></a>Coffee</span> -<span id="cb480-62"><a href="#cb480-62" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-63"><a href="#cb480-63" aria-hidden="true" tabindex="-1"></a>: black hot drink</span> -<span id="cb480-64"><a href="#cb480-64" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-65"><a href="#cb480-65" aria-hidden="true" tabindex="-1"></a>: prepared from roasted coffee beans</span> -<span id="cb480-66"><a href="#cb480-66" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-67"><a href="#cb480-67" aria-hidden="true" tabindex="-1"></a>: one of the most traded agricultural commodities in the world</span> -<span id="cb480-68"><a href="#cb480-68" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-69"><a href="#cb480-69" aria-hidden="true" tabindex="-1"></a>Milk</span> -<span id="cb480-70"><a href="#cb480-70" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-71"><a href="#cb480-71" aria-hidden="true" tabindex="-1"></a>: white cold drink</span> -<span id="cb480-72"><a href="#cb480-72" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-73"><a href="#cb480-73" aria-hidden="true" tabindex="-1"></a>: nutrient-rich</span> -<span id="cb480-74"><a href="#cb480-74" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-75"><a href="#cb480-75" aria-hidden="true" tabindex="-1"></a>: produced on an industrial scale</span> -<span id="cb480-76"><a href="#cb480-76" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb480-77"><a href="#cb480-77" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb480-78"><a href="#cb480-78" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb523"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb523-1"><a href="#cb523-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb523-2"><a href="#cb523-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionDefinitionLists</span>{true}</span> +<span id="cb523-3"><a href="#cb523-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTightLists</span>{true}</span> +<span id="cb523-4"><a href="#cb523-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-5"><a href="#cb523-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> +<span id="cb523-6"><a href="#cb523-6" aria-hidden="true" tabindex="-1"></a> :<span class="co">%</span></span> +<span id="cb523-7"><a href="#cb523-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> +<span id="cb523-8"><a href="#cb523-8" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb523-9"><a href="#cb523-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlBeginTight</span>{<span class="co">%</span></span> +<span id="cb523-10"><a href="#cb523-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\begingroup</span></span> +<span id="cb523-11"><a href="#cb523-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\parindent</span>=0pt</span> +<span id="cb523-12"><a href="#cb523-12" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb523-13"><a href="#cb523-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItem</span>#1{<span class="co">%</span></span> +<span id="cb523-14"><a href="#cb523-14" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span>{<span class="fu">\bf</span>#1}<span class="co">%</span></span> +<span id="cb523-15"><a href="#cb523-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{<span class="co">%</span></span> +<span id="cb523-16"><a href="#cb523-16" aria-hidden="true" tabindex="-1"></a> ,</span> +<span id="cb523-17"><a href="#cb523-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{<span class="co">%</span></span> +<span id="cb523-18"><a href="#cb523-18" aria-hidden="true" tabindex="-1"></a> , and</span> +<span id="cb523-19"><a href="#cb523-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{.}<span class="co">%</span></span> +<span id="cb523-20"><a href="#cb523-20" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb523-21"><a href="#cb523-21" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb523-22"><a href="#cb523-22" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb523-23"><a href="#cb523-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItemEnd</span>{}</span> +<span id="cb523-24"><a href="#cb523-24" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="fu">\par</span>--<span class="fu">\kern</span> 0.5em}</span> +<span id="cb523-25"><a href="#cb523-25" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlEndTight</span>{<span class="fu">\endgroup</span>}</span> +<span id="cb523-26"><a href="#cb523-26" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-27"><a href="#cb523-27" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb523-28"><a href="#cb523-28" aria-hidden="true" tabindex="-1"></a>This is a tight definition list</span> +<span id="cb523-29"><a href="#cb523-29" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-30"><a href="#cb523-30" aria-hidden="true" tabindex="-1"></a>Coffee</span> +<span id="cb523-31"><a href="#cb523-31" aria-hidden="true" tabindex="-1"></a>: black hot drink</span> +<span id="cb523-32"><a href="#cb523-32" aria-hidden="true" tabindex="-1"></a>: prepared from roasted coffee beans</span> +<span id="cb523-33"><a href="#cb523-33" aria-hidden="true" tabindex="-1"></a>: one of the most traded agricultural commodities in the world</span> +<span id="cb523-34"><a href="#cb523-34" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-35"><a href="#cb523-35" aria-hidden="true" tabindex="-1"></a>Milk</span> +<span id="cb523-36"><a href="#cb523-36" aria-hidden="true" tabindex="-1"></a>: white cold drink</span> +<span id="cb523-37"><a href="#cb523-37" aria-hidden="true" tabindex="-1"></a>: nutrient-rich</span> +<span id="cb523-38"><a href="#cb523-38" aria-hidden="true" tabindex="-1"></a>: produced on an industrial scale</span> +<span id="cb523-39"><a href="#cb523-39" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb523-40"><a href="#cb523-40" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-41"><a href="#cb523-41" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> +<span id="cb523-42"><a href="#cb523-42" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> +<span id="cb523-43"><a href="#cb523-43" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb523-44"><a href="#cb523-44" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlBegin</span>{}</span> +<span id="cb523-45"><a href="#cb523-45" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItem</span>#1{<span class="co">%</span></span> +<span id="cb523-46"><a href="#cb523-46" aria-hidden="true" tabindex="-1"></a> . #1 is a</span> +<span id="cb523-47"><a href="#cb523-47" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="co">%</span></span> +<span id="cb523-48"><a href="#cb523-48" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="co">%</span></span> +<span id="cb523-49"><a href="#cb523-49" aria-hidden="true" tabindex="-1"></a> ,</span> +<span id="cb523-50"><a href="#cb523-50" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{, and }<span class="co">%</span></span> +<span id="cb523-51"><a href="#cb523-51" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb523-52"><a href="#cb523-52" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb523-53"><a href="#cb523-53" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb523-54"><a href="#cb523-54" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItemEnd</span>{}</span> +<span id="cb523-55"><a href="#cb523-55" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlDefinitionEnd</span>{}</span> +<span id="cb523-56"><a href="#cb523-56" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlEnd</span>{.}</span> +<span id="cb523-57"><a href="#cb523-57" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-58"><a href="#cb523-58" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb523-59"><a href="#cb523-59" aria-hidden="true" tabindex="-1"></a>This is a loose definition list</span> +<span id="cb523-60"><a href="#cb523-60" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-61"><a href="#cb523-61" aria-hidden="true" tabindex="-1"></a>Coffee</span> +<span id="cb523-62"><a href="#cb523-62" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-63"><a href="#cb523-63" aria-hidden="true" tabindex="-1"></a>: black hot drink</span> +<span id="cb523-64"><a href="#cb523-64" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-65"><a href="#cb523-65" aria-hidden="true" tabindex="-1"></a>: prepared from roasted coffee beans</span> +<span id="cb523-66"><a href="#cb523-66" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-67"><a href="#cb523-67" aria-hidden="true" tabindex="-1"></a>: one of the most traded agricultural commodities in the world</span> +<span id="cb523-68"><a href="#cb523-68" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-69"><a href="#cb523-69" aria-hidden="true" tabindex="-1"></a>Milk</span> +<span id="cb523-70"><a href="#cb523-70" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-71"><a href="#cb523-71" aria-hidden="true" tabindex="-1"></a>: white cold drink</span> +<span id="cb523-72"><a href="#cb523-72" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-73"><a href="#cb523-73" aria-hidden="true" tabindex="-1"></a>: nutrient-rich</span> +<span id="cb523-74"><a href="#cb523-74" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-75"><a href="#cb523-75" aria-hidden="true" tabindex="-1"></a>: produced on an industrial scale</span> +<span id="cb523-76"><a href="#cb523-76" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb523-77"><a href="#cb523-77" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb523-78"><a href="#cb523-78" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb481"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb481-1"><a href="#cb481-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb524"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb524-1"><a href="#cb524-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -8519,94 +9531,94 @@ prepared from roasted coffee beans, and one of the most traded agricultural commodities in the world. Milk is a white cold drink, nutrient-rich, and produced on an industrial scale.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-62"><span +<h5 class="unnumbered" id="latex-example-66"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb482"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb482-1"><a href="#cb482-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb482-2"><a href="#cb482-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[definitionLists, tightLists]{<span class="ex">markdown</span>}</span> -<span id="cb482-3"><a href="#cb482-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb482-4"><a href="#cb482-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb482-5"><a href="#cb482-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{</span> -<span id="cb482-6"><a href="#cb482-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb482-7"><a href="#cb482-7" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {<span class="co">%</span></span> -<span id="cb482-8"><a href="#cb482-8" aria-hidden="true" tabindex="-1"></a> :<span class="co">%</span></span> -<span id="cb482-9"><a href="#cb482-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> -<span id="cb482-10"><a href="#cb482-10" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb482-11"><a href="#cb482-11" aria-hidden="true" tabindex="-1"></a> dlBeginTight = {<span class="kw">\begin</span>{<span class="ex">description</span>}},</span> -<span id="cb482-12"><a href="#cb482-12" aria-hidden="true" tabindex="-1"></a> dlItem = {<span class="co">%</span></span> -<span id="cb482-13"><a href="#cb482-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\item</span>[#1]</span> -<span id="cb482-14"><a href="#cb482-14" aria-hidden="true" tabindex="-1"></a> <span class="kw">\begin</span>{<span class="ex">itemize</span>}</span> -<span id="cb482-15"><a href="#cb482-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{<span class="co">%</span></span> -<span id="cb482-16"><a href="#cb482-16" aria-hidden="true" tabindex="-1"></a> ,</span> -<span id="cb482-17"><a href="#cb482-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{<span class="co">%</span></span> -<span id="cb482-18"><a href="#cb482-18" aria-hidden="true" tabindex="-1"></a> , and</span> -<span id="cb482-19"><a href="#cb482-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{.}<span class="co">%</span></span> -<span id="cb482-20"><a href="#cb482-20" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb482-21"><a href="#cb482-21" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb482-22"><a href="#cb482-22" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb482-23"><a href="#cb482-23" aria-hidden="true" tabindex="-1"></a> dlItemEnd = {<span class="kw">\end</span>{<span class="ex">itemize</span>}},</span> -<span id="cb482-24"><a href="#cb482-24" aria-hidden="true" tabindex="-1"></a> dlDefinitionBegin = <span class="fu">\item</span>,</span> -<span id="cb482-25"><a href="#cb482-25" aria-hidden="true" tabindex="-1"></a> dlEndTight = {<span class="kw">\end</span>{<span class="ex">description</span>}},</span> -<span id="cb482-26"><a href="#cb482-26" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb482-27"><a href="#cb482-27" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb482-28"><a href="#cb482-28" aria-hidden="true" tabindex="-1"></a>This is a tight definition list</span> -<span id="cb482-29"><a href="#cb482-29" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb482-30"><a href="#cb482-30" aria-hidden="true" tabindex="-1"></a>Coffee</span> -<span id="cb482-31"><a href="#cb482-31" aria-hidden="true" tabindex="-1"></a>: black hot drink</span> -<span id="cb482-32"><a href="#cb482-32" aria-hidden="true" tabindex="-1"></a>: prepared from roasted coffee beans</span> -<span id="cb482-33"><a href="#cb482-33" aria-hidden="true" tabindex="-1"></a>: one of the most traded agricultural commodities in the world</span> -<span id="cb482-34"><a href="#cb482-34" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb482-35"><a href="#cb482-35" aria-hidden="true" tabindex="-1"></a>Milk</span> -<span id="cb482-36"><a href="#cb482-36" aria-hidden="true" tabindex="-1"></a>: white cold drink</span> -<span id="cb482-37"><a href="#cb482-37" aria-hidden="true" tabindex="-1"></a>: nutrient-rich</span> -<span id="cb482-38"><a href="#cb482-38" aria-hidden="true" tabindex="-1"></a>: produced on an industrial scale</span> -<span id="cb482-39"><a href="#cb482-39" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb482-40"><a href="#cb482-40" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb482-41"><a href="#cb482-41" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{</span> -<span id="cb482-42"><a href="#cb482-42" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb482-43"><a href="#cb482-43" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {<span class="co">%</span></span> -<span id="cb482-44"><a href="#cb482-44" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> -<span id="cb482-45"><a href="#cb482-45" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb482-46"><a href="#cb482-46" aria-hidden="true" tabindex="-1"></a> dlBegin = {},</span> -<span id="cb482-47"><a href="#cb482-47" aria-hidden="true" tabindex="-1"></a> dlItem = {<span class="co">%</span></span> -<span id="cb482-48"><a href="#cb482-48" aria-hidden="true" tabindex="-1"></a> . #1 is a</span> -<span id="cb482-49"><a href="#cb482-49" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="co">%</span></span> -<span id="cb482-50"><a href="#cb482-50" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="co">%</span></span> -<span id="cb482-51"><a href="#cb482-51" aria-hidden="true" tabindex="-1"></a> ,</span> -<span id="cb482-52"><a href="#cb482-52" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{, and }<span class="co">%</span></span> -<span id="cb482-53"><a href="#cb482-53" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb482-54"><a href="#cb482-54" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb482-55"><a href="#cb482-55" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb482-56"><a href="#cb482-56" aria-hidden="true" tabindex="-1"></a> dlItemEnd = {},</span> -<span id="cb482-57"><a href="#cb482-57" aria-hidden="true" tabindex="-1"></a> dlDefinitionEnd = {},</span> -<span id="cb482-58"><a href="#cb482-58" aria-hidden="true" tabindex="-1"></a> dlEnd = {.},</span> -<span id="cb482-59"><a href="#cb482-59" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb482-60"><a href="#cb482-60" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb482-61"><a href="#cb482-61" aria-hidden="true" tabindex="-1"></a>This is a loose definition list</span> -<span id="cb482-62"><a href="#cb482-62" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb482-63"><a href="#cb482-63" aria-hidden="true" tabindex="-1"></a>Coffee</span> -<span id="cb482-64"><a href="#cb482-64" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb482-65"><a href="#cb482-65" aria-hidden="true" tabindex="-1"></a>: black hot drink</span> -<span id="cb482-66"><a href="#cb482-66" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb482-67"><a href="#cb482-67" aria-hidden="true" tabindex="-1"></a>: prepared from roasted coffee beans</span> -<span id="cb482-68"><a href="#cb482-68" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb482-69"><a href="#cb482-69" aria-hidden="true" tabindex="-1"></a>: one of the most traded agricultural commodities in the world</span> -<span id="cb482-70"><a href="#cb482-70" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb482-71"><a href="#cb482-71" aria-hidden="true" tabindex="-1"></a>Milk</span> -<span id="cb482-72"><a href="#cb482-72" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb482-73"><a href="#cb482-73" aria-hidden="true" tabindex="-1"></a>: white cold drink</span> -<span id="cb482-74"><a href="#cb482-74" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb482-75"><a href="#cb482-75" aria-hidden="true" tabindex="-1"></a>: nutrient-rich</span> -<span id="cb482-76"><a href="#cb482-76" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb482-77"><a href="#cb482-77" aria-hidden="true" tabindex="-1"></a>: produced on an industrial scale</span> -<span id="cb482-78"><a href="#cb482-78" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb482-79"><a href="#cb482-79" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb482-80"><a href="#cb482-80" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb525"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb525-1"><a href="#cb525-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb525-2"><a href="#cb525-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[definitionLists, tightLists]{<span class="ex">markdown</span>}</span> +<span id="cb525-3"><a href="#cb525-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb525-4"><a href="#cb525-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb525-5"><a href="#cb525-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[</span> +<span id="cb525-6"><a href="#cb525-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb525-7"><a href="#cb525-7" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {<span class="co">%</span></span> +<span id="cb525-8"><a href="#cb525-8" aria-hidden="true" tabindex="-1"></a> :<span class="co">%</span></span> +<span id="cb525-9"><a href="#cb525-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> +<span id="cb525-10"><a href="#cb525-10" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb525-11"><a href="#cb525-11" aria-hidden="true" tabindex="-1"></a> dlBeginTight = {<span class="kw">\begin</span>{<span class="ex">description</span>}},</span> +<span id="cb525-12"><a href="#cb525-12" aria-hidden="true" tabindex="-1"></a> dlItem = {<span class="co">%</span></span> +<span id="cb525-13"><a href="#cb525-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\item</span>[#1]</span> +<span id="cb525-14"><a href="#cb525-14" aria-hidden="true" tabindex="-1"></a> <span class="kw">\begin</span>{<span class="ex">itemize</span>}</span> +<span id="cb525-15"><a href="#cb525-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{<span class="co">%</span></span> +<span id="cb525-16"><a href="#cb525-16" aria-hidden="true" tabindex="-1"></a> ,</span> +<span id="cb525-17"><a href="#cb525-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{<span class="co">%</span></span> +<span id="cb525-18"><a href="#cb525-18" aria-hidden="true" tabindex="-1"></a> , and</span> +<span id="cb525-19"><a href="#cb525-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{.}<span class="co">%</span></span> +<span id="cb525-20"><a href="#cb525-20" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb525-21"><a href="#cb525-21" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb525-22"><a href="#cb525-22" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb525-23"><a href="#cb525-23" aria-hidden="true" tabindex="-1"></a> dlItemEnd = {<span class="kw">\end</span>{<span class="ex">itemize</span>}},</span> +<span id="cb525-24"><a href="#cb525-24" aria-hidden="true" tabindex="-1"></a> dlDefinitionBegin = <span class="fu">\item</span>,</span> +<span id="cb525-25"><a href="#cb525-25" aria-hidden="true" tabindex="-1"></a> dlEndTight = {<span class="kw">\end</span>{<span class="ex">description</span>}},</span> +<span id="cb525-26"><a href="#cb525-26" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb525-27"><a href="#cb525-27" aria-hidden="true" tabindex="-1"></a>]</span> +<span id="cb525-28"><a href="#cb525-28" aria-hidden="true" tabindex="-1"></a>This is a tight definition list</span> +<span id="cb525-29"><a href="#cb525-29" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb525-30"><a href="#cb525-30" aria-hidden="true" tabindex="-1"></a>Coffee</span> +<span id="cb525-31"><a href="#cb525-31" aria-hidden="true" tabindex="-1"></a>: black hot drink</span> +<span id="cb525-32"><a href="#cb525-32" aria-hidden="true" tabindex="-1"></a>: prepared from roasted coffee beans</span> +<span id="cb525-33"><a href="#cb525-33" aria-hidden="true" tabindex="-1"></a>: one of the most traded agricultural commodities in the world</span> +<span id="cb525-34"><a href="#cb525-34" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb525-35"><a href="#cb525-35" aria-hidden="true" tabindex="-1"></a>Milk</span> +<span id="cb525-36"><a href="#cb525-36" aria-hidden="true" tabindex="-1"></a>: white cold drink</span> +<span id="cb525-37"><a href="#cb525-37" aria-hidden="true" tabindex="-1"></a>: nutrient-rich</span> +<span id="cb525-38"><a href="#cb525-38" aria-hidden="true" tabindex="-1"></a>: produced on an industrial scale</span> +<span id="cb525-39"><a href="#cb525-39" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb525-40"><a href="#cb525-40" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb525-41"><a href="#cb525-41" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[</span> +<span id="cb525-42"><a href="#cb525-42" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb525-43"><a href="#cb525-43" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {<span class="co">%</span></span> +<span id="cb525-44"><a href="#cb525-44" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> +<span id="cb525-45"><a href="#cb525-45" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb525-46"><a href="#cb525-46" aria-hidden="true" tabindex="-1"></a> dlBegin = {},</span> +<span id="cb525-47"><a href="#cb525-47" aria-hidden="true" tabindex="-1"></a> dlItem = {<span class="co">%</span></span> +<span id="cb525-48"><a href="#cb525-48" aria-hidden="true" tabindex="-1"></a> . #1 is a</span> +<span id="cb525-49"><a href="#cb525-49" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="co">%</span></span> +<span id="cb525-50"><a href="#cb525-50" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="co">%</span></span> +<span id="cb525-51"><a href="#cb525-51" aria-hidden="true" tabindex="-1"></a> ,</span> +<span id="cb525-52"><a href="#cb525-52" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{, and }<span class="co">%</span></span> +<span id="cb525-53"><a href="#cb525-53" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb525-54"><a href="#cb525-54" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb525-55"><a href="#cb525-55" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb525-56"><a href="#cb525-56" aria-hidden="true" tabindex="-1"></a> dlItemEnd = {},</span> +<span id="cb525-57"><a href="#cb525-57" aria-hidden="true" tabindex="-1"></a> dlDefinitionEnd = {},</span> +<span id="cb525-58"><a href="#cb525-58" aria-hidden="true" tabindex="-1"></a> dlEnd = {.},</span> +<span id="cb525-59"><a href="#cb525-59" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb525-60"><a href="#cb525-60" aria-hidden="true" tabindex="-1"></a>]</span> +<span id="cb525-61"><a href="#cb525-61" aria-hidden="true" tabindex="-1"></a>This is a loose definition list</span> +<span id="cb525-62"><a href="#cb525-62" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb525-63"><a href="#cb525-63" aria-hidden="true" tabindex="-1"></a>Coffee</span> +<span id="cb525-64"><a href="#cb525-64" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb525-65"><a href="#cb525-65" aria-hidden="true" tabindex="-1"></a>: black hot drink</span> +<span id="cb525-66"><a href="#cb525-66" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb525-67"><a href="#cb525-67" aria-hidden="true" tabindex="-1"></a>: prepared from roasted coffee beans</span> +<span id="cb525-68"><a href="#cb525-68" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb525-69"><a href="#cb525-69" aria-hidden="true" tabindex="-1"></a>: one of the most traded agricultural commodities in the world</span> +<span id="cb525-70"><a href="#cb525-70" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb525-71"><a href="#cb525-71" aria-hidden="true" tabindex="-1"></a>Milk</span> +<span id="cb525-72"><a href="#cb525-72" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb525-73"><a href="#cb525-73" aria-hidden="true" tabindex="-1"></a>: white cold drink</span> +<span id="cb525-74"><a href="#cb525-74" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb525-75"><a href="#cb525-75" aria-hidden="true" tabindex="-1"></a>: nutrient-rich</span> +<span id="cb525-76"><a href="#cb525-76" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb525-77"><a href="#cb525-77" aria-hidden="true" tabindex="-1"></a>: produced on an industrial scale</span> +<span id="cb525-78"><a href="#cb525-78" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb525-79"><a href="#cb525-79" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb525-80"><a href="#cb525-80" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb483"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb483-1"><a href="#cb483-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb526"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb526-1"><a href="#cb526-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -8628,94 +9640,94 @@ prepared from roasted coffee beans, and one of the most traded agricultural commodities in the world. Milk is a white cold drink, nutrient-rich, and produced on an industrial scale.</p> </blockquote> -<h5 class="unnumbered" id="context-example-40">Con<span +<h5 class="unnumbered" id="context-example-42">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb484"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb484-1"><a href="#cb484-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb484-2"><a href="#cb484-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span></span> -<span id="cb484-3"><a href="#cb484-3" aria-hidden="true" tabindex="-1"></a> [</span> -<span id="cb484-4"><a href="#cb484-4" aria-hidden="true" tabindex="-1"></a> definitionLists = yes,</span> -<span id="cb484-5"><a href="#cb484-5" aria-hidden="true" tabindex="-1"></a> tightLists = yes,</span> -<span id="cb484-6"><a href="#cb484-6" aria-hidden="true" tabindex="-1"></a> ]</span> -<span id="cb484-7"><a href="#cb484-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb484-8"><a href="#cb484-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-9"><a href="#cb484-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> -<span id="cb484-10"><a href="#cb484-10" aria-hidden="true" tabindex="-1"></a> :<span class="co">%</span></span> -<span id="cb484-11"><a href="#cb484-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> -<span id="cb484-12"><a href="#cb484-12" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb484-13"><a href="#cb484-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlBeginTight</span>{}</span> -<span id="cb484-14"><a href="#cb484-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItem</span>#1{<span class="co">%</span></span> -<span id="cb484-15"><a href="#cb484-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span>{<span class="fu">\bf</span>#1}<span class="co">%</span></span> -<span id="cb484-16"><a href="#cb484-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">\startitemize</span></span> -<span id="cb484-17"><a href="#cb484-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{<span class="co">%</span></span> -<span id="cb484-18"><a href="#cb484-18" aria-hidden="true" tabindex="-1"></a> ,</span> -<span id="cb484-19"><a href="#cb484-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{<span class="co">%</span></span> -<span id="cb484-20"><a href="#cb484-20" aria-hidden="true" tabindex="-1"></a> , and</span> -<span id="cb484-21"><a href="#cb484-21" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{.}<span class="co">%</span></span> -<span id="cb484-22"><a href="#cb484-22" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb484-23"><a href="#cb484-23" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb484-24"><a href="#cb484-24" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb484-25"><a href="#cb484-25" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItemEnd</span>{<span class="fu">\stopitemize</span>}</span> -<span id="cb484-26"><a href="#cb484-26" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="fu">\item</span>}</span> -<span id="cb484-27"><a href="#cb484-27" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlEndTight</span>{}</span> -<span id="cb484-28"><a href="#cb484-28" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-29"><a href="#cb484-29" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb484-30"><a href="#cb484-30" aria-hidden="true" tabindex="-1"></a>This is a tight definition list</span> -<span id="cb484-31"><a href="#cb484-31" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-32"><a href="#cb484-32" aria-hidden="true" tabindex="-1"></a>Coffee</span> -<span id="cb484-33"><a href="#cb484-33" aria-hidden="true" tabindex="-1"></a>: black hot drink</span> -<span id="cb484-34"><a href="#cb484-34" aria-hidden="true" tabindex="-1"></a>: prepared from roasted coffee beans</span> -<span id="cb484-35"><a href="#cb484-35" aria-hidden="true" tabindex="-1"></a>: one of the most traded agricultural commodities in the world</span> -<span id="cb484-36"><a href="#cb484-36" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-37"><a href="#cb484-37" aria-hidden="true" tabindex="-1"></a>Milk</span> -<span id="cb484-38"><a href="#cb484-38" aria-hidden="true" tabindex="-1"></a>: white cold drink</span> -<span id="cb484-39"><a href="#cb484-39" aria-hidden="true" tabindex="-1"></a>: nutrient-rich</span> -<span id="cb484-40"><a href="#cb484-40" aria-hidden="true" tabindex="-1"></a>: produced on an industrial scale</span> -<span id="cb484-41"><a href="#cb484-41" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb484-42"><a href="#cb484-42" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-43"><a href="#cb484-43" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> -<span id="cb484-44"><a href="#cb484-44" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> -<span id="cb484-45"><a href="#cb484-45" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb484-46"><a href="#cb484-46" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlBegin</span>{}</span> -<span id="cb484-47"><a href="#cb484-47" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItem</span>#1{<span class="co">%</span></span> -<span id="cb484-48"><a href="#cb484-48" aria-hidden="true" tabindex="-1"></a> . #1 is a</span> -<span id="cb484-49"><a href="#cb484-49" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="co">%</span></span> -<span id="cb484-50"><a href="#cb484-50" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="co">%</span></span> -<span id="cb484-51"><a href="#cb484-51" aria-hidden="true" tabindex="-1"></a> ,</span> -<span id="cb484-52"><a href="#cb484-52" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{, and }<span class="co">%</span></span> -<span id="cb484-53"><a href="#cb484-53" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb484-54"><a href="#cb484-54" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb484-55"><a href="#cb484-55" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb484-56"><a href="#cb484-56" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItemEnd</span>{}</span> -<span id="cb484-57"><a href="#cb484-57" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlDefinitionEnd</span>{}</span> -<span id="cb484-58"><a href="#cb484-58" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlEnd</span>{.}</span> -<span id="cb484-59"><a href="#cb484-59" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-60"><a href="#cb484-60" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb484-61"><a href="#cb484-61" aria-hidden="true" tabindex="-1"></a>This is a loose definition list</span> -<span id="cb484-62"><a href="#cb484-62" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-63"><a href="#cb484-63" aria-hidden="true" tabindex="-1"></a>Coffee</span> -<span id="cb484-64"><a href="#cb484-64" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-65"><a href="#cb484-65" aria-hidden="true" tabindex="-1"></a>: black hot drink</span> -<span id="cb484-66"><a href="#cb484-66" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-67"><a href="#cb484-67" aria-hidden="true" tabindex="-1"></a>: prepared from roasted coffee beans</span> -<span id="cb484-68"><a href="#cb484-68" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-69"><a href="#cb484-69" aria-hidden="true" tabindex="-1"></a>: one of the most traded agricultural commodities in the world</span> -<span id="cb484-70"><a href="#cb484-70" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-71"><a href="#cb484-71" aria-hidden="true" tabindex="-1"></a>Milk</span> -<span id="cb484-72"><a href="#cb484-72" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-73"><a href="#cb484-73" aria-hidden="true" tabindex="-1"></a>: white cold drink</span> -<span id="cb484-74"><a href="#cb484-74" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-75"><a href="#cb484-75" aria-hidden="true" tabindex="-1"></a>: nutrient-rich</span> -<span id="cb484-76"><a href="#cb484-76" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-77"><a href="#cb484-77" aria-hidden="true" tabindex="-1"></a>: produced on an industrial scale</span> -<span id="cb484-78"><a href="#cb484-78" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb484-79"><a href="#cb484-79" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb484-80"><a href="#cb484-80" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb527"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb527-1"><a href="#cb527-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb527-2"><a href="#cb527-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span></span> +<span id="cb527-3"><a href="#cb527-3" aria-hidden="true" tabindex="-1"></a> [</span> +<span id="cb527-4"><a href="#cb527-4" aria-hidden="true" tabindex="-1"></a> definitionLists = yes,</span> +<span id="cb527-5"><a href="#cb527-5" aria-hidden="true" tabindex="-1"></a> tightLists = yes,</span> +<span id="cb527-6"><a href="#cb527-6" aria-hidden="true" tabindex="-1"></a> ]</span> +<span id="cb527-7"><a href="#cb527-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb527-8"><a href="#cb527-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-9"><a href="#cb527-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> +<span id="cb527-10"><a href="#cb527-10" aria-hidden="true" tabindex="-1"></a> :<span class="co">%</span></span> +<span id="cb527-11"><a href="#cb527-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> +<span id="cb527-12"><a href="#cb527-12" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb527-13"><a href="#cb527-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlBeginTight</span>{}</span> +<span id="cb527-14"><a href="#cb527-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItem</span>#1{<span class="co">%</span></span> +<span id="cb527-15"><a href="#cb527-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span>{<span class="fu">\bf</span>#1}<span class="co">%</span></span> +<span id="cb527-16"><a href="#cb527-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">\startitemize</span></span> +<span id="cb527-17"><a href="#cb527-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{<span class="co">%</span></span> +<span id="cb527-18"><a href="#cb527-18" aria-hidden="true" tabindex="-1"></a> ,</span> +<span id="cb527-19"><a href="#cb527-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{<span class="co">%</span></span> +<span id="cb527-20"><a href="#cb527-20" aria-hidden="true" tabindex="-1"></a> , and</span> +<span id="cb527-21"><a href="#cb527-21" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionEnd</span>{.}<span class="co">%</span></span> +<span id="cb527-22"><a href="#cb527-22" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb527-23"><a href="#cb527-23" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb527-24"><a href="#cb527-24" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb527-25"><a href="#cb527-25" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItemEnd</span>{<span class="fu">\stopitemize</span>}</span> +<span id="cb527-26"><a href="#cb527-26" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="fu">\item</span>}</span> +<span id="cb527-27"><a href="#cb527-27" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlEndTight</span>{}</span> +<span id="cb527-28"><a href="#cb527-28" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-29"><a href="#cb527-29" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb527-30"><a href="#cb527-30" aria-hidden="true" tabindex="-1"></a>This is a tight definition list</span> +<span id="cb527-31"><a href="#cb527-31" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-32"><a href="#cb527-32" aria-hidden="true" tabindex="-1"></a>Coffee</span> +<span id="cb527-33"><a href="#cb527-33" aria-hidden="true" tabindex="-1"></a>: black hot drink</span> +<span id="cb527-34"><a href="#cb527-34" aria-hidden="true" tabindex="-1"></a>: prepared from roasted coffee beans</span> +<span id="cb527-35"><a href="#cb527-35" aria-hidden="true" tabindex="-1"></a>: one of the most traded agricultural commodities in the world</span> +<span id="cb527-36"><a href="#cb527-36" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-37"><a href="#cb527-37" aria-hidden="true" tabindex="-1"></a>Milk</span> +<span id="cb527-38"><a href="#cb527-38" aria-hidden="true" tabindex="-1"></a>: white cold drink</span> +<span id="cb527-39"><a href="#cb527-39" aria-hidden="true" tabindex="-1"></a>: nutrient-rich</span> +<span id="cb527-40"><a href="#cb527-40" aria-hidden="true" tabindex="-1"></a>: produced on an industrial scale</span> +<span id="cb527-41"><a href="#cb527-41" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb527-42"><a href="#cb527-42" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-43"><a href="#cb527-43" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> +<span id="cb527-44"><a href="#cb527-44" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> +<span id="cb527-45"><a href="#cb527-45" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb527-46"><a href="#cb527-46" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlBegin</span>{}</span> +<span id="cb527-47"><a href="#cb527-47" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItem</span>#1{<span class="co">%</span></span> +<span id="cb527-48"><a href="#cb527-48" aria-hidden="true" tabindex="-1"></a> . #1 is a</span> +<span id="cb527-49"><a href="#cb527-49" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="co">%</span></span> +<span id="cb527-50"><a href="#cb527-50" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{<span class="co">%</span></span> +<span id="cb527-51"><a href="#cb527-51" aria-hidden="true" tabindex="-1"></a> ,</span> +<span id="cb527-52"><a href="#cb527-52" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererDlDefinitionBegin</span>{, and }<span class="co">%</span></span> +<span id="cb527-53"><a href="#cb527-53" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb527-54"><a href="#cb527-54" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb527-55"><a href="#cb527-55" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb527-56"><a href="#cb527-56" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlItemEnd</span>{}</span> +<span id="cb527-57"><a href="#cb527-57" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlDefinitionEnd</span>{}</span> +<span id="cb527-58"><a href="#cb527-58" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDlEnd</span>{.}</span> +<span id="cb527-59"><a href="#cb527-59" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-60"><a href="#cb527-60" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb527-61"><a href="#cb527-61" aria-hidden="true" tabindex="-1"></a>This is a loose definition list</span> +<span id="cb527-62"><a href="#cb527-62" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-63"><a href="#cb527-63" aria-hidden="true" tabindex="-1"></a>Coffee</span> +<span id="cb527-64"><a href="#cb527-64" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-65"><a href="#cb527-65" aria-hidden="true" tabindex="-1"></a>: black hot drink</span> +<span id="cb527-66"><a href="#cb527-66" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-67"><a href="#cb527-67" aria-hidden="true" tabindex="-1"></a>: prepared from roasted coffee beans</span> +<span id="cb527-68"><a href="#cb527-68" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-69"><a href="#cb527-69" aria-hidden="true" tabindex="-1"></a>: one of the most traded agricultural commodities in the world</span> +<span id="cb527-70"><a href="#cb527-70" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-71"><a href="#cb527-71" aria-hidden="true" tabindex="-1"></a>Milk</span> +<span id="cb527-72"><a href="#cb527-72" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-73"><a href="#cb527-73" aria-hidden="true" tabindex="-1"></a>: white cold drink</span> +<span id="cb527-74"><a href="#cb527-74" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-75"><a href="#cb527-75" aria-hidden="true" tabindex="-1"></a>: nutrient-rich</span> +<span id="cb527-76"><a href="#cb527-76" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-77"><a href="#cb527-77" aria-hidden="true" tabindex="-1"></a>: produced on an industrial scale</span> +<span id="cb527-78"><a href="#cb527-78" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb527-79"><a href="#cb527-79" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb527-80"><a href="#cb527-80" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb485"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb485-1"><a href="#cb485-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb528"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb528-1"><a href="#cb528-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -8737,73 +9749,73 @@ prepared from roasted coffee beans, and one of the most traded agricultural commodities in the world. Milk is a white cold drink, nutrient-rich, and produced on an industrial scale.</p> </blockquote> -<h4 data-number="2.3.1.10" id="ellipsis-renderer"><span -class="header-section-number">2.3.1.10</span> Ellipsis Renderer</h4> +<h4 data-number="2.3.1.11" id="ellipsis-renderer"><span +class="header-section-number">2.3.1.11</span> Ellipsis Renderer</h4> <p>The <code>\markdownRendererEllipsis</code> macro replaces any occurance of ASCII ellipses in the input text. This macro will only be produced, when the <strong><code>smartEllipses</code></strong> option is enabled. The macro receives no arguments.</p> -<h5 class="unnumbered" id="plain-tex-example-27">Plain <span +<h5 class="unnumbered" id="plain-tex-example-30">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb486"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb486-1"><a href="#cb486-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb486-2"><a href="#cb486-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionSmartEllipses</span>{true}</span> -<span id="cb486-3"><a href="#cb486-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEllipsis</span>{{<span class="fu">\it</span> SHAZAM}!}</span> -<span id="cb486-4"><a href="#cb486-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb486-5"><a href="#cb486-5" aria-hidden="true" tabindex="-1"></a>The secret word is ...</span> -<span id="cb486-6"><a href="#cb486-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb486-7"><a href="#cb486-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb529"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb529-1"><a href="#cb529-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb529-2"><a href="#cb529-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionSmartEllipses</span>{true}</span> +<span id="cb529-3"><a href="#cb529-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEllipsis</span>{{<span class="fu">\it</span> SHAZAM}!}</span> +<span id="cb529-4"><a href="#cb529-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb529-5"><a href="#cb529-5" aria-hidden="true" tabindex="-1"></a>The secret word is ...</span> +<span id="cb529-6"><a href="#cb529-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb529-7"><a href="#cb529-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb487"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb487-1"><a href="#cb487-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb530"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb530-1"><a href="#cb530-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>The secret word is <em>SHAZAM</em>!</p> </blockquote> -<h5 class="unnumbered" id="latex-example-63"><span +<h5 class="unnumbered" id="latex-example-67"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb488"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb488-1"><a href="#cb488-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb488-2"><a href="#cb488-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[smartEllipses]{<span class="ex">markdown</span>}</span> -<span id="cb488-3"><a href="#cb488-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb488-4"><a href="#cb488-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb488-5"><a href="#cb488-5" aria-hidden="true" tabindex="-1"></a> ellipsis = <span class="fu">\emph</span>{SHAZAM}!,</span> -<span id="cb488-6"><a href="#cb488-6" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb488-7"><a href="#cb488-7" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb488-8"><a href="#cb488-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb488-9"><a href="#cb488-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb488-10"><a href="#cb488-10" aria-hidden="true" tabindex="-1"></a>The secret word is ...</span> -<span id="cb488-11"><a href="#cb488-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb488-12"><a href="#cb488-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb531"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb531-1"><a href="#cb531-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb531-2"><a href="#cb531-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[smartEllipses]{<span class="ex">markdown</span>}</span> +<span id="cb531-3"><a href="#cb531-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb531-4"><a href="#cb531-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb531-5"><a href="#cb531-5" aria-hidden="true" tabindex="-1"></a> ellipsis = <span class="fu">\emph</span>{SHAZAM}!,</span> +<span id="cb531-6"><a href="#cb531-6" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb531-7"><a href="#cb531-7" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb531-8"><a href="#cb531-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb531-9"><a href="#cb531-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb531-10"><a href="#cb531-10" aria-hidden="true" tabindex="-1"></a>The secret word is ...</span> +<span id="cb531-11"><a href="#cb531-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb531-12"><a href="#cb531-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb489"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb489-1"><a href="#cb489-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb532"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb532-1"><a href="#cb532-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>The secret word is <em>SHAZAM</em>!</p> </blockquote> -<h5 class="unnumbered" id="context-example-41">Con<span +<h5 class="unnumbered" id="context-example-43">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb490"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb490-1"><a href="#cb490-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb490-2"><a href="#cb490-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[smartEllipses = yes]</span> -<span id="cb490-3"><a href="#cb490-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEllipsis</span>{<span class="fu">\emph</span>{SHAZAM}!}</span> -<span id="cb490-4"><a href="#cb490-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb490-5"><a href="#cb490-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb490-6"><a href="#cb490-6" aria-hidden="true" tabindex="-1"></a>The secret word is ...</span> -<span id="cb490-7"><a href="#cb490-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb490-8"><a href="#cb490-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb533"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb533-1"><a href="#cb533-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb533-2"><a href="#cb533-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[smartEllipses = yes]</span> +<span id="cb533-3"><a href="#cb533-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEllipsis</span>{<span class="fu">\emph</span>{SHAZAM}!}</span> +<span id="cb533-4"><a href="#cb533-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb533-5"><a href="#cb533-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb533-6"><a href="#cb533-6" aria-hidden="true" tabindex="-1"></a>The secret word is ...</span> +<span id="cb533-7"><a href="#cb533-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb533-8"><a href="#cb533-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb491"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb491-1"><a href="#cb491-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb534"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb534-1"><a href="#cb534-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -8811,93 +9823,93 @@ contain the following text:</p> <p><em>(The end of a block)</em></p> <p><em>Foo</em> bar!</p> </blockquote> -<h4 data-number="2.3.1.11" id="emphasis-renderers"><span -class="header-section-number">2.3.1.11</span> Emphasis Renderers</h4> +<h4 data-number="2.3.1.12" id="emphasis-renderers"><span +class="header-section-number">2.3.1.12</span> Emphasis Renderers</h4> <p>The <code>\markdownRendererEmphasis</code> macro represents an emphasized span of text. The macro receives a single argument that corresponds to the emphasized span of text.</p> -<h5 class="unnumbered" id="plain-tex-example-28">Plain <span +<p>The <code>\markdownRendererStrongEmphasis</code> macro represents a +strongly emphasized span of text. The macro receives a single argument +that corresponds to the emphasized span of text.</p> +<h5 class="unnumbered" id="plain-tex-example-31">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb492"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb492-1"><a href="#cb492-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb492-2"><a href="#cb492-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEmphasis</span>#1{{<span class="fu">\it</span>#1}}</span> -<span id="cb492-3"><a href="#cb492-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererStrongEmphasis</span>#1{{<span class="fu">\bf</span>#1}}</span> -<span id="cb492-4"><a href="#cb492-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb492-5"><a href="#cb492-5" aria-hidden="true" tabindex="-1"></a>This is *emphasis*.</span> -<span id="cb492-6"><a href="#cb492-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb492-7"><a href="#cb492-7" aria-hidden="true" tabindex="-1"></a>This is **strong emphasis**.</span> -<span id="cb492-8"><a href="#cb492-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb492-9"><a href="#cb492-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb535"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb535-1"><a href="#cb535-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb535-2"><a href="#cb535-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEmphasis</span>#1{{<span class="fu">\it</span>#1}}</span> +<span id="cb535-3"><a href="#cb535-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererStrongEmphasis</span>#1{{<span class="fu">\bf</span>#1}}</span> +<span id="cb535-4"><a href="#cb535-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb535-5"><a href="#cb535-5" aria-hidden="true" tabindex="-1"></a>This is *emphasis*.</span> +<span id="cb535-6"><a href="#cb535-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb535-7"><a href="#cb535-7" aria-hidden="true" tabindex="-1"></a>This is **strong emphasis**.</span> +<span id="cb535-8"><a href="#cb535-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb535-9"><a href="#cb535-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb493"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb493-1"><a href="#cb493-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb536"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb536-1"><a href="#cb536-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>This is <em>emphasis</em>.</p> <p>This is <strong>strong emphasis</strong>.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-64"><span +<h5 class="unnumbered" id="latex-example-68"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb494"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb494-1"><a href="#cb494-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb494-2"><a href="#cb494-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb494-3"><a href="#cb494-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb494-4"><a href="#cb494-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb494-5"><a href="#cb494-5" aria-hidden="true" tabindex="-1"></a> emphasis = {<span class="fu">\emph</span>{#1}},</span> -<span id="cb494-6"><a href="#cb494-6" aria-hidden="true" tabindex="-1"></a> strongEmphasis = {<span class="fu">\textbf</span>{#1}},</span> -<span id="cb494-7"><a href="#cb494-7" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb494-8"><a href="#cb494-8" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb494-9"><a href="#cb494-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb494-10"><a href="#cb494-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb494-11"><a href="#cb494-11" aria-hidden="true" tabindex="-1"></a>This is *emphasis*.</span> -<span id="cb494-12"><a href="#cb494-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb494-13"><a href="#cb494-13" aria-hidden="true" tabindex="-1"></a>This is **strong emphasis**.</span> -<span id="cb494-14"><a href="#cb494-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb494-15"><a href="#cb494-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb537"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb537-1"><a href="#cb537-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb537-2"><a href="#cb537-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb537-3"><a href="#cb537-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb537-4"><a href="#cb537-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb537-5"><a href="#cb537-5" aria-hidden="true" tabindex="-1"></a> emphasis = {<span class="fu">\emph</span>{#1}},</span> +<span id="cb537-6"><a href="#cb537-6" aria-hidden="true" tabindex="-1"></a> strongEmphasis = {<span class="fu">\textbf</span>{#1}},</span> +<span id="cb537-7"><a href="#cb537-7" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb537-8"><a href="#cb537-8" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb537-9"><a href="#cb537-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb537-10"><a href="#cb537-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb537-11"><a href="#cb537-11" aria-hidden="true" tabindex="-1"></a>This is *emphasis*.</span> +<span id="cb537-12"><a href="#cb537-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb537-13"><a href="#cb537-13" aria-hidden="true" tabindex="-1"></a>This is **strong emphasis**.</span> +<span id="cb537-14"><a href="#cb537-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb537-15"><a href="#cb537-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb495"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb495-1"><a href="#cb495-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb538"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb538-1"><a href="#cb538-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>This is <em>emphasis</em>.</p> <p>This is <strong>strong emphasis</strong>.</p> </blockquote> -<h5 class="unnumbered" id="context-example-42">Con<span +<h5 class="unnumbered" id="context-example-44">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb496"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb496-1"><a href="#cb496-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb496-2"><a href="#cb496-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEmphasis</span>#1{<span class="fu">\emph</span>{#1}}</span> -<span id="cb496-3"><a href="#cb496-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererStrongEmphasis</span>#1{<span class="fu">\bold</span>{#1}}</span> -<span id="cb496-4"><a href="#cb496-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb496-5"><a href="#cb496-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb496-6"><a href="#cb496-6" aria-hidden="true" tabindex="-1"></a>This is *emphasis*.</span> -<span id="cb496-7"><a href="#cb496-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb496-8"><a href="#cb496-8" aria-hidden="true" tabindex="-1"></a>This is **strong emphasis**.</span> -<span id="cb496-9"><a href="#cb496-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb496-10"><a href="#cb496-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb539"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb539-1"><a href="#cb539-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb539-2"><a href="#cb539-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererEmphasis</span>#1{<span class="fu">\emph</span>{#1}}</span> +<span id="cb539-3"><a href="#cb539-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererStrongEmphasis</span>#1{<span class="fu">\bold</span>{#1}}</span> +<span id="cb539-4"><a href="#cb539-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb539-5"><a href="#cb539-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb539-6"><a href="#cb539-6" aria-hidden="true" tabindex="-1"></a>This is *emphasis*.</span> +<span id="cb539-7"><a href="#cb539-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb539-8"><a href="#cb539-8" aria-hidden="true" tabindex="-1"></a>This is **strong emphasis**.</span> +<span id="cb539-9"><a href="#cb539-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb539-10"><a href="#cb539-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb497"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb497-1"><a href="#cb497-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb540"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb540-1"><a href="#cb540-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>This is <em>emphasis</em>.</p> <p>This is <strong>strong emphasis</strong>.</p> </blockquote> -<p>The <code>\markdownRendererStrongEmphasis</code> macro represents a -strongly emphasized span of text. The macro receives a single argument -that corresponds to the emphasized span of text.</p> -<h4 data-number="2.3.1.12" +<h4 data-number="2.3.1.13" id="fenced-code-attribute-context-renderers"><span -class="header-section-number">2.3.1.12</span> Fenced Code Attribute +class="header-section-number">2.3.1.13</span> Fenced Code Attribute Context Renderers</h4> <p>The following macros are only produced, when the <strong><code>fencedCode</code></strong> option is enabled.</p> @@ -8905,107 +9917,109 @@ Context Renderers</h4> <code>\markdownRendererFencedCodeAttributeContextEnd</code> macros represent the beginning and the end of a context in which the attributes of a fenced code apply. The macros receive no arguments.</p> -<h5 class="unnumbered" id="latex-example-65"><span +<h5 class="unnumbered" id="latex-example-69"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb498"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb498-1"><a href="#cb498-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb498-2"><a href="#cb498-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedCode,</span> -<span id="cb498-3"><a href="#cb498-3" aria-hidden="true" tabindex="-1"></a> fencedCodeAttributes]{<span class="ex">markdown</span>}</span> -<span id="cb498-4"><a href="#cb498-4" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</span> -<span id="cb498-5"><a href="#cb498-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb498-6"><a href="#cb498-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb498-7"><a href="#cb498-7" aria-hidden="true" tabindex="-1"></a> fencedCodeAttributeContextBegin = {<span class="co">%</span></span> -<span id="cb498-8"><a href="#cb498-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\begingroup</span></span> -<span id="cb498-9"><a href="#cb498-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{</span> -<span id="cb498-10"><a href="#cb498-10" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb498-11"><a href="#cb498-11" aria-hidden="true" tabindex="-1"></a> attributeKeyValue = {<span class="co">%</span></span> -<span id="cb498-12"><a href="#cb498-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\setminted</span>{{#1} = {#2}}<span class="co">%</span></span> -<span id="cb498-13"><a href="#cb498-13" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb498-14"><a href="#cb498-14" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb498-15"><a href="#cb498-15" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> -<span id="cb498-16"><a href="#cb498-16" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb498-17"><a href="#cb498-17" aria-hidden="true" tabindex="-1"></a> fencedCodeAttributeContextEnd = {<span class="co">%</span></span> -<span id="cb498-18"><a href="#cb498-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">\endgroup</span></span> -<span id="cb498-19"><a href="#cb498-19" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb498-20"><a href="#cb498-20" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb498-21"><a href="#cb498-21" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb498-22"><a href="#cb498-22" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb498-23"><a href="#cb498-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb498-24"><a href="#cb498-24" aria-hidden="true" tabindex="-1"></a>~~~ js {linenos=true}</span> -<span id="cb498-25"><a href="#cb498-25" aria-hidden="true" tabindex="-1"></a>if (a > 3) {</span> -<span id="cb498-26"><a href="#cb498-26" aria-hidden="true" tabindex="-1"></a> moveShip(5 * gravity, DOWN);</span> -<span id="cb498-27"><a href="#cb498-27" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb498-28"><a href="#cb498-28" aria-hidden="true" tabindex="-1"></a>~~~~~~</span> -<span id="cb498-29"><a href="#cb498-29" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb498-30"><a href="#cb498-30" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb541"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb541-1"><a href="#cb541-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb541-2"><a href="#cb541-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedCode,</span> +<span id="cb541-3"><a href="#cb541-3" aria-hidden="true" tabindex="-1"></a> fencedCodeAttributes]{<span class="ex">markdown</span>}</span> +<span id="cb541-4"><a href="#cb541-4" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">minted</span>}</span> +<span id="cb541-5"><a href="#cb541-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb541-6"><a href="#cb541-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb541-7"><a href="#cb541-7" aria-hidden="true" tabindex="-1"></a> fencedCodeAttributeContextBegin = {<span class="co">%</span></span> +<span id="cb541-8"><a href="#cb541-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\begingroup</span></span> +<span id="cb541-9"><a href="#cb541-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{</span> +<span id="cb541-10"><a href="#cb541-10" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb541-11"><a href="#cb541-11" aria-hidden="true" tabindex="-1"></a> attributeKeyValue = {<span class="co">%</span></span> +<span id="cb541-12"><a href="#cb541-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\setminted</span>{{#1} = {#2}}<span class="co">%</span></span> +<span id="cb541-13"><a href="#cb541-13" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb541-14"><a href="#cb541-14" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb541-15"><a href="#cb541-15" aria-hidden="true" tabindex="-1"></a> }<span class="co">%</span></span> +<span id="cb541-16"><a href="#cb541-16" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb541-17"><a href="#cb541-17" aria-hidden="true" tabindex="-1"></a> fencedCodeAttributeContextEnd = {<span class="co">%</span></span> +<span id="cb541-18"><a href="#cb541-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">\endgroup</span></span> +<span id="cb541-19"><a href="#cb541-19" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb541-20"><a href="#cb541-20" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb541-21"><a href="#cb541-21" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb541-22"><a href="#cb541-22" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb541-23"><a href="#cb541-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb541-24"><a href="#cb541-24" aria-hidden="true" tabindex="-1"></a>~~~ js {linenos=true}</span> +<span id="cb541-25"><a href="#cb541-25" aria-hidden="true" tabindex="-1"></a>if (a > 3) {</span> +<span id="cb541-26"><a href="#cb541-26" aria-hidden="true" tabindex="-1"></a> moveShip(5 * gravity, DOWN);</span> +<span id="cb541-27"><a href="#cb541-27" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb541-28"><a href="#cb541-28" aria-hidden="true" tabindex="-1"></a>~~~~~~</span> +<span id="cb541-29"><a href="#cb541-29" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb541-30"><a href="#cb541-30" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb499"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb499-1"><a href="#cb499-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb542"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb542-1"><a href="#cb542-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> -<p>``` js {.linenos} 1. if (a > 3) { 2. moveShip(5 * gravity, DOWN); -3. } ``````</p> +<div class="sourceCode" id="cb543"><pre +class="sourceCode js linenos"><code class="sourceCode javascript"><span id="cb543-1"><a href="#cb543-1" aria-hidden="true" tabindex="-1"></a><span class="fl">1.</span> <span class="cf">if</span> (a <span class="op">></span> <span class="dv">3</span>) {</span> +<span id="cb543-2"><a href="#cb543-2" aria-hidden="true" tabindex="-1"></a><span class="fl">2.</span> <span class="fu">moveShip</span>(<span class="dv">5</span> <span class="op">*</span> gravity<span class="op">,</span> DOWN)<span class="op">;</span></span> +<span id="cb543-3"><a href="#cb543-3" aria-hidden="true" tabindex="-1"></a><span class="fl">3.</span> }</span></code></pre></div> </blockquote> -<h4 data-number="2.3.1.13" +<h4 data-number="2.3.1.14" id="fenced-div-attribute-context-renderers"><span -class="header-section-number">2.3.1.13</span> Fenced Div Attribute +class="header-section-number">2.3.1.14</span> Fenced Div Attribute Context Renderers</h4> <p>The following macros are only produced, when the <strong><code>fencedDiv</code></strong> option is enabled.</p> <p>The <code>\markdownRendererFencedDivAttributeContextBegin</code> and <code>\markdownRendererFencedDivAttributeContextEnd</code> macros -represent the beginning and the end of a div in which the attributes of -the div apply. The macros receive no arguments.</p> -<h5 class="unnumbered" id="latex-example-66"><span +represent the beginning and the end of a context in which the attributes +of a div apply. The macros receive no arguments.</p> +<h5 class="unnumbered" id="latex-example-70"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb500"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb500-1"><a href="#cb500-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb500-2"><a href="#cb500-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedDivs]{<span class="ex">markdown</span>}</span> -<span id="cb500-3"><a href="#cb500-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb500-4"><a href="#cb500-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb500-5"><a href="#cb500-5" aria-hidden="true" tabindex="-1"></a> fencedDivAttributeContextBegin = {<span class="co">%</span></span> -<span id="cb500-6"><a href="#cb500-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb500-7"><a href="#cb500-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The beginning of a fenced div attribute context)}</span> -<span id="cb500-8"><a href="#cb500-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb500-9"><a href="#cb500-9" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb500-10"><a href="#cb500-10" aria-hidden="true" tabindex="-1"></a> fencedDivAttributeContextEnd = {<span class="co">%</span></span> -<span id="cb500-11"><a href="#cb500-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb500-12"><a href="#cb500-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The end of a fenced div attribute context)}</span> -<span id="cb500-13"><a href="#cb500-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb500-14"><a href="#cb500-14" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb500-15"><a href="#cb500-15" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb500-16"><a href="#cb500-16" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb500-17"><a href="#cb500-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb500-18"><a href="#cb500-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb500-19"><a href="#cb500-19" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb500-20"><a href="#cb500-20" aria-hidden="true" tabindex="-1"></a>::: {key=value}</span> -<span id="cb500-21"><a href="#cb500-21" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb500-22"><a href="#cb500-22" aria-hidden="true" tabindex="-1"></a>foo</span> -<span id="cb500-23"><a href="#cb500-23" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb500-24"><a href="#cb500-24" aria-hidden="true" tabindex="-1"></a>:::: {#identifier}</span> -<span id="cb500-25"><a href="#cb500-25" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb500-26"><a href="#cb500-26" aria-hidden="true" tabindex="-1"></a>bar</span> -<span id="cb500-27"><a href="#cb500-27" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb500-28"><a href="#cb500-28" aria-hidden="true" tabindex="-1"></a>::::</span> -<span id="cb500-29"><a href="#cb500-29" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb500-30"><a href="#cb500-30" aria-hidden="true" tabindex="-1"></a>:::</span> -<span id="cb500-31"><a href="#cb500-31" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb500-32"><a href="#cb500-32" aria-hidden="true" tabindex="-1"></a>::: {.class_name}</span> -<span id="cb500-33"><a href="#cb500-33" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb500-34"><a href="#cb500-34" aria-hidden="true" tabindex="-1"></a>baz</span> -<span id="cb500-35"><a href="#cb500-35" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb500-36"><a href="#cb500-36" aria-hidden="true" tabindex="-1"></a>:::</span> -<span id="cb500-37"><a href="#cb500-37" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb500-38"><a href="#cb500-38" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb500-39"><a href="#cb500-39" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb544"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb544-1"><a href="#cb544-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb544-2"><a href="#cb544-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[fencedDivs]{<span class="ex">markdown</span>}</span> +<span id="cb544-3"><a href="#cb544-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb544-4"><a href="#cb544-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb544-5"><a href="#cb544-5" aria-hidden="true" tabindex="-1"></a> fencedDivAttributeContextBegin = {<span class="co">%</span></span> +<span id="cb544-6"><a href="#cb544-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb544-7"><a href="#cb544-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The beginning of a fenced div attribute context)}</span> +<span id="cb544-8"><a href="#cb544-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb544-9"><a href="#cb544-9" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb544-10"><a href="#cb544-10" aria-hidden="true" tabindex="-1"></a> fencedDivAttributeContextEnd = {<span class="co">%</span></span> +<span id="cb544-11"><a href="#cb544-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb544-12"><a href="#cb544-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The end of a fenced div attribute context)}</span> +<span id="cb544-13"><a href="#cb544-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb544-14"><a href="#cb544-14" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb544-15"><a href="#cb544-15" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb544-16"><a href="#cb544-16" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb544-17"><a href="#cb544-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb544-18"><a href="#cb544-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb544-19"><a href="#cb544-19" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb544-20"><a href="#cb544-20" aria-hidden="true" tabindex="-1"></a>::: {key=value}</span> +<span id="cb544-21"><a href="#cb544-21" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb544-22"><a href="#cb544-22" aria-hidden="true" tabindex="-1"></a>foo</span> +<span id="cb544-23"><a href="#cb544-23" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb544-24"><a href="#cb544-24" aria-hidden="true" tabindex="-1"></a>:::: {#identifier}</span> +<span id="cb544-25"><a href="#cb544-25" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb544-26"><a href="#cb544-26" aria-hidden="true" tabindex="-1"></a>bar</span> +<span id="cb544-27"><a href="#cb544-27" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb544-28"><a href="#cb544-28" aria-hidden="true" tabindex="-1"></a>::::</span> +<span id="cb544-29"><a href="#cb544-29" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb544-30"><a href="#cb544-30" aria-hidden="true" tabindex="-1"></a>:::</span> +<span id="cb544-31"><a href="#cb544-31" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb544-32"><a href="#cb544-32" aria-hidden="true" tabindex="-1"></a>::: {.class_name}</span> +<span id="cb544-33"><a href="#cb544-33" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb544-34"><a href="#cb544-34" aria-hidden="true" tabindex="-1"></a>baz</span> +<span id="cb544-35"><a href="#cb544-35" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb544-36"><a href="#cb544-36" aria-hidden="true" tabindex="-1"></a>:::</span> +<span id="cb544-37"><a href="#cb544-37" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb544-38"><a href="#cb544-38" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb544-39"><a href="#cb544-39" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb501"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb501-1"><a href="#cb501-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb545"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb545-1"><a href="#cb545-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -9019,50 +10033,52 @@ contain the following text:</p> <p>baz</p> <p><em>(The end of a fenced div attribute context)</em></p> </blockquote> -<h4 data-number="2.3.1.14" id="header-attribute-context-renderers"><span -class="header-section-number">2.3.1.14</span> Header Attribute Context +<h4 data-number="2.3.1.15" id="header-attribute-context-renderers"><span +class="header-section-number">2.3.1.15</span> Header Attribute Context Renderers</h4> <p>The following macros are only produced, when the -<strong><code>headerAttributes</code></strong> option is enabled.</p> +<strong><code>autoIdentifiers</code></strong>, +<strong><code>gfmAutoIdentifiers</code></strong>, or +<strong><code>headerAttributes</code></strong> options are enabled.</p> <p>The <code>\markdownRendererHeaderAttributeContextBegin</code> and <code>\markdownRendererHeaderAttributeContextEnd</code> macros represent -the beginning and the end of a section in which the attributes of a +the beginning and the end of a context in which the attributes of a heading apply. The macros receive no arguments.</p> -<h5 class="unnumbered" id="latex-example-67"><span +<h5 class="unnumbered" id="latex-example-71"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb502"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb502-1"><a href="#cb502-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb502-2"><a href="#cb502-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[headerAttributes]{<span class="ex">markdown</span>}</span> -<span id="cb502-3"><a href="#cb502-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb502-4"><a href="#cb502-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb502-5"><a href="#cb502-5" aria-hidden="true" tabindex="-1"></a> headerAttributeContextBegin = {<span class="co">%</span></span> -<span id="cb502-6"><a href="#cb502-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb502-7"><a href="#cb502-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The beginning of a header attribute context)}</span> -<span id="cb502-8"><a href="#cb502-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb502-9"><a href="#cb502-9" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb502-10"><a href="#cb502-10" aria-hidden="true" tabindex="-1"></a> headerAttributeContextEnd = {<span class="co">%</span></span> -<span id="cb502-11"><a href="#cb502-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb502-12"><a href="#cb502-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The end of a header attribute context)}</span> -<span id="cb502-13"><a href="#cb502-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb502-14"><a href="#cb502-14" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb502-15"><a href="#cb502-15" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb502-16"><a href="#cb502-16" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb502-17"><a href="#cb502-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb502-18"><a href="#cb502-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb502-19"><a href="#cb502-19" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb502-20"><a href="#cb502-20" aria-hidden="true" tabindex="-1"></a># First top-level heading</span> -<span id="cb502-21"><a href="#cb502-21" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb502-22"><a href="#cb502-22" aria-hidden="true" tabindex="-1"></a>## A subheading {#identifier}</span> -<span id="cb502-23"><a href="#cb502-23" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb502-24"><a href="#cb502-24" aria-hidden="true" tabindex="-1"></a># Second top-level heading {.class_name}</span> -<span id="cb502-25"><a href="#cb502-25" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb502-26"><a href="#cb502-26" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb502-27"><a href="#cb502-27" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb546"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb546-1"><a href="#cb546-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb546-2"><a href="#cb546-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[headerAttributes]{<span class="ex">markdown</span>}</span> +<span id="cb546-3"><a href="#cb546-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb546-4"><a href="#cb546-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb546-5"><a href="#cb546-5" aria-hidden="true" tabindex="-1"></a> headerAttributeContextBegin = {<span class="co">%</span></span> +<span id="cb546-6"><a href="#cb546-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb546-7"><a href="#cb546-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The beginning of a header attribute context)}</span> +<span id="cb546-8"><a href="#cb546-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb546-9"><a href="#cb546-9" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb546-10"><a href="#cb546-10" aria-hidden="true" tabindex="-1"></a> headerAttributeContextEnd = {<span class="co">%</span></span> +<span id="cb546-11"><a href="#cb546-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb546-12"><a href="#cb546-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The end of a header attribute context)}</span> +<span id="cb546-13"><a href="#cb546-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb546-14"><a href="#cb546-14" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb546-15"><a href="#cb546-15" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb546-16"><a href="#cb546-16" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb546-17"><a href="#cb546-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb546-18"><a href="#cb546-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb546-19"><a href="#cb546-19" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb546-20"><a href="#cb546-20" aria-hidden="true" tabindex="-1"></a># First top-level heading</span> +<span id="cb546-21"><a href="#cb546-21" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb546-22"><a href="#cb546-22" aria-hidden="true" tabindex="-1"></a>## A subheading {#identifier}</span> +<span id="cb546-23"><a href="#cb546-23" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb546-24"><a href="#cb546-24" aria-hidden="true" tabindex="-1"></a># Second top-level heading {.class_name}</span> +<span id="cb546-25"><a href="#cb546-25" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb546-26"><a href="#cb546-26" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb546-27"><a href="#cb546-27" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb503"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb503-1"><a href="#cb503-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb547"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb547-1"><a href="#cb547-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -9074,8 +10090,8 @@ contain the following text:</p> <h1 id="second-top-level-heading-1">Second top-level heading</h1> <p><em>(The end of a header attribute context)</em></p> </blockquote> -<h4 data-number="2.3.1.15" id="heading-renderers"><span -class="header-section-number">2.3.1.15</span> Heading Renderers</h4> +<h4 data-number="2.3.1.16" id="heading-renderers"><span +class="header-section-number">2.3.1.16</span> Heading Renderers</h4> <p>The <code>\markdownRendererHeadingOne</code> macro represents a first level heading. The macro receives a single argument that corresponds to the heading text.</p> @@ -9094,156 +10110,136 @@ corresponds to the heading text.</p> <p>The <code>\markdownRendererHeadingSix</code> macro represents a sixth level heading. The macro receives a single argument that corresponds to the heading text.</p> -<h5 class="unnumbered" id="plain-tex-example-29">Plain <span +<h5 class="unnumbered" id="plain-tex-example-32">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb504"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb504-1"><a href="#cb504-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb504-2"><a href="#cb504-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{}</span> -<span id="cb504-3"><a href="#cb504-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingOne</span>{1}</span> -<span id="cb504-4"><a href="#cb504-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingTwo</span>{2}</span> -<span id="cb504-5"><a href="#cb504-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingThree</span>{3}</span> -<span id="cb504-6"><a href="#cb504-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingFour</span>{4}</span> -<span id="cb504-7"><a href="#cb504-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingFive</span>{5}</span> -<span id="cb504-8"><a href="#cb504-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingSix</span>{6}</span> -<span id="cb504-9"><a href="#cb504-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb504-10"><a href="#cb504-10" aria-hidden="true" tabindex="-1"></a>######</span> -<span id="cb504-11"><a href="#cb504-11" aria-hidden="true" tabindex="-1"></a>#####</span> -<span id="cb504-12"><a href="#cb504-12" aria-hidden="true" tabindex="-1"></a>#####</span> -<span id="cb504-13"><a href="#cb504-13" aria-hidden="true" tabindex="-1"></a>###</span> -<span id="cb504-14"><a href="#cb504-14" aria-hidden="true" tabindex="-1"></a>######</span> -<span id="cb504-15"><a href="#cb504-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb504-16"><a href="#cb504-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb548"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb548-1"><a href="#cb548-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb548-2"><a href="#cb548-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{}</span> +<span id="cb548-3"><a href="#cb548-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingOne</span>{1}</span> +<span id="cb548-4"><a href="#cb548-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingTwo</span>{2}</span> +<span id="cb548-5"><a href="#cb548-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingThree</span>{3}</span> +<span id="cb548-6"><a href="#cb548-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingFour</span>{4}</span> +<span id="cb548-7"><a href="#cb548-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingFive</span>{5}</span> +<span id="cb548-8"><a href="#cb548-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingSix</span>{6}</span> +<span id="cb548-9"><a href="#cb548-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb548-10"><a href="#cb548-10" aria-hidden="true" tabindex="-1"></a>######</span> +<span id="cb548-11"><a href="#cb548-11" aria-hidden="true" tabindex="-1"></a>#####</span> +<span id="cb548-12"><a href="#cb548-12" aria-hidden="true" tabindex="-1"></a>#####</span> +<span id="cb548-13"><a href="#cb548-13" aria-hidden="true" tabindex="-1"></a>###</span> +<span id="cb548-14"><a href="#cb548-14" aria-hidden="true" tabindex="-1"></a>######</span> +<span id="cb548-15"><a href="#cb548-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb548-16"><a href="#cb548-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb505"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb505-1"><a href="#cb505-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb549"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb549-1"><a href="#cb549-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>65536</p> </blockquote> -<h5 class="unnumbered" id="latex-example-68"><span +<h5 class="unnumbered" id="latex-example-72"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb506"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb506-1"><a href="#cb506-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb506-2"><a href="#cb506-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb506-3"><a href="#cb506-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb506-4"><a href="#cb506-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb506-5"><a href="#cb506-5" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {},</span> -<span id="cb506-6"><a href="#cb506-6" aria-hidden="true" tabindex="-1"></a> headingOne = 1,</span> -<span id="cb506-7"><a href="#cb506-7" aria-hidden="true" tabindex="-1"></a> headingTwo = 2,</span> -<span id="cb506-8"><a href="#cb506-8" aria-hidden="true" tabindex="-1"></a> headingThree = 3,</span> -<span id="cb506-9"><a href="#cb506-9" aria-hidden="true" tabindex="-1"></a> headingFour = 4,</span> -<span id="cb506-10"><a href="#cb506-10" aria-hidden="true" tabindex="-1"></a> headingFive = 5,</span> -<span id="cb506-11"><a href="#cb506-11" aria-hidden="true" tabindex="-1"></a> headingSix = 6,</span> -<span id="cb506-12"><a href="#cb506-12" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb506-13"><a href="#cb506-13" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb506-14"><a href="#cb506-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb506-15"><a href="#cb506-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb506-16"><a href="#cb506-16" aria-hidden="true" tabindex="-1"></a>######</span> -<span id="cb506-17"><a href="#cb506-17" aria-hidden="true" tabindex="-1"></a>#####</span> -<span id="cb506-18"><a href="#cb506-18" aria-hidden="true" tabindex="-1"></a>#####</span> -<span id="cb506-19"><a href="#cb506-19" aria-hidden="true" tabindex="-1"></a>###</span> -<span id="cb506-20"><a href="#cb506-20" aria-hidden="true" tabindex="-1"></a>######</span> -<span id="cb506-21"><a href="#cb506-21" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb506-22"><a href="#cb506-22" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb550"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb550-1"><a href="#cb550-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb550-2"><a href="#cb550-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb550-3"><a href="#cb550-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb550-4"><a href="#cb550-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb550-5"><a href="#cb550-5" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {},</span> +<span id="cb550-6"><a href="#cb550-6" aria-hidden="true" tabindex="-1"></a> headingOne = 1,</span> +<span id="cb550-7"><a href="#cb550-7" aria-hidden="true" tabindex="-1"></a> headingTwo = 2,</span> +<span id="cb550-8"><a href="#cb550-8" aria-hidden="true" tabindex="-1"></a> headingThree = 3,</span> +<span id="cb550-9"><a href="#cb550-9" aria-hidden="true" tabindex="-1"></a> headingFour = 4,</span> +<span id="cb550-10"><a href="#cb550-10" aria-hidden="true" tabindex="-1"></a> headingFive = 5,</span> +<span id="cb550-11"><a href="#cb550-11" aria-hidden="true" tabindex="-1"></a> headingSix = 6,</span> +<span id="cb550-12"><a href="#cb550-12" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb550-13"><a href="#cb550-13" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb550-14"><a href="#cb550-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb550-15"><a href="#cb550-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb550-16"><a href="#cb550-16" aria-hidden="true" tabindex="-1"></a>######</span> +<span id="cb550-17"><a href="#cb550-17" aria-hidden="true" tabindex="-1"></a>#####</span> +<span id="cb550-18"><a href="#cb550-18" aria-hidden="true" tabindex="-1"></a>#####</span> +<span id="cb550-19"><a href="#cb550-19" aria-hidden="true" tabindex="-1"></a>###</span> +<span id="cb550-20"><a href="#cb550-20" aria-hidden="true" tabindex="-1"></a>######</span> +<span id="cb550-21"><a href="#cb550-21" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb550-22"><a href="#cb550-22" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb507"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb507-1"><a href="#cb507-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb551"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb551-1"><a href="#cb551-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>65536</p> </blockquote> -<h5 class="unnumbered" id="context-example-43">Con<span +<h5 class="unnumbered" id="context-example-45">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb508"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb508-1"><a href="#cb508-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb508-2"><a href="#cb508-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{}</span> -<span id="cb508-3"><a href="#cb508-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingOne</span>{1}</span> -<span id="cb508-4"><a href="#cb508-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingTwo</span>{2}</span> -<span id="cb508-5"><a href="#cb508-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingThree</span>{3}</span> -<span id="cb508-6"><a href="#cb508-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingFour</span>{4}</span> -<span id="cb508-7"><a href="#cb508-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingFive</span>{5}</span> -<span id="cb508-8"><a href="#cb508-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingSix</span>{6}</span> -<span id="cb508-9"><a href="#cb508-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb508-10"><a href="#cb508-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb508-11"><a href="#cb508-11" aria-hidden="true" tabindex="-1"></a>######</span> -<span id="cb508-12"><a href="#cb508-12" aria-hidden="true" tabindex="-1"></a>#####</span> -<span id="cb508-13"><a href="#cb508-13" aria-hidden="true" tabindex="-1"></a>#####</span> -<span id="cb508-14"><a href="#cb508-14" aria-hidden="true" tabindex="-1"></a>###</span> -<span id="cb508-15"><a href="#cb508-15" aria-hidden="true" tabindex="-1"></a>######</span> -<span id="cb508-16"><a href="#cb508-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb508-17"><a href="#cb508-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb552"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb552-1"><a href="#cb552-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb552-2"><a href="#cb552-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{}</span> +<span id="cb552-3"><a href="#cb552-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingOne</span>{1}</span> +<span id="cb552-4"><a href="#cb552-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingTwo</span>{2}</span> +<span id="cb552-5"><a href="#cb552-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingThree</span>{3}</span> +<span id="cb552-6"><a href="#cb552-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingFour</span>{4}</span> +<span id="cb552-7"><a href="#cb552-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingFive</span>{5}</span> +<span id="cb552-8"><a href="#cb552-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHeadingSix</span>{6}</span> +<span id="cb552-9"><a href="#cb552-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb552-10"><a href="#cb552-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb552-11"><a href="#cb552-11" aria-hidden="true" tabindex="-1"></a>######</span> +<span id="cb552-12"><a href="#cb552-12" aria-hidden="true" tabindex="-1"></a>#####</span> +<span id="cb552-13"><a href="#cb552-13" aria-hidden="true" tabindex="-1"></a>#####</span> +<span id="cb552-14"><a href="#cb552-14" aria-hidden="true" tabindex="-1"></a>###</span> +<span id="cb552-15"><a href="#cb552-15" aria-hidden="true" tabindex="-1"></a>######</span> +<span id="cb552-16"><a href="#cb552-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb552-17"><a href="#cb552-17" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb509"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb509-1"><a href="#cb509-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb553"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb553-1"><a href="#cb553-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>65536</p> </blockquote> -<h4 data-number="2.3.1.16" id="html-comment-renderers"><span -class="header-section-number">2.3.1.16</span> HTML Comment -Renderers</h4> +<h4 data-number="2.3.1.17" id="inline-html-comment-renderer"><span +class="header-section-number">2.3.1.17</span> Inline HTML Comment +Renderer</h4> <p>The <code>\markdownRendererInlineHtmlComment</code> macro represents the contents of an inline <abbr>HTML</abbr> comment. This macro will only be produced, when the <strong><code>html</code></strong> option is enabled. The macro receives a single argument that corresponds to the contents of the <abbr>HTML</abbr> comment.</p> -<p>The <code>\markdownRendererBlockHtmlCommentBegin</code> and -<code>\markdownRendererBlockHtmlCommentEnd</code> macros represent the -beginning and the end of a block <abbr>HTML</abbr> comment. The macros -receive no arguments.</p> -<h5 class="unnumbered" id="latex-example-69"><span +<h5 class="unnumbered" id="latex-example-73"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb510"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb510-1"><a href="#cb510-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb510-2"><a href="#cb510-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[html]{<span class="ex">markdown</span>}</span> -<span id="cb510-3"><a href="#cb510-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">marginnote</span>}</span> -<span id="cb510-4"><a href="#cb510-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb510-5"><a href="#cb510-5" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb510-6"><a href="#cb510-6" aria-hidden="true" tabindex="-1"></a> inlineHtmlComment = {<span class="fu">\marginnote</span>{#1}},</span> -<span id="cb510-7"><a href="#cb510-7" aria-hidden="true" tabindex="-1"></a> blockHtmlCommentBegin = {<span class="kw">\begin</span>{<span class="ex">quote</span>}},</span> -<span id="cb510-8"><a href="#cb510-8" aria-hidden="true" tabindex="-1"></a> blockHtmlCommentEnd = {<span class="kw">\end</span>{<span class="ex">quote</span>}},</span> -<span id="cb510-9"><a href="#cb510-9" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb510-10"><a href="#cb510-10" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb510-11"><a href="#cb510-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb510-12"><a href="#cb510-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb510-13"><a href="#cb510-13" aria-hidden="true" tabindex="-1"></a>A useful use of inline HTML comments are side notes.</span> -<span id="cb510-14"><a href="#cb510-14" aria-hidden="true" tabindex="-1"></a><!-- Side notes are displayed in the horizontal margins next to the relevant</span> -<span id="cb510-15"><a href="#cb510-15" aria-hidden="true" tabindex="-1"></a>passages, which makes them *easier for the reader to find* than notes. --></span> -<span id="cb510-16"><a href="#cb510-16" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb510-17"><a href="#cb510-17" aria-hidden="true" tabindex="-1"></a>We can render block HTML comments as blockquotes:</span> -<span id="cb510-18"><a href="#cb510-18" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb510-19"><a href="#cb510-19" aria-hidden="true" tabindex="-1"></a><!--</span> -<span id="cb510-20"><a href="#cb510-20" aria-hidden="true" tabindex="-1"></a>Here is a block HTML comment with a code example that a programmer might understand:</span> -<span id="cb510-21"><a href="#cb510-21" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb510-22"><a href="#cb510-22" aria-hidden="true" tabindex="-1"></a> foo = bar + baz - 42</span> -<span id="cb510-23"><a href="#cb510-23" aria-hidden="true" tabindex="-1"></a>--></span> -<span id="cb510-24"><a href="#cb510-24" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb510-25"><a href="#cb510-25" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb554"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb554-1"><a href="#cb554-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb554-2"><a href="#cb554-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[html]{<span class="ex">markdown</span>}</span> +<span id="cb554-3"><a href="#cb554-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">marginnote</span>}</span> +<span id="cb554-4"><a href="#cb554-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb554-5"><a href="#cb554-5" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb554-6"><a href="#cb554-6" aria-hidden="true" tabindex="-1"></a> inlineHtmlComment = {<span class="fu">\marginnote</span>{#1}},</span> +<span id="cb554-7"><a href="#cb554-7" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb554-8"><a href="#cb554-8" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb554-9"><a href="#cb554-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb554-10"><a href="#cb554-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb554-11"><a href="#cb554-11" aria-hidden="true" tabindex="-1"></a>A useful use of inline HTML comments are side notes.</span> +<span id="cb554-12"><a href="#cb554-12" aria-hidden="true" tabindex="-1"></a><!-- Side notes are displayed in the horizontal margins next to the relevant</span> +<span id="cb554-13"><a href="#cb554-13" aria-hidden="true" tabindex="-1"></a>passages, which makes them *easier for the reader to find* than notes. --></span> +<span id="cb554-14"><a href="#cb554-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb554-15"><a href="#cb554-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb511"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb511-1"><a href="#cb511-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> -<span id="cb511-2"><a href="#cb511-2" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb555"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb555-1"><a href="#cb555-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> +<span id="cb555-2"><a href="#cb555-2" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following body text:</p> <blockquote> <p>A useful use of HTML comments are side notes.</p> -<p>We can render block HTML comments as blockquotes:</p> -<blockquote> -<p>Here is a block HTML comment with a code example that a programmer -might understand:</p> -<pre><code>foo = bar + baz - 42</code></pre> -</blockquote> </blockquote> <p>The horizontal margins should contain the following text:</p> <blockquote> @@ -9251,8 +10247,8 @@ might understand:</p> relevant passages, which makes them <em>easier for the reader to find</em> than notes.</p> </blockquote> -<h4 data-number="2.3.1.17" id="html-tag-and-element-renderers"><span -class="header-section-number">2.3.1.17</span> HTML Tag and Element +<h4 data-number="2.3.1.18" id="html-tag-and-element-renderers"><span +class="header-section-number">2.3.1.18</span> HTML Tag and Element Renderers</h4> <p>The <code>\markdownRendererInlineHtmlTag</code> macro represents an opening, closing, or empty inline <abbr>HTML</abbr> tag. This macro will @@ -9264,86 +10260,86 @@ represents a block <abbr>HTML</abbr> element. This macro will only be produced, when the <strong><code>html</code></strong> option is enabled. The macro receives a single argument that filename of a file containing the contents of the <abbr>HTML</abbr> element.</p> -<h5 class="unnumbered" id="latex-example-70"><span +<h5 class="unnumbered" id="latex-example-74"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb513"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb513-1"><a href="#cb513-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb513-2"><a href="#cb513-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[html]{<span class="ex">markdown</span>}</span> -<span id="cb513-3"><a href="#cb513-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">marginnote</span>}</span> -<span id="cb513-4"><a href="#cb513-4" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">verbatim</span>}</span> -<span id="cb513-5"><a href="#cb513-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb513-6"><a href="#cb513-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb513-7"><a href="#cb513-7" aria-hidden="true" tabindex="-1"></a> inlineHtmlTag = {<span class="fu">\textbf</span>{#1}},</span> -<span id="cb513-8"><a href="#cb513-8" aria-hidden="true" tabindex="-1"></a> inputBlockHtmlElement = {<span class="fu">\verbatiminput</span>{#1}},</span> -<span id="cb513-9"><a href="#cb513-9" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb513-10"><a href="#cb513-10" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb513-11"><a href="#cb513-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb513-12"><a href="#cb513-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb513-13"><a href="#cb513-13" aria-hidden="true" tabindex="-1"></a><b>_Hello,_ world!</b><br/></span> -<span id="cb513-14"><a href="#cb513-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb513-15"><a href="#cb513-15" aria-hidden="true" tabindex="-1"></a><div>_Hello,_ world!</div></span> -<span id="cb513-16"><a href="#cb513-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb513-17"><a href="#cb513-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb556"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb556-1"><a href="#cb556-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb556-2"><a href="#cb556-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[html]{<span class="ex">markdown</span>}</span> +<span id="cb556-3"><a href="#cb556-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">marginnote</span>}</span> +<span id="cb556-4"><a href="#cb556-4" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">verbatim</span>}</span> +<span id="cb556-5"><a href="#cb556-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb556-6"><a href="#cb556-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb556-7"><a href="#cb556-7" aria-hidden="true" tabindex="-1"></a> inlineHtmlTag = {<span class="fu">\textbf</span>{#1}},</span> +<span id="cb556-8"><a href="#cb556-8" aria-hidden="true" tabindex="-1"></a> inputBlockHtmlElement = {<span class="fu">\verbatiminput</span>{#1}},</span> +<span id="cb556-9"><a href="#cb556-9" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb556-10"><a href="#cb556-10" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb556-11"><a href="#cb556-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb556-12"><a href="#cb556-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb556-13"><a href="#cb556-13" aria-hidden="true" tabindex="-1"></a><b>_Hello,_ world!</b><br/></span> +<span id="cb556-14"><a href="#cb556-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb556-15"><a href="#cb556-15" aria-hidden="true" tabindex="-1"></a><div>_Hello,_ world!</div></span> +<span id="cb556-16"><a href="#cb556-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb556-17"><a href="#cb556-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb514"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb514-1"><a href="#cb514-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> -<span id="cb514-2"><a href="#cb514-2" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb557"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb557-1"><a href="#cb557-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> +<span id="cb557-2"><a href="#cb557-2" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following body text:</p> <blockquote> <p><strong><b></strong>_Hello,_ world!<strong></b><br/></strong></p> <pre><code><div>_Hello,_ world!</div></code></pre> </blockquote> -<h4 data-number="2.3.1.18" id="image-renderer"><span -class="header-section-number">2.3.1.18</span> Image Renderer</h4> +<h4 data-number="2.3.1.19" id="image-renderer"><span +class="header-section-number">2.3.1.19</span> Image Renderer</h4> <p>The <code>\markdownRendererImage</code> macro represents an image. It receives four arguments: the label, the fully escaped <abbr>uri</abbr> that can be directly typeset, the raw <abbr>uri</abbr> that can be used outside typesetting, and the title of the link.</p> -<h5 class="unnumbered" id="latex-example-71"><span +<h5 class="unnumbered" id="latex-example-75"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb516"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb516-1"><a href="#cb516-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb516-2"><a href="#cb516-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb516-3"><a href="#cb516-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> -<span id="cb516-4"><a href="#cb516-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\@</span>=11</span> -<span id="cb516-5"><a href="#cb516-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> -<span id="cb516-6"><a href="#cb516-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\^</span>^A=14</span> -<span id="cb516-7"><a href="#cb516-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\global\def\markdownRendererImage</span>#1#2#3#4{^^A</span> -<span id="cb516-8"><a href="#cb516-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\immediate\write</span>18{^^A</span></code></pre></div> -<div class="sourceCode" id="cb517"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb517-1"><a href="#cb517-1" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="bu">printf</span> <span class="st">'%s'</span> <span class="st">"#3"</span> <span class="kw">|</span> <span class="fu">grep</span> <span class="at">-q</span> ^http<span class="kw">;</span> <span class="cf">then</span></span> -<span id="cb517-2"><a href="#cb517-2" aria-hidden="true" tabindex="-1"></a> <span class="va">OUTPUT</span><span class="op">=</span><span class="st">"</span><span class="va">$(</span><span class="bu">printf</span> <span class="st">'%s'</span> <span class="st">"#3"</span> <span class="kw">|</span> <span class="fu">md5sum</span> <span class="kw">|</span> <span class="fu">cut</span> <span class="at">-d</span><span class="st">' '</span> <span class="at">-f1</span><span class="va">)</span><span class="st">.^^A</span></span> -<span id="cb517-3"><a href="#cb517-3" aria-hidden="true" tabindex="-1"></a><span class="st"> </span><span class="va">$(</span><span class="bu">printf</span> <span class="st">'%s'</span> <span class="st">"#3"</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">'s/.*[.]//'</span><span class="va">)</span><span class="st">"</span><span class="kw">;</span></span> -<span id="cb517-4"><a href="#cb517-4" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="ot">! </span><span class="bu">[</span> <span class="ot">-e</span> <span class="st">"</span><span class="va">$OUTPUT</span><span class="st">"</span> <span class="bu">]</span><span class="kw">;</span> <span class="cf">then</span></span> -<span id="cb517-5"><a href="#cb517-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">wget</span> <span class="at">-O</span> <span class="st">"</span><span class="va">$OUTPUT</span><span class="st">"</span> <span class="st">'#3'</span> <span class="kw">||</span> <span class="fu">rm</span> <span class="st">"</span><span class="va">$OUTPUT</span><span class="st">"</span><span class="kw">;</span></span> -<span id="cb517-6"><a href="#cb517-6" aria-hidden="true" tabindex="-1"></a> <span class="ex">convert</span> <span class="st">"</span><span class="va">$OUTPUT</span><span class="st">"</span> png:<span class="st">"</span><span class="va">$OUTPUT</span><span class="st">"</span><span class="kw">;</span></span> -<span id="cb517-7"><a href="#cb517-7" aria-hidden="true" tabindex="-1"></a> <span class="cf">fi</span><span class="kw">;</span></span> -<span id="cb517-8"><a href="#cb517-8" aria-hidden="true" tabindex="-1"></a> <span class="bu">printf</span> <span class="st">'%s%%'</span> <span class="st">"</span><span class="va">$OUTPUT</span><span class="st">"</span> <span class="op">></span> <span class="dt">\j</span>obname.fetched<span class="kw">;</span></span> -<span id="cb517-9"><a href="#cb517-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">else</span></span> -<span id="cb517-10"><a href="#cb517-10" aria-hidden="true" tabindex="-1"></a> <span class="bu">printf</span> <span class="st">'%s%%'</span> <span class="st">"#3"</span> <span class="op">></span> <span class="dt">\j</span>obname.fetched<span class="kw">;</span></span> -<span id="cb517-11"><a href="#cb517-11" aria-hidden="true" tabindex="-1"></a> <span class="ex">fi^^A</span></span></code></pre></div> -<div class="sourceCode" id="cb518"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb518-1"><a href="#cb518-1" aria-hidden="true" tabindex="-1"></a> }^^A</span> -<span id="cb518-2"><a href="#cb518-2" aria-hidden="true" tabindex="-1"></a> {^^A</span> -<span id="cb518-3"><a href="#cb518-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">\everyeof</span>={<span class="fu">\noexpand</span>}^^A</span> -<span id="cb518-4"><a href="#cb518-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">\edef\filename</span>{<span class="fu">\_</span>_markdowninput"<span class="fu">\jobname</span>.fetched" }^^A</span> -<span id="cb518-5"><a href="#cb518-5" aria-hidden="true" tabindex="-1"></a> <span class="bu">\includegraphics</span>[width=<span class="fu">\textwidth</span>]{<span class="fu">\filename</span>}^^A</span> -<span id="cb518-6"><a href="#cb518-6" aria-hidden="true" tabindex="-1"></a> }^^A</span> -<span id="cb518-7"><a href="#cb518-7" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb518-8"><a href="#cb518-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> -<span id="cb518-9"><a href="#cb518-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb518-10"><a href="#cb518-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb518-11"><a href="#cb518-11" aria-hidden="true" tabindex="-1"></a>![TUGboat](https://tug.org/tugboat/noword.jpg)</span> -<span id="cb518-12"><a href="#cb518-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb518-13"><a href="#cb518-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb559"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb559-1"><a href="#cb559-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb559-2"><a href="#cb559-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb559-3"><a href="#cb559-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\begingroup</span></span> +<span id="cb559-4"><a href="#cb559-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\@</span>=11</span> +<span id="cb559-5"><a href="#cb559-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\%</span>=12</span> +<span id="cb559-6"><a href="#cb559-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\catcode</span>`<span class="fu">\^</span>^A=14</span> +<span id="cb559-7"><a href="#cb559-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\global\def\markdownRendererImage</span>#1#2#3#4{^^A</span> +<span id="cb559-8"><a href="#cb559-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\immediate\write</span>18{^^A</span></code></pre></div> +<div class="sourceCode" id="cb560"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb560-1"><a href="#cb560-1" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="bu">printf</span> <span class="st">'%s'</span> <span class="st">"#3"</span> <span class="kw">|</span> <span class="fu">grep</span> <span class="at">-q</span> ^http<span class="kw">;</span> <span class="cf">then</span></span> +<span id="cb560-2"><a href="#cb560-2" aria-hidden="true" tabindex="-1"></a> <span class="va">OUTPUT</span><span class="op">=</span><span class="st">"</span><span class="va">$(</span><span class="bu">printf</span> <span class="st">'%s'</span> <span class="st">"#3"</span> <span class="kw">|</span> <span class="fu">md5sum</span> <span class="kw">|</span> <span class="fu">cut</span> <span class="at">-d</span><span class="st">' '</span> <span class="at">-f1</span><span class="va">)</span><span class="st">.^^A</span></span> +<span id="cb560-3"><a href="#cb560-3" aria-hidden="true" tabindex="-1"></a><span class="st"> </span><span class="va">$(</span><span class="bu">printf</span> <span class="st">'%s'</span> <span class="st">"#3"</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">'s/.*[.]//'</span><span class="va">)</span><span class="st">"</span><span class="kw">;</span></span> +<span id="cb560-4"><a href="#cb560-4" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="ot">! </span><span class="bu">[</span> <span class="ot">-e</span> <span class="st">"</span><span class="va">$OUTPUT</span><span class="st">"</span> <span class="bu">]</span><span class="kw">;</span> <span class="cf">then</span></span> +<span id="cb560-5"><a href="#cb560-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">wget</span> <span class="at">-O</span> <span class="st">"</span><span class="va">$OUTPUT</span><span class="st">"</span> <span class="st">'#3'</span> <span class="kw">||</span> <span class="fu">rm</span> <span class="st">"</span><span class="va">$OUTPUT</span><span class="st">"</span><span class="kw">;</span></span> +<span id="cb560-6"><a href="#cb560-6" aria-hidden="true" tabindex="-1"></a> <span class="ex">convert</span> <span class="st">"</span><span class="va">$OUTPUT</span><span class="st">"</span> png:<span class="st">"</span><span class="va">$OUTPUT</span><span class="st">"</span><span class="kw">;</span></span> +<span id="cb560-7"><a href="#cb560-7" aria-hidden="true" tabindex="-1"></a> <span class="cf">fi</span><span class="kw">;</span></span> +<span id="cb560-8"><a href="#cb560-8" aria-hidden="true" tabindex="-1"></a> <span class="bu">printf</span> <span class="st">'%s%%'</span> <span class="st">"</span><span class="va">$OUTPUT</span><span class="st">"</span> <span class="op">></span> <span class="dt">\j</span>obname.fetched<span class="kw">;</span></span> +<span id="cb560-9"><a href="#cb560-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">else</span></span> +<span id="cb560-10"><a href="#cb560-10" aria-hidden="true" tabindex="-1"></a> <span class="bu">printf</span> <span class="st">'%s%%'</span> <span class="st">"#3"</span> <span class="op">></span> <span class="dt">\j</span>obname.fetched<span class="kw">;</span></span> +<span id="cb560-11"><a href="#cb560-11" aria-hidden="true" tabindex="-1"></a> <span class="ex">fi^^A</span></span></code></pre></div> +<div class="sourceCode" id="cb561"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb561-1"><a href="#cb561-1" aria-hidden="true" tabindex="-1"></a> }^^A</span> +<span id="cb561-2"><a href="#cb561-2" aria-hidden="true" tabindex="-1"></a> {^^A</span> +<span id="cb561-3"><a href="#cb561-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">\everyeof</span>={<span class="fu">\noexpand</span>}^^A</span> +<span id="cb561-4"><a href="#cb561-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">\edef\filename</span>{<span class="fu">\@@input</span>"<span class="fu">\jobname</span>.fetched" }^^A</span> +<span id="cb561-5"><a href="#cb561-5" aria-hidden="true" tabindex="-1"></a> <span class="bu">\includegraphics</span>[width=<span class="fu">\textwidth</span>]{<span class="fu">\filename</span>}^^A</span> +<span id="cb561-6"><a href="#cb561-6" aria-hidden="true" tabindex="-1"></a> }^^A</span> +<span id="cb561-7"><a href="#cb561-7" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb561-8"><a href="#cb561-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\endgroup</span></span> +<span id="cb561-9"><a href="#cb561-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb561-10"><a href="#cb561-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb561-11"><a href="#cb561-11" aria-hidden="true" tabindex="-1"></a>![TUGboat](https://tug.org/tugboat/noword.jpg)</span> +<span id="cb561-12"><a href="#cb561-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb561-13"><a href="#cb561-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb519"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb519-1"><a href="#cb519-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb562"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb562-1"><a href="#cb562-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> <span class="at">--shell-escape</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following content. This assumes that you use a Unix-like operating system with Bourne or Bourne again shell as the default shell @@ -9358,163 +10354,209 @@ title="The Communications of the TeX Users Group" alt="TUGboat" /> <figcaption aria-hidden="true">TUGboat</figcaption> </figure> </blockquote> -<h4 data-number="2.3.1.19" id="image-attribute-context-renderers"><span -class="header-section-number">2.3.1.19</span> Image Attribute Context +<h4 data-number="2.3.1.20" id="image-attribute-context-renderers"><span +class="header-section-number">2.3.1.20</span> Image Attribute Context Renderers</h4> <p>The following macros are only produced, when the <strong><code>linkAttributes</code></strong> option is enabled.</p> <p>The <code>\markdownRendererImageAttributeContextBegin</code> and <code>\markdownRendererImageAttributeContextEnd</code> macros represent -the beginning and the end of an image in which the attributes of the +the beginning and the end of a context in which the attributes of an image apply. The macros receive no arguments.</p> -<h5 class="unnumbered" id="latex-example-72"><span +<h5 class="unnumbered" id="latex-example-76"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb520"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb520-1"><a href="#cb520-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb520-2"><a href="#cb520-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[linkAttributes]{<span class="ex">markdown</span>}</span> -<span id="cb520-3"><a href="#cb520-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb520-4"><a href="#cb520-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb520-5"><a href="#cb520-5" aria-hidden="true" tabindex="-1"></a> imageAttributeContextBegin = {(},</span> -<span id="cb520-6"><a href="#cb520-6" aria-hidden="true" tabindex="-1"></a> image = {#1},</span> -<span id="cb520-7"><a href="#cb520-7" aria-hidden="true" tabindex="-1"></a> imageAttributeContextEnd = {)},</span> -<span id="cb520-8"><a href="#cb520-8" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb520-9"><a href="#cb520-9" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb520-10"><a href="#cb520-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb520-11"><a href="#cb520-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb520-12"><a href="#cb520-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb520-13"><a href="#cb520-13" aria-hidden="true" tabindex="-1"></a>foo ![bar](#bar){key=value} baz</span> -<span id="cb520-14"><a href="#cb520-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb520-15"><a href="#cb520-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb520-16"><a href="#cb520-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb563"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb563-1"><a href="#cb563-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb563-2"><a href="#cb563-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[linkAttributes]{<span class="ex">markdown</span>}</span> +<span id="cb563-3"><a href="#cb563-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb563-4"><a href="#cb563-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb563-5"><a href="#cb563-5" aria-hidden="true" tabindex="-1"></a> imageAttributeContextBegin = {(},</span> +<span id="cb563-6"><a href="#cb563-6" aria-hidden="true" tabindex="-1"></a> image = {#1},</span> +<span id="cb563-7"><a href="#cb563-7" aria-hidden="true" tabindex="-1"></a> imageAttributeContextEnd = {)},</span> +<span id="cb563-8"><a href="#cb563-8" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb563-9"><a href="#cb563-9" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb563-10"><a href="#cb563-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb563-11"><a href="#cb563-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb563-12"><a href="#cb563-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb563-13"><a href="#cb563-13" aria-hidden="true" tabindex="-1"></a>foo ![bar](#bar){key=value} baz</span> +<span id="cb563-14"><a href="#cb563-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb563-15"><a href="#cb563-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb563-16"><a href="#cb563-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb521"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb521-1"><a href="#cb521-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb564"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb564-1"><a href="#cb564-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>foo (bar) baz</p> </blockquote> -<h4 data-number="2.3.1.20" id="interblock-separator-renderer"><span -class="header-section-number">2.3.1.20</span> Interblock Separator -Renderer</h4> +<h4 data-number="2.3.1.21" id="interblock-separator-renderers"><span +class="header-section-number">2.3.1.21</span> Interblock Separator +Renderers</h4> <p>The <code>\markdownRendererInterblockSeparator</code> macro -represents a separator between two markdown block elements. The macro -receives no arguments.</p> -<h5 class="unnumbered" id="plain-tex-example-30">Plain <span +represents an interblock separator between two markdown block elements. +The macro receives no arguments.</p> +<h5 class="unnumbered" id="plain-tex-example-33">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb522"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb522-1"><a href="#cb522-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb522-2"><a href="#cb522-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> -<span id="cb522-3"><a href="#cb522-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb522-4"><a href="#cb522-4" aria-hidden="true" tabindex="-1"></a> {<span class="fu">\it</span>(The end of a block)}<span class="co">%</span></span> -<span id="cb522-5"><a href="#cb522-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb522-6"><a href="#cb522-6" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb522-7"><a href="#cb522-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb522-8"><a href="#cb522-8" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb522-9"><a href="#cb522-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb522-10"><a href="#cb522-10" aria-hidden="true" tabindex="-1"></a>_Foo_ bar!</span> -<span id="cb522-11"><a href="#cb522-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb522-12"><a href="#cb522-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb565"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb565-1"><a href="#cb565-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb565-2"><a href="#cb565-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> +<span id="cb565-3"><a href="#cb565-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb565-4"><a href="#cb565-4" aria-hidden="true" tabindex="-1"></a> {<span class="fu">\it</span>(The end of a block)}<span class="co">%</span></span> +<span id="cb565-5"><a href="#cb565-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb565-6"><a href="#cb565-6" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb565-7"><a href="#cb565-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb565-8"><a href="#cb565-8" aria-hidden="true" tabindex="-1"></a>- Hello *world*!</span> +<span id="cb565-9"><a href="#cb565-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb565-10"><a href="#cb565-10" aria-hidden="true" tabindex="-1"></a>_Foo_ bar!</span> +<span id="cb565-11"><a href="#cb565-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb565-12"><a href="#cb565-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb523"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb523-1"><a href="#cb523-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb566"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb566-1"><a href="#cb566-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> -<p>Hello <em>world</em>!</p> +<ul> +<li>Hello <em>world</em>!</li> +</ul> <p><em>(The end of a block)</em></p> <p><em>Foo</em> bar!</p> </blockquote> -<h5 class="unnumbered" id="latex-example-73"><span +<h5 class="unnumbered" id="latex-example-77"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb524"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb524-1"><a href="#cb524-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb524-2"><a href="#cb524-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb524-3"><a href="#cb524-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb524-4"><a href="#cb524-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb524-5"><a href="#cb524-5" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {<span class="co">%</span></span> -<span id="cb524-6"><a href="#cb524-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb524-7"><a href="#cb524-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The end of a block)}<span class="co">%</span></span> -<span id="cb524-8"><a href="#cb524-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb524-9"><a href="#cb524-9" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb524-10"><a href="#cb524-10" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb524-11"><a href="#cb524-11" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb524-12"><a href="#cb524-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb524-13"><a href="#cb524-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb524-14"><a href="#cb524-14" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb524-15"><a href="#cb524-15" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb524-16"><a href="#cb524-16" aria-hidden="true" tabindex="-1"></a>_Foo_ bar!</span> -<span id="cb524-17"><a href="#cb524-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb524-18"><a href="#cb524-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb567"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb567-1"><a href="#cb567-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb567-2"><a href="#cb567-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb567-3"><a href="#cb567-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb567-4"><a href="#cb567-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb567-5"><a href="#cb567-5" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {<span class="co">%</span></span> +<span id="cb567-6"><a href="#cb567-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb567-7"><a href="#cb567-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The end of a block)}<span class="co">%</span></span> +<span id="cb567-8"><a href="#cb567-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb567-9"><a href="#cb567-9" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb567-10"><a href="#cb567-10" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb567-11"><a href="#cb567-11" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb567-12"><a href="#cb567-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb567-13"><a href="#cb567-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb567-14"><a href="#cb567-14" aria-hidden="true" tabindex="-1"></a>- Hello *world*!</span> +<span id="cb567-15"><a href="#cb567-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb567-16"><a href="#cb567-16" aria-hidden="true" tabindex="-1"></a>_Foo_ bar!</span> +<span id="cb567-17"><a href="#cb567-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb567-18"><a href="#cb567-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb525"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb525-1"><a href="#cb525-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb568"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb568-1"><a href="#cb568-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> -<p>Hello <em>world</em>!</p> +<ul> +<li>Hello <em>world</em>!</li> +</ul> <p><em>(The end of a block)</em></p> <p><em>Foo</em> bar!</p> </blockquote> -<h5 class="unnumbered" id="context-example-44">Con<span +<h5 class="unnumbered" id="context-example-46">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb526"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb526-1"><a href="#cb526-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb526-2"><a href="#cb526-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> -<span id="cb526-3"><a href="#cb526-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb526-4"><a href="#cb526-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The end of a block)}<span class="co">%</span></span> -<span id="cb526-5"><a href="#cb526-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb526-6"><a href="#cb526-6" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb526-7"><a href="#cb526-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb526-8"><a href="#cb526-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb526-9"><a href="#cb526-9" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb526-10"><a href="#cb526-10" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb526-11"><a href="#cb526-11" aria-hidden="true" tabindex="-1"></a>_Foo_ bar!</span> -<span id="cb526-12"><a href="#cb526-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb526-13"><a href="#cb526-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb569"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb569-1"><a href="#cb569-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb569-2"><a href="#cb569-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> +<span id="cb569-3"><a href="#cb569-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb569-4"><a href="#cb569-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The end of a block)}<span class="co">%</span></span> +<span id="cb569-5"><a href="#cb569-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb569-6"><a href="#cb569-6" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb569-7"><a href="#cb569-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb569-8"><a href="#cb569-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb569-9"><a href="#cb569-9" aria-hidden="true" tabindex="-1"></a>- Hello *world*!</span> +<span id="cb569-10"><a href="#cb569-10" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb569-11"><a href="#cb569-11" aria-hidden="true" tabindex="-1"></a>_Foo_ bar!</span> +<span id="cb569-12"><a href="#cb569-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb569-13"><a href="#cb569-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb527"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb527-1"><a href="#cb527-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb570"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb570-1"><a href="#cb570-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> -<p>Hello <em>world</em>!</p> +<ul> +<li>Hello <em>world</em>!</li> +</ul> <p><em>(The end of a block)</em></p> <p><em>Foo</em> bar!</p> </blockquote> -<h4 data-number="2.3.1.21" id="line-block-renderer"><span -class="header-section-number">2.3.1.21</span> Line Block Renderer</h4> +<p>Users can use more than one blank line to delimit two block to +indicate the end of a series of blocks that make up a logical paragraph. +This produces a paragraph separator instead of an interblock separator. +Between some blocks, such as markdown paragraphs, a paragraph separator +is always produced.</p> +<p>The <code>\markdownRendererParagraphSeparator</code> macro represents +a paragraph separator. The macro receives no arguments.</p> +<h5 class="unnumbered" id="latex-example-78"><span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb571"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb571-1"><a href="#cb571-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb571-2"><a href="#cb571-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb571-3"><a href="#cb571-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb571-4"><a href="#cb571-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb571-5"><a href="#cb571-5" aria-hidden="true" tabindex="-1"></a> paragraphSeparator = {<span class="co">%</span></span> +<span id="cb571-6"><a href="#cb571-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb571-7"><a href="#cb571-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The end of a paragraph)}<span class="co">%</span></span> +<span id="cb571-8"><a href="#cb571-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb571-9"><a href="#cb571-9" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb571-10"><a href="#cb571-10" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb571-11"><a href="#cb571-11" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb571-12"><a href="#cb571-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb571-13"><a href="#cb571-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb571-14"><a href="#cb571-14" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> +<span id="cb571-15"><a href="#cb571-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb571-16"><a href="#cb571-16" aria-hidden="true" tabindex="-1"></a>_Foo_ bar!</span> +<span id="cb571-17"><a href="#cb571-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb571-18"><a href="#cb571-18" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb572"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb572-1"><a href="#cb572-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>Hello <em>world</em>!</p> +<p><em>(The end of a paragraph)</em></p> +<p><em>Foo</em> bar!</p> +</blockquote> +<h4 data-number="2.3.1.22" id="line-block-renderers"><span +class="header-section-number">2.3.1.22</span> Line Block Renderers</h4> <p>The following macros are only produced, when the <strong><code>lineBlocks</code></strong> option is enabled.</p> <p>The <code>\markdownRendererLineBlockBegin</code> and <code>\markdownRendererLineBlockEnd</code> macros represent the beginning and the end of a line block. The macros receive no arguments.</p> -<h5 class="unnumbered" id="plain-tex-example-31">Plain <span +<h5 class="unnumbered" id="plain-tex-example-34">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb528"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb528-1"><a href="#cb528-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb528-2"><a href="#cb528-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionLineBlocks</span>{true}</span> -<span id="cb528-3"><a href="#cb528-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb528-4"><a href="#cb528-4" aria-hidden="true" tabindex="-1"></a>| I would spread the cloths under your feet:</span> -<span id="cb528-5"><a href="#cb528-5" aria-hidden="true" tabindex="-1"></a>| But I, being poor, have only my dreams;</span> -<span id="cb528-6"><a href="#cb528-6" aria-hidden="true" tabindex="-1"></a>| I have spread my dreams under your feet;</span> -<span id="cb528-7"><a href="#cb528-7" aria-hidden="true" tabindex="-1"></a>| Tread softly because you tread on my dreams.</span> -<span id="cb528-8"><a href="#cb528-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb528-9"><a href="#cb528-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb573"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb573-1"><a href="#cb573-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb573-2"><a href="#cb573-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionLineBlocks</span>{true}</span> +<span id="cb573-3"><a href="#cb573-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb573-4"><a href="#cb573-4" aria-hidden="true" tabindex="-1"></a>| I would spread the cloths under your feet:</span> +<span id="cb573-5"><a href="#cb573-5" aria-hidden="true" tabindex="-1"></a>| But I, being poor, have only my dreams;</span> +<span id="cb573-6"><a href="#cb573-6" aria-hidden="true" tabindex="-1"></a>| I have spread my dreams under your feet;</span> +<span id="cb573-7"><a href="#cb573-7" aria-hidden="true" tabindex="-1"></a>| Tread softly because you tread on my dreams.</span> +<span id="cb573-8"><a href="#cb573-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb573-9"><a href="#cb573-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb529"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb529-1"><a href="#cb529-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb574"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb574-1"><a href="#cb574-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -9523,24 +10565,24 @@ But I, being poor, have only my dreams;<br /> I have spread my dreams under your feet;<br /> Tread softly because you tread on my dreams.</div> </blockquote> -<h5 class="unnumbered" id="latex-example-74"><span +<h5 class="unnumbered" id="latex-example-79"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb530"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb530-1"><a href="#cb530-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb530-2"><a href="#cb530-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[lineBlocks]{<span class="ex">markdown</span>}</span> -<span id="cb530-3"><a href="#cb530-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb530-4"><a href="#cb530-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb530-5"><a href="#cb530-5" aria-hidden="true" tabindex="-1"></a>| I would spread the cloths under your feet:</span> -<span id="cb530-6"><a href="#cb530-6" aria-hidden="true" tabindex="-1"></a>| But I, being poor, have only my dreams;</span> -<span id="cb530-7"><a href="#cb530-7" aria-hidden="true" tabindex="-1"></a>| I have spread my dreams under your feet;</span> -<span id="cb530-8"><a href="#cb530-8" aria-hidden="true" tabindex="-1"></a>| Tread softly because you tread on my dreams.</span> -<span id="cb530-9"><a href="#cb530-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb530-10"><a href="#cb530-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb575"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb575-1"><a href="#cb575-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb575-2"><a href="#cb575-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[lineBlocks]{<span class="ex">markdown</span>}</span> +<span id="cb575-3"><a href="#cb575-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb575-4"><a href="#cb575-4" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb575-5"><a href="#cb575-5" aria-hidden="true" tabindex="-1"></a>| I would spread the cloths under your feet:</span> +<span id="cb575-6"><a href="#cb575-6" aria-hidden="true" tabindex="-1"></a>| But I, being poor, have only my dreams;</span> +<span id="cb575-7"><a href="#cb575-7" aria-hidden="true" tabindex="-1"></a>| I have spread my dreams under your feet;</span> +<span id="cb575-8"><a href="#cb575-8" aria-hidden="true" tabindex="-1"></a>| Tread softly because you tread on my dreams.</span> +<span id="cb575-9"><a href="#cb575-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb575-10"><a href="#cb575-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb531"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb531-1"><a href="#cb531-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb576"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb576-1"><a href="#cb576-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -9549,24 +10591,24 @@ But I, being poor, have only my dreams;<br /> I have spread my dreams under your feet;<br /> Tread softly because you tread on my dreams.</div> </blockquote> -<h5 class="unnumbered" id="context-example-45">Con<span +<h5 class="unnumbered" id="context-example-47">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb532"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb532-1"><a href="#cb532-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb532-2"><a href="#cb532-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[lineBlocks = yes]</span> -<span id="cb532-3"><a href="#cb532-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb532-4"><a href="#cb532-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb532-5"><a href="#cb532-5" aria-hidden="true" tabindex="-1"></a>| I would spread the cloths under your feet:</span> -<span id="cb532-6"><a href="#cb532-6" aria-hidden="true" tabindex="-1"></a>| But I, being poor, have only my dreams;</span> -<span id="cb532-7"><a href="#cb532-7" aria-hidden="true" tabindex="-1"></a>| I have spread my dreams under your feet;</span> -<span id="cb532-8"><a href="#cb532-8" aria-hidden="true" tabindex="-1"></a>| Tread softly because you tread on my dreams.</span> -<span id="cb532-9"><a href="#cb532-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb532-10"><a href="#cb532-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb577"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb577-1"><a href="#cb577-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb577-2"><a href="#cb577-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[lineBlocks = yes]</span> +<span id="cb577-3"><a href="#cb577-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb577-4"><a href="#cb577-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb577-5"><a href="#cb577-5" aria-hidden="true" tabindex="-1"></a>| I would spread the cloths under your feet:</span> +<span id="cb577-6"><a href="#cb577-6" aria-hidden="true" tabindex="-1"></a>| But I, being poor, have only my dreams;</span> +<span id="cb577-7"><a href="#cb577-7" aria-hidden="true" tabindex="-1"></a>| I have spread my dreams under your feet;</span> +<span id="cb577-8"><a href="#cb577-8" aria-hidden="true" tabindex="-1"></a>| Tread softly because you tread on my dreams.</span> +<span id="cb577-9"><a href="#cb577-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb577-10"><a href="#cb577-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb533"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb533-1"><a href="#cb533-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb578"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb578-1"><a href="#cb578-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -9575,23 +10617,87 @@ But I, being poor, have only my dreams;<br /> I have spread my dreams under your feet;<br /> Tread softly because you tread on my dreams.</div> </blockquote> -<h4 data-number="2.3.1.22" id="line-break-renderer"><span -class="header-section-number">2.3.1.22</span> Line Break Renderer</h4> +<h4 data-number="2.3.1.23" id="line-break-renderers"><span +class="header-section-number">2.3.1.23</span> Line Break Renderers</h4> +<p>The <code>\markdownRendererSoftLineBreak</code> macro represents a +soft line break. The macro receives no arguments.</p> +<h5 class="unnumbered" id="plain-tex-example-35">Plain <span +class="tex">T<sub>e</sub>X</span> Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb579"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb579-1"><a href="#cb579-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb579-2"><a href="#cb579-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererSoftLineBreak</span>{<span class="co">%</span></span> +<span id="cb579-3"><a href="#cb579-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb579-4"><a href="#cb579-4" aria-hidden="true" tabindex="-1"></a> {<span class="fu">\it</span>(A soft line break)}<span class="co">%</span></span> +<span id="cb579-5"><a href="#cb579-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb579-6"><a href="#cb579-6" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb579-7"><a href="#cb579-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{example.md}</span> +<span id="cb579-8"><a href="#cb579-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<p>Using a text editor, create a text document named +<code>example.md</code> with the following content:</p> +<div class="sourceCode" id="cb580"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb580-1"><a href="#cb580-1" aria-hidden="true" tabindex="-1"></a>Hello world!</span> +<span id="cb580-2"><a href="#cb580-2" aria-hidden="true" tabindex="-1"></a>_Foo_ bar!</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb581"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb581-1"><a href="#cb581-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>Hello <em>world</em>!</p> +<p><em>(A soft line break)</em></p> +<p><em>Foo</em> bar!</p> +</blockquote> +<h5 class="unnumbered" id="latex-example-80"><span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb582"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb582-1"><a href="#cb582-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb582-2"><a href="#cb582-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb582-3"><a href="#cb582-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb582-4"><a href="#cb582-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb582-5"><a href="#cb582-5" aria-hidden="true" tabindex="-1"></a> softLineBreak = {<span class="co">%</span></span> +<span id="cb582-6"><a href="#cb582-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb582-7"><a href="#cb582-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(A soft line break)}<span class="co">%</span></span> +<span id="cb582-8"><a href="#cb582-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb582-9"><a href="#cb582-9" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb582-10"><a href="#cb582-10" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb582-11"><a href="#cb582-11" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb582-12"><a href="#cb582-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb582-13"><a href="#cb582-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{example.md}</span> +<span id="cb582-14"><a href="#cb582-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Using a text editor, create a text document named +<code>example.md</code> with the following content:</p> +<div class="sourceCode" id="cb583"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb583-1"><a href="#cb583-1" aria-hidden="true" tabindex="-1"></a>Hello world!</span> +<span id="cb583-2"><a href="#cb583-2" aria-hidden="true" tabindex="-1"></a>_Foo_ bar!</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb584"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb584-1"><a href="#cb584-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>Hello <em>world</em>!</p> +<p><em>(A soft line break)</em></p> +<p><em>Foo</em> bar!</p> +</blockquote> <p>The <code>\markdownRendererHardLineBreak</code> macro represents a hard line break. The macro receives no arguments.</p> -<h5 class="unnumbered" id="plain-tex-example-32">Plain <span +<h5 class="unnumbered" id="plain-tex-example-36">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb534"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb534-1"><a href="#cb534-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb534-2"><a href="#cb534-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHardLineBreak</span>{<span class="co">%</span></span> -<span id="cb534-3"><a href="#cb534-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb534-4"><a href="#cb534-4" aria-hidden="true" tabindex="-1"></a> {<span class="fu">\it</span>(A hard line break)}<span class="co">%</span></span> -<span id="cb534-5"><a href="#cb534-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb534-6"><a href="#cb534-6" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb534-7"><a href="#cb534-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{example.md}</span> -<span id="cb534-8"><a href="#cb534-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb585"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb585-1"><a href="#cb585-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb585-2"><a href="#cb585-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererHardLineBreak</span>{<span class="co">%</span></span> +<span id="cb585-3"><a href="#cb585-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb585-4"><a href="#cb585-4" aria-hidden="true" tabindex="-1"></a> {<span class="fu">\it</span>(A hard line break)}<span class="co">%</span></span> +<span id="cb585-5"><a href="#cb585-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb585-6"><a href="#cb585-6" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb585-7"><a href="#cb585-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{example.md}</span> +<span id="cb585-8"><a href="#cb585-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Using a text editor, create a text document named <code>example.md</code> with the following content. Note the two spaces at the end of the first line, which specify a hard line break. Due to @@ -9600,8 +10706,8 @@ processor, hard line breaks would be ignored if we typed them directly into the <code>document.tex</code> document.</p> <pre><code>Hello world! <br/>_Foo_ bar!</code></pre> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb535"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb535-1"><a href="#cb535-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb586"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb586-1"><a href="#cb586-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -9609,25 +10715,25 @@ contain the following text:</p> <p><em>(A hard line break)</em></p> <p><em>Foo</em> bar!</p> </blockquote> -<h5 class="unnumbered" id="latex-example-75"><span +<h5 class="unnumbered" id="latex-example-81"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb536"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb536-1"><a href="#cb536-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb536-2"><a href="#cb536-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb536-3"><a href="#cb536-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb536-4"><a href="#cb536-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb536-5"><a href="#cb536-5" aria-hidden="true" tabindex="-1"></a> hardLineBreak = {<span class="co">%</span></span> -<span id="cb536-6"><a href="#cb536-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb536-7"><a href="#cb536-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(A hard line break)}<span class="co">%</span></span> -<span id="cb536-8"><a href="#cb536-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb536-9"><a href="#cb536-9" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb536-10"><a href="#cb536-10" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb536-11"><a href="#cb536-11" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb536-12"><a href="#cb536-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb536-13"><a href="#cb536-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{example.md}</span> -<span id="cb536-14"><a href="#cb536-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb587"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb587-1"><a href="#cb587-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb587-2"><a href="#cb587-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb587-3"><a href="#cb587-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb587-4"><a href="#cb587-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb587-5"><a href="#cb587-5" aria-hidden="true" tabindex="-1"></a> hardLineBreak = {<span class="co">%</span></span> +<span id="cb587-6"><a href="#cb587-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb587-7"><a href="#cb587-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(A hard line break)}<span class="co">%</span></span> +<span id="cb587-8"><a href="#cb587-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb587-9"><a href="#cb587-9" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb587-10"><a href="#cb587-10" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb587-11"><a href="#cb587-11" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb587-12"><a href="#cb587-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb587-13"><a href="#cb587-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownInput</span>{example.md}</span> +<span id="cb587-14"><a href="#cb587-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Using a text editor, create a text document named <code>example.md</code> with the following content. Note the two spaces at the end of the first line, which specify a hard line break. Due to @@ -9636,8 +10742,8 @@ processor, hard line breaks would be ignored if we typed them directly into the <code>document.tex</code> document.</p> <pre><code>Hello world! <br/>_Foo_ bar!</code></pre> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb537"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb537-1"><a href="#cb537-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb588"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb588-1"><a href="#cb588-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -9645,31 +10751,31 @@ contain the following text:</p> <p><em>(A hard line break)</em></p> <p><em>Foo</em> bar!</p> </blockquote> -<h4 data-number="2.3.1.23" id="link-renderer"><span -class="header-section-number">2.3.1.23</span> Link Renderer</h4> +<h4 data-number="2.3.1.24" id="link-renderer"><span +class="header-section-number">2.3.1.24</span> Link Renderer</h4> <p>The <code>\markdownRendererLink</code> macro represents a hyperlink. It receives four arguments: the label, the fully escaped <abbr>uri</abbr> that can be directly typeset, the raw <abbr>uri</abbr> that can be used outside typesetting, and the title of the link.</p> -<h5 class="unnumbered" id="plain-tex-example-33">Plain <span +<h5 class="unnumbered" id="plain-tex-example-37">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb538"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb538-1"><a href="#cb538-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb538-2"><a href="#cb538-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererLink</span>#1#2#3#4{<span class="co">%</span></span> -<span id="cb538-3"><a href="#cb538-3" aria-hidden="true" tabindex="-1"></a> #1 {<span class="fu">\tt</span>#2} titled {<span class="fu">\it</span>#4}<span class="co">%</span></span> -<span id="cb538-4"><a href="#cb538-4" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb538-5"><a href="#cb538-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb538-6"><a href="#cb538-6" aria-hidden="true" tabindex="-1"></a>Please visit [the link][ctan].</span> -<span id="cb538-7"><a href="#cb538-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb538-8"><a href="#cb538-8" aria-hidden="true" tabindex="-1"></a> [ctan]: https://ctan.org/</span> -<span id="cb538-9"><a href="#cb538-9" aria-hidden="true" tabindex="-1"></a> (the Comprehensive TeX Archive Network)</span> -<span id="cb538-10"><a href="#cb538-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb538-11"><a href="#cb538-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb589"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb589-1"><a href="#cb589-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb589-2"><a href="#cb589-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererLink</span>#1#2#3#4{<span class="co">%</span></span> +<span id="cb589-3"><a href="#cb589-3" aria-hidden="true" tabindex="-1"></a> #1 {<span class="fu">\tt</span>#2} titled {<span class="fu">\it</span>#4}<span class="co">%</span></span> +<span id="cb589-4"><a href="#cb589-4" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb589-5"><a href="#cb589-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb589-6"><a href="#cb589-6" aria-hidden="true" tabindex="-1"></a>Please visit [the link][ctan].</span> +<span id="cb589-7"><a href="#cb589-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb589-8"><a href="#cb589-8" aria-hidden="true" tabindex="-1"></a> [ctan]: https://ctan.org/</span> +<span id="cb589-9"><a href="#cb589-9" aria-hidden="true" tabindex="-1"></a> (the Comprehensive TeX Archive Network)</span> +<span id="cb589-10"><a href="#cb589-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb589-11"><a href="#cb589-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb539"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb539-1"><a href="#cb539-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb590"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb590-1"><a href="#cb590-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -9677,31 +10783,31 @@ contain the following text:</p> class="uri">https://ctan.org/</a> titled <em>the Comprehensive TeX Archive Network</em>.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-76"><span +<h5 class="unnumbered" id="latex-example-82"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb540"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb540-1"><a href="#cb540-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb540-2"><a href="#cb540-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb540-3"><a href="#cb540-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb540-4"><a href="#cb540-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb540-5"><a href="#cb540-5" aria-hidden="true" tabindex="-1"></a> link = {<span class="co">%</span></span> -<span id="cb540-6"><a href="#cb540-6" aria-hidden="true" tabindex="-1"></a> #1 <span class="fu">\texttt</span>{#2} titled <span class="fu">\emph</span>{#4}<span class="co">%</span></span> -<span id="cb540-7"><a href="#cb540-7" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb540-8"><a href="#cb540-8" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb540-9"><a href="#cb540-9" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb540-10"><a href="#cb540-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb540-11"><a href="#cb540-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb540-12"><a href="#cb540-12" aria-hidden="true" tabindex="-1"></a>Please visit [the link][ctan].</span> -<span id="cb540-13"><a href="#cb540-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb540-14"><a href="#cb540-14" aria-hidden="true" tabindex="-1"></a> [ctan]: https://ctan.org/</span> -<span id="cb540-15"><a href="#cb540-15" aria-hidden="true" tabindex="-1"></a> (the Comprehensive TeX Archive Network)</span> -<span id="cb540-16"><a href="#cb540-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb540-17"><a href="#cb540-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb591"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb591-1"><a href="#cb591-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb591-2"><a href="#cb591-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb591-3"><a href="#cb591-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb591-4"><a href="#cb591-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb591-5"><a href="#cb591-5" aria-hidden="true" tabindex="-1"></a> link = {<span class="co">%</span></span> +<span id="cb591-6"><a href="#cb591-6" aria-hidden="true" tabindex="-1"></a> #1 <span class="fu">\texttt</span>{#2} titled <span class="fu">\emph</span>{#4}<span class="co">%</span></span> +<span id="cb591-7"><a href="#cb591-7" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb591-8"><a href="#cb591-8" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb591-9"><a href="#cb591-9" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb591-10"><a href="#cb591-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb591-11"><a href="#cb591-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb591-12"><a href="#cb591-12" aria-hidden="true" tabindex="-1"></a>Please visit [the link][ctan].</span> +<span id="cb591-13"><a href="#cb591-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb591-14"><a href="#cb591-14" aria-hidden="true" tabindex="-1"></a> [ctan]: https://ctan.org/</span> +<span id="cb591-15"><a href="#cb591-15" aria-hidden="true" tabindex="-1"></a> (the Comprehensive TeX Archive Network)</span> +<span id="cb591-16"><a href="#cb591-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb591-17"><a href="#cb591-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb541"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb541-1"><a href="#cb541-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb592"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb592-1"><a href="#cb592-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -9709,26 +10815,26 @@ contain the following text:</p> class="uri">https://ctan.org/</a> titled <em>the Comprehensive TeX Archive Network</em>.</p> </blockquote> -<h5 class="unnumbered" id="context-example-46">Con<span +<h5 class="unnumbered" id="context-example-48">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb542"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb542-1"><a href="#cb542-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb542-2"><a href="#cb542-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererLink</span>#1#2#3#4{<span class="co">%</span></span> -<span id="cb542-3"><a href="#cb542-3" aria-hidden="true" tabindex="-1"></a> #1 {<span class="fu">\tt</span>#2} titled <span class="fu">\emph</span>{#4}<span class="co">%</span></span> -<span id="cb542-4"><a href="#cb542-4" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb542-5"><a href="#cb542-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb542-6"><a href="#cb542-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb542-7"><a href="#cb542-7" aria-hidden="true" tabindex="-1"></a>Please visit [the link][ctan].</span> -<span id="cb542-8"><a href="#cb542-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb542-9"><a href="#cb542-9" aria-hidden="true" tabindex="-1"></a> [ctan]: https://ctan.org/</span> -<span id="cb542-10"><a href="#cb542-10" aria-hidden="true" tabindex="-1"></a> (the Comprehensive TeX Archive Network)</span> -<span id="cb542-11"><a href="#cb542-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb542-12"><a href="#cb542-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb593"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb593-1"><a href="#cb593-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb593-2"><a href="#cb593-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererLink</span>#1#2#3#4{<span class="co">%</span></span> +<span id="cb593-3"><a href="#cb593-3" aria-hidden="true" tabindex="-1"></a> #1 {<span class="fu">\tt</span>#2} titled <span class="fu">\emph</span>{#4}<span class="co">%</span></span> +<span id="cb593-4"><a href="#cb593-4" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb593-5"><a href="#cb593-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb593-6"><a href="#cb593-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb593-7"><a href="#cb593-7" aria-hidden="true" tabindex="-1"></a>Please visit [the link][ctan].</span> +<span id="cb593-8"><a href="#cb593-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb593-9"><a href="#cb593-9" aria-hidden="true" tabindex="-1"></a> [ctan]: https://ctan.org/</span> +<span id="cb593-10"><a href="#cb593-10" aria-hidden="true" tabindex="-1"></a> (the Comprehensive TeX Archive Network)</span> +<span id="cb593-11"><a href="#cb593-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb593-12"><a href="#cb593-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb543"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb543-1"><a href="#cb543-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb594"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb594-1"><a href="#cb594-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -9736,46 +10842,81 @@ contain the following text:</p> class="uri">https://ctan.org/</a> titled <em>the Comprehensive TeX Archive Network</em>.</p> </blockquote> -<h4 data-number="2.3.1.24" id="link-attribute-context-renderers"><span -class="header-section-number">2.3.1.24</span> Link Attribute Context +<h4 data-number="2.3.1.25" id="link-attribute-context-renderers"><span +class="header-section-number">2.3.1.25</span> Link Attribute Context Renderers</h4> <p>The following macros are only produced, when the <strong><code>linkAttributes</code></strong> option is enabled.</p> <p>The <code>\markdownRendererLinkAttributeContextBegin</code> and <code>\markdownRendererLinkAttributeContextEnd</code> macros represent -the beginning and the end of a hyperlink in which the attributes of the +the beginning and the end of a context in which the attributes of a hyperlink apply. The macros receive no arguments.</p> -<h5 class="unnumbered" id="latex-example-77"><span +<h5 class="unnumbered" id="latex-example-83"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb544"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb544-1"><a href="#cb544-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb544-2"><a href="#cb544-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[linkAttributes]{<span class="ex">markdown</span>}</span> -<span id="cb544-3"><a href="#cb544-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb544-4"><a href="#cb544-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb544-5"><a href="#cb544-5" aria-hidden="true" tabindex="-1"></a> linkAttributeContextBegin = {(},</span> -<span id="cb544-6"><a href="#cb544-6" aria-hidden="true" tabindex="-1"></a> link = {#1},</span> -<span id="cb544-7"><a href="#cb544-7" aria-hidden="true" tabindex="-1"></a> linkAttributeContextEnd = {)},</span> -<span id="cb544-8"><a href="#cb544-8" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb544-9"><a href="#cb544-9" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb544-10"><a href="#cb544-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb544-11"><a href="#cb544-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb544-12"><a href="#cb544-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb544-13"><a href="#cb544-13" aria-hidden="true" tabindex="-1"></a>foo [bar](#bar){key=value} baz</span> -<span id="cb544-14"><a href="#cb544-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb544-15"><a href="#cb544-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb544-16"><a href="#cb544-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb595"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb595-1"><a href="#cb595-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb595-2"><a href="#cb595-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[linkAttributes]{<span class="ex">markdown</span>}</span> +<span id="cb595-3"><a href="#cb595-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb595-4"><a href="#cb595-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb595-5"><a href="#cb595-5" aria-hidden="true" tabindex="-1"></a> linkAttributeContextBegin = {(},</span> +<span id="cb595-6"><a href="#cb595-6" aria-hidden="true" tabindex="-1"></a> link = {#1},</span> +<span id="cb595-7"><a href="#cb595-7" aria-hidden="true" tabindex="-1"></a> linkAttributeContextEnd = {)},</span> +<span id="cb595-8"><a href="#cb595-8" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb595-9"><a href="#cb595-9" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb595-10"><a href="#cb595-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb595-11"><a href="#cb595-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb595-12"><a href="#cb595-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb595-13"><a href="#cb595-13" aria-hidden="true" tabindex="-1"></a>foo [bar](#bar){key=value} baz</span> +<span id="cb595-14"><a href="#cb595-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb595-15"><a href="#cb595-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb595-16"><a href="#cb595-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb545"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb545-1"><a href="#cb545-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb596"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb596-1"><a href="#cb596-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>foo (bar) baz</p> </blockquote> -<h4 data-number="2.3.1.25" id="markdown-document-renderers"><span -class="header-section-number">2.3.1.25</span> Markdown Document +<h4 data-number="2.3.1.26" id="marked-text-renderer"><span +class="header-section-number">2.3.1.26</span> Marked Text Renderer</h4> +<p>The following macro is only produced, when the +<strong><code>mark</code></strong> option is enabled.</p> +<p>The <code>\markdownRendererMark</code> macro represents a span of +marked or highlighted text. The macro receives a single argument that +corresponds to the marked text.</p> +<h5 class="unnumbered" id="latex-example-84"><span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb597"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb597-1"><a href="#cb597-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb597-2"><a href="#cb597-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[mark]{<span class="ex">markdown</span>}</span> +<span id="cb597-3"><a href="#cb597-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">soul</span>}</span> +<span id="cb597-4"><a href="#cb597-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb597-5"><a href="#cb597-5" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb597-6"><a href="#cb597-6" aria-hidden="true" tabindex="-1"></a> mark = {<span class="fu">\hl</span>{#1}},</span> +<span id="cb597-7"><a href="#cb597-7" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb597-8"><a href="#cb597-8" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb597-9"><a href="#cb597-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb597-10"><a href="#cb597-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb597-11"><a href="#cb597-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb597-12"><a href="#cb597-12" aria-hidden="true" tabindex="-1"></a>This ==is highlighted text.==</span> +<span id="cb597-13"><a href="#cb597-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb597-14"><a href="#cb597-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb597-15"><a href="#cb597-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb598"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb598-1"><a href="#cb598-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>This <mark>is highlighted text.</mark></p> +</blockquote> +<h4 data-number="2.3.1.27" id="markdown-document-renderers"><span +class="header-section-number">2.3.1.27</span> Markdown Document Renderers</h4> <p>The <code>\markdownRendererDocumentBegin</code> and <code>\markdownRendererDocumentEnd</code> macros represent the beginning @@ -9786,81 +10927,81 @@ number of markdown documents. Additionally, markdown documents may appear not only in a sequence, but several markdown documents may also be <em>nested</em>. Redefinitions of the macros should take this into account.</p> -<h5 class="unnumbered" id="latex-example-78"><span +<h5 class="unnumbered" id="latex-example-85"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>nested.md</code> with the following content:</p> -<div class="sourceCode" id="cb546"><pre -class="sourceCode md"><code class="sourceCode markdown"><span id="cb546-1"><a href="#cb546-1" aria-hidden="true" tabindex="-1"></a>This is a *nested* markdown document.</span></code></pre></div> +<div class="sourceCode" id="cb599"><pre +class="sourceCode md"><code class="sourceCode markdown"><span id="cb599-1"><a href="#cb599-1" aria-hidden="true" tabindex="-1"></a>This is a *nested* markdown document.</span></code></pre></div> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb547"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb547-1"><a href="#cb547-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb547-2"><a href="#cb547-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[contentBlocks]{<span class="ex">markdown</span>}</span> -<span id="cb547-3"><a href="#cb547-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb547-4"><a href="#cb547-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb547-5"><a href="#cb547-5" aria-hidden="true" tabindex="-1"></a> contentBlock = {<span class="co">%</span></span> -<span id="cb547-6"><a href="#cb547-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownInput</span>{#3}<span class="co">%</span></span> -<span id="cb547-7"><a href="#cb547-7" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb547-8"><a href="#cb547-8" aria-hidden="true" tabindex="-1"></a> documentBegin = {<span class="co">%</span></span> -<span id="cb547-9"><a href="#cb547-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb547-10"><a href="#cb547-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The beginning of a document)}</span> -<span id="cb547-11"><a href="#cb547-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb547-12"><a href="#cb547-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\begingroup</span></span> -<span id="cb547-13"><a href="#cb547-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{snippet=first-nesting-level}<span class="co">%</span></span> -<span id="cb547-14"><a href="#cb547-14" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb547-15"><a href="#cb547-15" aria-hidden="true" tabindex="-1"></a> documentEnd = {<span class="co">%</span></span> -<span id="cb547-16"><a href="#cb547-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">\endgroup</span></span> -<span id="cb547-17"><a href="#cb547-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb547-18"><a href="#cb547-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The end of a document)}</span> -<span id="cb547-19"><a href="#cb547-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb547-20"><a href="#cb547-20" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb547-21"><a href="#cb547-21" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb547-22"><a href="#cb547-22" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb547-23"><a href="#cb547-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetupSnippet</span>{first-nesting-level}{</span> -<span id="cb547-24"><a href="#cb547-24" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb547-25"><a href="#cb547-25" aria-hidden="true" tabindex="-1"></a> documentBegin = {</span> -<span id="cb547-26"><a href="#cb547-26" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb547-27"><a href="#cb547-27" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The beginning of a nested document)}</span> -<span id="cb547-28"><a href="#cb547-28" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb547-29"><a href="#cb547-29" aria-hidden="true" tabindex="-1"></a> <span class="fu">\begingroup</span></span> -<span id="cb547-30"><a href="#cb547-30" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{snippet=second-nesting-level-and-below}</span> -<span id="cb547-31"><a href="#cb547-31" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb547-32"><a href="#cb547-32" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb547-33"><a href="#cb547-33" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb547-34"><a href="#cb547-34" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetupSnippet</span>{second-nesting-level-and-below}{</span> -<span id="cb547-35"><a href="#cb547-35" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb547-36"><a href="#cb547-36" aria-hidden="true" tabindex="-1"></a> documentBegin = {</span> -<span id="cb547-37"><a href="#cb547-37" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb547-38"><a href="#cb547-38" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The beginning of a nested document)}</span> -<span id="cb547-39"><a href="#cb547-39" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb547-40"><a href="#cb547-40" aria-hidden="true" tabindex="-1"></a> <span class="fu">\begingroup</span></span> -<span id="cb547-41"><a href="#cb547-41" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb547-42"><a href="#cb547-42" aria-hidden="true" tabindex="-1"></a> documentEnd = {</span> -<span id="cb547-43"><a href="#cb547-43" aria-hidden="true" tabindex="-1"></a> <span class="fu">\endgroup</span></span> -<span id="cb547-44"><a href="#cb547-44" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb547-45"><a href="#cb547-45" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The end of a nested document)}</span> -<span id="cb547-46"><a href="#cb547-46" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> -<span id="cb547-47"><a href="#cb547-47" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb547-48"><a href="#cb547-48" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb547-49"><a href="#cb547-49" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb547-50"><a href="#cb547-50" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb547-51"><a href="#cb547-51" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb547-52"><a href="#cb547-52" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> -<span id="cb547-53"><a href="#cb547-53" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb547-54"><a href="#cb547-54" aria-hidden="true" tabindex="-1"></a>/nested.md</span> -<span id="cb547-55"><a href="#cb547-55" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb547-56"><a href="#cb547-56" aria-hidden="true" tabindex="-1"></a>_Foo_ bar!</span> -<span id="cb547-57"><a href="#cb547-57" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb547-58"><a href="#cb547-58" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb547-59"><a href="#cb547-59" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb547-60"><a href="#cb547-60" aria-hidden="true" tabindex="-1"></a>Bar baz!</span> -<span id="cb547-61"><a href="#cb547-61" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb547-62"><a href="#cb547-62" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb547-63"><a href="#cb547-63" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb600"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb600-1"><a href="#cb600-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb600-2"><a href="#cb600-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[contentBlocks]{<span class="ex">markdown</span>}</span> +<span id="cb600-3"><a href="#cb600-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb600-4"><a href="#cb600-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb600-5"><a href="#cb600-5" aria-hidden="true" tabindex="-1"></a> contentBlock = {<span class="co">%</span></span> +<span id="cb600-6"><a href="#cb600-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownInput</span>{#3}<span class="co">%</span></span> +<span id="cb600-7"><a href="#cb600-7" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb600-8"><a href="#cb600-8" aria-hidden="true" tabindex="-1"></a> documentBegin = {<span class="co">%</span></span> +<span id="cb600-9"><a href="#cb600-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb600-10"><a href="#cb600-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The beginning of a document)}</span> +<span id="cb600-11"><a href="#cb600-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb600-12"><a href="#cb600-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\begingroup</span></span> +<span id="cb600-13"><a href="#cb600-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{snippet=first-nesting-level}<span class="co">%</span></span> +<span id="cb600-14"><a href="#cb600-14" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb600-15"><a href="#cb600-15" aria-hidden="true" tabindex="-1"></a> documentEnd = {<span class="co">%</span></span> +<span id="cb600-16"><a href="#cb600-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">\endgroup</span></span> +<span id="cb600-17"><a href="#cb600-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb600-18"><a href="#cb600-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The end of a document)}</span> +<span id="cb600-19"><a href="#cb600-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb600-20"><a href="#cb600-20" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb600-21"><a href="#cb600-21" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb600-22"><a href="#cb600-22" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb600-23"><a href="#cb600-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetupSnippet</span>{first-nesting-level}{</span> +<span id="cb600-24"><a href="#cb600-24" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb600-25"><a href="#cb600-25" aria-hidden="true" tabindex="-1"></a> documentBegin = {</span> +<span id="cb600-26"><a href="#cb600-26" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb600-27"><a href="#cb600-27" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The beginning of a nested document)}</span> +<span id="cb600-28"><a href="#cb600-28" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb600-29"><a href="#cb600-29" aria-hidden="true" tabindex="-1"></a> <span class="fu">\begingroup</span></span> +<span id="cb600-30"><a href="#cb600-30" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{snippet=second-nesting-level-and-below}</span> +<span id="cb600-31"><a href="#cb600-31" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb600-32"><a href="#cb600-32" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb600-33"><a href="#cb600-33" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb600-34"><a href="#cb600-34" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetupSnippet</span>{second-nesting-level-and-below}{</span> +<span id="cb600-35"><a href="#cb600-35" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb600-36"><a href="#cb600-36" aria-hidden="true" tabindex="-1"></a> documentBegin = {</span> +<span id="cb600-37"><a href="#cb600-37" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb600-38"><a href="#cb600-38" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The beginning of a nested document)}</span> +<span id="cb600-39"><a href="#cb600-39" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb600-40"><a href="#cb600-40" aria-hidden="true" tabindex="-1"></a> <span class="fu">\begingroup</span></span> +<span id="cb600-41"><a href="#cb600-41" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb600-42"><a href="#cb600-42" aria-hidden="true" tabindex="-1"></a> documentEnd = {</span> +<span id="cb600-43"><a href="#cb600-43" aria-hidden="true" tabindex="-1"></a> <span class="fu">\endgroup</span></span> +<span id="cb600-44"><a href="#cb600-44" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb600-45"><a href="#cb600-45" aria-hidden="true" tabindex="-1"></a> <span class="fu">\emph</span>{(The end of a nested document)}</span> +<span id="cb600-46"><a href="#cb600-46" aria-hidden="true" tabindex="-1"></a> <span class="fu">\par</span></span> +<span id="cb600-47"><a href="#cb600-47" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb600-48"><a href="#cb600-48" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb600-49"><a href="#cb600-49" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb600-50"><a href="#cb600-50" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb600-51"><a href="#cb600-51" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb600-52"><a href="#cb600-52" aria-hidden="true" tabindex="-1"></a>Hello *world*!</span> +<span id="cb600-53"><a href="#cb600-53" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb600-54"><a href="#cb600-54" aria-hidden="true" tabindex="-1"></a>/nested.md</span> +<span id="cb600-55"><a href="#cb600-55" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb600-56"><a href="#cb600-56" aria-hidden="true" tabindex="-1"></a>_Foo_ bar!</span> +<span id="cb600-57"><a href="#cb600-57" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb600-58"><a href="#cb600-58" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb600-59"><a href="#cb600-59" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb600-60"><a href="#cb600-60" aria-hidden="true" tabindex="-1"></a>Bar baz!</span> +<span id="cb600-61"><a href="#cb600-61" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb600-62"><a href="#cb600-62" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb600-63"><a href="#cb600-63" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb548"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb548-1"><a href="#cb548-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb601"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb601-1"><a href="#cb601-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -9875,51 +11016,51 @@ contain the following text:</p> <p>Bar baz!</p> <p><em>(The end of a document)</em></p> </blockquote> -<h4 data-number="2.3.1.26" id="non-breaking-space-renderer"><span -class="header-section-number">2.3.1.26</span> Non-Breaking Space +<h4 data-number="2.3.1.28" id="non-breaking-space-renderer"><span +class="header-section-number">2.3.1.28</span> Non-Breaking Space Renderer</h4> <p>The <code>\markdownRendererNbsp</code> macro represents a non-breaking space.</p> -<h5 class="unnumbered" id="latex-example-79"><span +<h5 class="unnumbered" id="latex-example-86"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.bib</code> with the following content:</p> -<div class="sourceCode" id="cb549"><pre -class="sourceCode bib"><code class="sourceCode bibtex"><span id="cb549-1"><a href="#cb549-1" aria-hidden="true" tabindex="-1"></a><span class="va">@book</span>{<span class="ot">knuth:tex</span>,</span> -<span id="cb549-2"><a href="#cb549-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">author</span> = "<span class="st">Knuth, Donald Ervin</span>",</span> -<span id="cb549-3"><a href="#cb549-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">title</span> = "<span class="st">The </span><span class="ch">\TeX</span><span class="st"> book, volume A of Computers and typesetting</span>",</span> -<span id="cb549-4"><a href="#cb549-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">publisher</span> = "<span class="st">Addison-Wesley</span>",</span> -<span id="cb549-5"><a href="#cb549-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">year</span> = "<span class="st">1984</span>"</span> -<span id="cb549-6"><a href="#cb549-6" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> +<div class="sourceCode" id="cb602"><pre +class="sourceCode bib"><code class="sourceCode bibtex"><span id="cb602-1"><a href="#cb602-1" aria-hidden="true" tabindex="-1"></a><span class="va">@book</span>{<span class="ot">knuth:tex</span>,</span> +<span id="cb602-2"><a href="#cb602-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">author</span> = "<span class="st">Knuth, Donald Ervin</span>",</span> +<span id="cb602-3"><a href="#cb602-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">title</span> = "<span class="st">The </span><span class="ch">\TeX</span><span class="st"> book, volume A of Computers and typesetting</span>",</span> +<span id="cb602-4"><a href="#cb602-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">publisher</span> = "<span class="st">Addison-Wesley</span>",</span> +<span id="cb602-5"><a href="#cb602-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">year</span> = "<span class="st">1984</span>"</span> +<span id="cb602-6"><a href="#cb602-6" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb550"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb550-1"><a href="#cb550-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb550-2"><a href="#cb550-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[</span> -<span id="cb550-3"><a href="#cb550-3" aria-hidden="true" tabindex="-1"></a> citations,</span> -<span id="cb550-4"><a href="#cb550-4" aria-hidden="true" tabindex="-1"></a> citationNbsps,</span> -<span id="cb550-5"><a href="#cb550-5" aria-hidden="true" tabindex="-1"></a>]{<span class="ex">markdown</span>}</span> -<span id="cb550-6"><a href="#cb550-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb550-7"><a href="#cb550-7" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb550-8"><a href="#cb550-8" aria-hidden="true" tabindex="-1"></a> nbsp = {<span class="ss">$</span><span class="sc">\cdot</span><span class="ss">$</span>},</span> -<span id="cb550-9"><a href="#cb550-9" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb550-10"><a href="#cb550-10" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb550-11"><a href="#cb550-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb550-12"><a href="#cb550-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb550-13"><a href="#cb550-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb550-14"><a href="#cb550-14" aria-hidden="true" tabindex="-1"></a>The TeXbook [@knuth:tex, p. 123 and 130] is good.</span> -<span id="cb550-15"><a href="#cb550-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb550-16"><a href="#cb550-16" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb550-17"><a href="#cb550-17" aria-hidden="true" tabindex="-1"></a><span class="bu">\bibliographystyle</span>{<span class="ex">plain</span>}</span> -<span id="cb550-18"><a href="#cb550-18" aria-hidden="true" tabindex="-1"></a><span class="bu">\bibliography</span>{<span class="ex">document.bib</span>}</span> -<span id="cb550-19"><a href="#cb550-19" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb550-20"><a href="#cb550-20" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb603"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb603-1"><a href="#cb603-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb603-2"><a href="#cb603-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[</span> +<span id="cb603-3"><a href="#cb603-3" aria-hidden="true" tabindex="-1"></a> citations,</span> +<span id="cb603-4"><a href="#cb603-4" aria-hidden="true" tabindex="-1"></a> citationNbsps,</span> +<span id="cb603-5"><a href="#cb603-5" aria-hidden="true" tabindex="-1"></a>]{<span class="ex">markdown</span>}</span> +<span id="cb603-6"><a href="#cb603-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb603-7"><a href="#cb603-7" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb603-8"><a href="#cb603-8" aria-hidden="true" tabindex="-1"></a> nbsp = {<span class="ss">$</span><span class="sc">\cdot</span><span class="ss">$</span>},</span> +<span id="cb603-9"><a href="#cb603-9" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb603-10"><a href="#cb603-10" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb603-11"><a href="#cb603-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb603-12"><a href="#cb603-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb603-13"><a href="#cb603-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb603-14"><a href="#cb603-14" aria-hidden="true" tabindex="-1"></a>The TeXbook [@knuth:tex, p. 123 and 130] is good.</span> +<span id="cb603-15"><a href="#cb603-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb603-16"><a href="#cb603-16" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb603-17"><a href="#cb603-17" aria-hidden="true" tabindex="-1"></a><span class="bu">\bibliographystyle</span>{<span class="ex">plain</span>}</span> +<span id="cb603-18"><a href="#cb603-18" aria-hidden="true" tabindex="-1"></a><span class="bu">\bibliography</span>{<span class="ex">document.bib</span>}</span> +<span id="cb603-19"><a href="#cb603-19" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb603-20"><a href="#cb603-20" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX and BibTeX from the terminal:</p> -<div class="sourceCode" id="cb551"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb551-1"><a href="#cb551-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> -<span id="cb551-2"><a href="#cb551-2" aria-hidden="true" tabindex="-1"></a><span class="ex">bibtex</span> document.aux</span> -<span id="cb551-3"><a href="#cb551-3" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> -<span id="cb551-4"><a href="#cb551-4" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb604"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb604-1"><a href="#cb604-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> +<span id="cb604-2"><a href="#cb604-2" aria-hidden="true" tabindex="-1"></a><span class="ex">bibtex</span> document.aux</span> +<span id="cb604-3"><a href="#cb604-3" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span> +<span id="cb604-4"><a href="#cb604-4" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -9930,95 +11071,95 @@ href="https://datatracker.ietf.org/doc/html/rfc3986#section-4.2">1</a> Donald Ervin Knuth. <em>The TeXbook, volume A of Computers and typesetting.</em> Addison-Wesley, 1984.</p> </blockquote> -<h4 data-number="2.3.1.27" id="note-renderer"><span -class="header-section-number">2.3.1.27</span> Note Renderer</h4> +<h4 data-number="2.3.1.29" id="note-renderer"><span +class="header-section-number">2.3.1.29</span> Note Renderer</h4> <p>The <code>\markdownRendererNote</code> macro represents a note. This macro will only be produced, when the <strong><code>notes</code></strong> option is enabled. The macro receives a single argument that corresponds to the note text.</p> -<h5 class="unnumbered" id="plain-tex-example-34">Plain <span +<h5 class="unnumbered" id="plain-tex-example-38">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb552"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb552-1"><a href="#cb552-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb552-2"><a href="#cb552-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionNotes</span>{true}</span> -<span id="cb552-3"><a href="#cb552-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererNote</span>#1{ (and <span class="fu">\lowercase</span>{#1})}</span> -<span id="cb552-4"><a href="#cb552-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb552-5"><a href="#cb552-5" aria-hidden="true" tabindex="-1"></a>This is some text[^1] and this is some other text[^2].</span> -<span id="cb552-6"><a href="#cb552-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb552-7"><a href="#cb552-7" aria-hidden="true" tabindex="-1"></a> [^1]: this is a note</span> -<span id="cb552-8"><a href="#cb552-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb552-9"><a href="#cb552-9" aria-hidden="true" tabindex="-1"></a> [^2]: this is some other note</span> -<span id="cb552-10"><a href="#cb552-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb552-11"><a href="#cb552-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb605"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb605-1"><a href="#cb605-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb605-2"><a href="#cb605-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionNotes</span>{true}</span> +<span id="cb605-3"><a href="#cb605-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererNote</span>#1{ (and <span class="fu">\lowercase</span>{#1})}</span> +<span id="cb605-4"><a href="#cb605-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb605-5"><a href="#cb605-5" aria-hidden="true" tabindex="-1"></a>This is some text[^1] and this is some other text[^2].</span> +<span id="cb605-6"><a href="#cb605-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb605-7"><a href="#cb605-7" aria-hidden="true" tabindex="-1"></a> [^1]: this is a note</span> +<span id="cb605-8"><a href="#cb605-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb605-9"><a href="#cb605-9" aria-hidden="true" tabindex="-1"></a> [^2]: this is some other note</span> +<span id="cb605-10"><a href="#cb605-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb605-11"><a href="#cb605-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb553"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb553-1"><a href="#cb553-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb606"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb606-1"><a href="#cb606-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>This is some text (and this is a note) and this is some other text (and this is some other note).</p> </blockquote> -<h5 class="unnumbered" id="latex-example-80"><span +<h5 class="unnumbered" id="latex-example-87"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb554"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb554-1"><a href="#cb554-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb554-2"><a href="#cb554-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[notes]{<span class="ex">markdown</span>}</span> -<span id="cb554-3"><a href="#cb554-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb554-4"><a href="#cb554-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb554-5"><a href="#cb554-5" aria-hidden="true" tabindex="-1"></a> note = { (and <span class="fu">\MakeLowercase</span>{#1})},</span> -<span id="cb554-6"><a href="#cb554-6" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb554-7"><a href="#cb554-7" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb554-8"><a href="#cb554-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb554-9"><a href="#cb554-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb554-10"><a href="#cb554-10" aria-hidden="true" tabindex="-1"></a>This is some text[^1] and this is some other text[^2].</span> -<span id="cb554-11"><a href="#cb554-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb554-12"><a href="#cb554-12" aria-hidden="true" tabindex="-1"></a> [^1]: this is a note</span> -<span id="cb554-13"><a href="#cb554-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb554-14"><a href="#cb554-14" aria-hidden="true" tabindex="-1"></a> [^2]: this is some other note</span> -<span id="cb554-15"><a href="#cb554-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb554-16"><a href="#cb554-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb607"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb607-1"><a href="#cb607-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb607-2"><a href="#cb607-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[notes]{<span class="ex">markdown</span>}</span> +<span id="cb607-3"><a href="#cb607-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb607-4"><a href="#cb607-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb607-5"><a href="#cb607-5" aria-hidden="true" tabindex="-1"></a> note = { (and <span class="fu">\MakeLowercase</span>{#1})},</span> +<span id="cb607-6"><a href="#cb607-6" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb607-7"><a href="#cb607-7" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb607-8"><a href="#cb607-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb607-9"><a href="#cb607-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb607-10"><a href="#cb607-10" aria-hidden="true" tabindex="-1"></a>This is some text[^1] and this is some other text[^2].</span> +<span id="cb607-11"><a href="#cb607-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb607-12"><a href="#cb607-12" aria-hidden="true" tabindex="-1"></a> [^1]: this is a note</span> +<span id="cb607-13"><a href="#cb607-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb607-14"><a href="#cb607-14" aria-hidden="true" tabindex="-1"></a> [^2]: this is some other note</span> +<span id="cb607-15"><a href="#cb607-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb607-16"><a href="#cb607-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb555"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb555-1"><a href="#cb555-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb608"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb608-1"><a href="#cb608-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>This is some text (and this is a note) and this is some other text (and this is some other note).</p> </blockquote> -<h5 class="unnumbered" id="context-example-47">Con<span +<h5 class="unnumbered" id="context-example-49">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb556"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb556-1"><a href="#cb556-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb556-2"><a href="#cb556-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[notes = yes]</span> -<span id="cb556-3"><a href="#cb556-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererNote</span>#1{ (and <span class="fu">\lowercase</span>{#1})}</span> -<span id="cb556-4"><a href="#cb556-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb556-5"><a href="#cb556-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb556-6"><a href="#cb556-6" aria-hidden="true" tabindex="-1"></a>This is some text[^1] and this is some other text[^2].</span> -<span id="cb556-7"><a href="#cb556-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb556-8"><a href="#cb556-8" aria-hidden="true" tabindex="-1"></a> [^1]: this is a note</span> -<span id="cb556-9"><a href="#cb556-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb556-10"><a href="#cb556-10" aria-hidden="true" tabindex="-1"></a> [^2]: this is some other note</span> -<span id="cb556-11"><a href="#cb556-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb556-12"><a href="#cb556-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb609"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb609-1"><a href="#cb609-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb609-2"><a href="#cb609-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[notes = yes]</span> +<span id="cb609-3"><a href="#cb609-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererNote</span>#1{ (and <span class="fu">\lowercase</span>{#1})}</span> +<span id="cb609-4"><a href="#cb609-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb609-5"><a href="#cb609-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb609-6"><a href="#cb609-6" aria-hidden="true" tabindex="-1"></a>This is some text[^1] and this is some other text[^2].</span> +<span id="cb609-7"><a href="#cb609-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb609-8"><a href="#cb609-8" aria-hidden="true" tabindex="-1"></a> [^1]: this is a note</span> +<span id="cb609-9"><a href="#cb609-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb609-10"><a href="#cb609-10" aria-hidden="true" tabindex="-1"></a> [^2]: this is some other note</span> +<span id="cb609-11"><a href="#cb609-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb609-12"><a href="#cb609-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb557"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb557-1"><a href="#cb557-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb610"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb610-1"><a href="#cb610-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>This is some text (and this is a note) and this is some other text (and this is some other note).</p> </blockquote> -<h4 data-number="2.3.1.28" id="ordered-list-renderers"><span -class="header-section-number">2.3.1.28</span> Ordered List +<h4 data-number="2.3.1.30" id="ordered-list-renderers"><span +class="header-section-number">2.3.1.30</span> Ordered List Renderers</h4> <p>The <code>\markdownRendererOlBegin</code> macro represents the beginning of an ordered list that contains an item with several @@ -10102,74 +11243,74 @@ paragraphs of text (the list is tight). This macro will only be produced, when the <strong><code>fancyLists</code></strong> and <strong><code>tightLists</code></strong> options are enabled. The macro receives no arguments.</p> -<h5 class="unnumbered" id="plain-tex-example-35">Plain <span +<h5 class="unnumbered" id="plain-tex-example-39">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb558"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb558-1"><a href="#cb558-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb558-2"><a href="#cb558-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTightLists</span>{true}</span> -<span id="cb558-3"><a href="#cb558-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionStartNumber</span>{true}</span> -<span id="cb558-4"><a href="#cb558-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb558-5"><a href="#cb558-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{}</span> -<span id="cb558-6"><a href="#cb558-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlBeginTight</span>{ (}</span> -<span id="cb558-7"><a href="#cb558-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemWithNumber</span>#1{<span class="co">%</span></span> -<span id="cb558-8"><a href="#cb558-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=1<span class="fu">\relax</span></span> -<span id="cb558-9"><a href="#cb558-9" aria-hidden="true" tabindex="-1"></a> the first</span> -<span id="cb558-10"><a href="#cb558-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb558-11"><a href="#cb558-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=2<span class="fu">\relax</span></span> -<span id="cb558-12"><a href="#cb558-12" aria-hidden="true" tabindex="-1"></a> , the second</span> -<span id="cb558-13"><a href="#cb558-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb558-14"><a href="#cb558-14" aria-hidden="true" tabindex="-1"></a> , and the third</span> -<span id="cb558-15"><a href="#cb558-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb558-16"><a href="#cb558-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb558-17"><a href="#cb558-17" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb558-18"><a href="#cb558-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemEnd</span>{}</span> -<span id="cb558-19"><a href="#cb558-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlEndTight</span>{).}</span> -<span id="cb558-20"><a href="#cb558-20" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb558-21"><a href="#cb558-21" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb558-22"><a href="#cb558-22" aria-hidden="true" tabindex="-1"></a>This is a tight list</span> -<span id="cb558-23"><a href="#cb558-23" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb558-24"><a href="#cb558-24" aria-hidden="true" tabindex="-1"></a>1. item</span> -<span id="cb558-25"><a href="#cb558-25" aria-hidden="true" tabindex="-1"></a>2. item</span> -<span id="cb558-26"><a href="#cb558-26" aria-hidden="true" tabindex="-1"></a>3. item</span> -<span id="cb558-27"><a href="#cb558-27" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb558-28"><a href="#cb558-28" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb558-29"><a href="#cb558-29" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> -<span id="cb558-30"><a href="#cb558-30" aria-hidden="true" tabindex="-1"></a> :<span class="fu">\par</span></span> -<span id="cb558-31"><a href="#cb558-31" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> -<span id="cb558-32"><a href="#cb558-32" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb558-33"><a href="#cb558-33" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlBegin</span>{}</span> -<span id="cb558-34"><a href="#cb558-34" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemWithNumber</span>#1{<span class="co">%</span></span> -<span id="cb558-35"><a href="#cb558-35" aria-hidden="true" tabindex="-1"></a> #1.<span class="fu">\kern</span> 0.5em<span class="co">%</span></span> -<span id="cb558-36"><a href="#cb558-36" aria-hidden="true" tabindex="-1"></a> This is the</span> -<span id="cb558-37"><a href="#cb558-37" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=1<span class="fu">\relax</span></span> -<span id="cb558-38"><a href="#cb558-38" aria-hidden="true" tabindex="-1"></a> first</span> -<span id="cb558-39"><a href="#cb558-39" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb558-40"><a href="#cb558-40" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=2<span class="fu">\relax</span></span> -<span id="cb558-41"><a href="#cb558-41" aria-hidden="true" tabindex="-1"></a> second</span> -<span id="cb558-42"><a href="#cb558-42" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb558-43"><a href="#cb558-43" aria-hidden="true" tabindex="-1"></a> third</span> -<span id="cb558-44"><a href="#cb558-44" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb558-45"><a href="#cb558-45" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb558-46"><a href="#cb558-46" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb558-47"><a href="#cb558-47" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemEnd</span>{.<span class="fu">\par</span>}</span> -<span id="cb558-48"><a href="#cb558-48" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlEnd</span>{}</span> -<span id="cb558-49"><a href="#cb558-49" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb558-50"><a href="#cb558-50" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb558-51"><a href="#cb558-51" aria-hidden="true" tabindex="-1"></a>This is a loose list</span> -<span id="cb558-52"><a href="#cb558-52" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb558-53"><a href="#cb558-53" aria-hidden="true" tabindex="-1"></a>1. item</span> -<span id="cb558-54"><a href="#cb558-54" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb558-55"><a href="#cb558-55" aria-hidden="true" tabindex="-1"></a>2. item</span> -<span id="cb558-56"><a href="#cb558-56" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb558-57"><a href="#cb558-57" aria-hidden="true" tabindex="-1"></a>3. item</span> -<span id="cb558-58"><a href="#cb558-58" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb558-59"><a href="#cb558-59" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb558-60"><a href="#cb558-60" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb611"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb611-1"><a href="#cb611-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb611-2"><a href="#cb611-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTightLists</span>{true}</span> +<span id="cb611-3"><a href="#cb611-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionStartNumber</span>{true}</span> +<span id="cb611-4"><a href="#cb611-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb611-5"><a href="#cb611-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{}</span> +<span id="cb611-6"><a href="#cb611-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlBeginTight</span>{ (}</span> +<span id="cb611-7"><a href="#cb611-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemWithNumber</span>#1{<span class="co">%</span></span> +<span id="cb611-8"><a href="#cb611-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=1<span class="fu">\relax</span></span> +<span id="cb611-9"><a href="#cb611-9" aria-hidden="true" tabindex="-1"></a> the first</span> +<span id="cb611-10"><a href="#cb611-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb611-11"><a href="#cb611-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=2<span class="fu">\relax</span></span> +<span id="cb611-12"><a href="#cb611-12" aria-hidden="true" tabindex="-1"></a> , the second</span> +<span id="cb611-13"><a href="#cb611-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb611-14"><a href="#cb611-14" aria-hidden="true" tabindex="-1"></a> , and the third</span> +<span id="cb611-15"><a href="#cb611-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb611-16"><a href="#cb611-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb611-17"><a href="#cb611-17" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb611-18"><a href="#cb611-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemEnd</span>{}</span> +<span id="cb611-19"><a href="#cb611-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlEndTight</span>{).}</span> +<span id="cb611-20"><a href="#cb611-20" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb611-21"><a href="#cb611-21" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb611-22"><a href="#cb611-22" aria-hidden="true" tabindex="-1"></a>This is a tight list</span> +<span id="cb611-23"><a href="#cb611-23" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb611-24"><a href="#cb611-24" aria-hidden="true" tabindex="-1"></a>1. item</span> +<span id="cb611-25"><a href="#cb611-25" aria-hidden="true" tabindex="-1"></a>2. item</span> +<span id="cb611-26"><a href="#cb611-26" aria-hidden="true" tabindex="-1"></a>3. item</span> +<span id="cb611-27"><a href="#cb611-27" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb611-28"><a href="#cb611-28" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb611-29"><a href="#cb611-29" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> +<span id="cb611-30"><a href="#cb611-30" aria-hidden="true" tabindex="-1"></a> :<span class="fu">\par</span></span> +<span id="cb611-31"><a href="#cb611-31" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> +<span id="cb611-32"><a href="#cb611-32" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb611-33"><a href="#cb611-33" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlBegin</span>{}</span> +<span id="cb611-34"><a href="#cb611-34" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemWithNumber</span>#1{<span class="co">%</span></span> +<span id="cb611-35"><a href="#cb611-35" aria-hidden="true" tabindex="-1"></a> #1.<span class="fu">\kern</span> 0.5em<span class="co">%</span></span> +<span id="cb611-36"><a href="#cb611-36" aria-hidden="true" tabindex="-1"></a> This is the</span> +<span id="cb611-37"><a href="#cb611-37" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=1<span class="fu">\relax</span></span> +<span id="cb611-38"><a href="#cb611-38" aria-hidden="true" tabindex="-1"></a> first</span> +<span id="cb611-39"><a href="#cb611-39" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb611-40"><a href="#cb611-40" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=2<span class="fu">\relax</span></span> +<span id="cb611-41"><a href="#cb611-41" aria-hidden="true" tabindex="-1"></a> second</span> +<span id="cb611-42"><a href="#cb611-42" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb611-43"><a href="#cb611-43" aria-hidden="true" tabindex="-1"></a> third</span> +<span id="cb611-44"><a href="#cb611-44" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb611-45"><a href="#cb611-45" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb611-46"><a href="#cb611-46" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb611-47"><a href="#cb611-47" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemEnd</span>{.<span class="fu">\par</span>}</span> +<span id="cb611-48"><a href="#cb611-48" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlEnd</span>{}</span> +<span id="cb611-49"><a href="#cb611-49" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb611-50"><a href="#cb611-50" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb611-51"><a href="#cb611-51" aria-hidden="true" tabindex="-1"></a>This is a loose list</span> +<span id="cb611-52"><a href="#cb611-52" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb611-53"><a href="#cb611-53" aria-hidden="true" tabindex="-1"></a>1. item</span> +<span id="cb611-54"><a href="#cb611-54" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb611-55"><a href="#cb611-55" aria-hidden="true" tabindex="-1"></a>2. item</span> +<span id="cb611-56"><a href="#cb611-56" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb611-57"><a href="#cb611-57" aria-hidden="true" tabindex="-1"></a>3. item</span> +<span id="cb611-58"><a href="#cb611-58" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb611-59"><a href="#cb611-59" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb611-60"><a href="#cb611-60" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb559"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb559-1"><a href="#cb559-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb612"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb612-1"><a href="#cb612-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -10182,77 +11323,77 @@ item).</p> <li><p>This is the third item.</p></li> </ol> </blockquote> -<h5 class="unnumbered" id="latex-example-81"><span +<h5 class="unnumbered" id="latex-example-88"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb560"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb560-1"><a href="#cb560-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb560-2"><a href="#cb560-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[tightLists, startNumber]{<span class="ex">markdown</span>}</span> -<span id="cb560-3"><a href="#cb560-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb560-4"><a href="#cb560-4" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb560-5"><a href="#cb560-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{</span> -<span id="cb560-6"><a href="#cb560-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb560-7"><a href="#cb560-7" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {},</span> -<span id="cb560-8"><a href="#cb560-8" aria-hidden="true" tabindex="-1"></a> olBeginTight = { (},</span> -<span id="cb560-9"><a href="#cb560-9" aria-hidden="true" tabindex="-1"></a> olItemWithNumber = {<span class="co">%</span></span> -<span id="cb560-10"><a href="#cb560-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=1<span class="fu">\relax</span></span> -<span id="cb560-11"><a href="#cb560-11" aria-hidden="true" tabindex="-1"></a> the first</span> -<span id="cb560-12"><a href="#cb560-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb560-13"><a href="#cb560-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=2<span class="fu">\relax</span></span> -<span id="cb560-14"><a href="#cb560-14" aria-hidden="true" tabindex="-1"></a> , the second</span> -<span id="cb560-15"><a href="#cb560-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb560-16"><a href="#cb560-16" aria-hidden="true" tabindex="-1"></a> , and the third</span> -<span id="cb560-17"><a href="#cb560-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb560-18"><a href="#cb560-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb560-19"><a href="#cb560-19" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb560-20"><a href="#cb560-20" aria-hidden="true" tabindex="-1"></a> olItemEnd = {},</span> -<span id="cb560-21"><a href="#cb560-21" aria-hidden="true" tabindex="-1"></a> olEndTight = {).},</span> -<span id="cb560-22"><a href="#cb560-22" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb560-23"><a href="#cb560-23" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb560-24"><a href="#cb560-24" aria-hidden="true" tabindex="-1"></a>This is a tight list</span> -<span id="cb560-25"><a href="#cb560-25" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb560-26"><a href="#cb560-26" aria-hidden="true" tabindex="-1"></a>1. item</span> -<span id="cb560-27"><a href="#cb560-27" aria-hidden="true" tabindex="-1"></a>2. item</span> -<span id="cb560-28"><a href="#cb560-28" aria-hidden="true" tabindex="-1"></a>3. item</span> -<span id="cb560-29"><a href="#cb560-29" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb560-30"><a href="#cb560-30" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb560-31"><a href="#cb560-31" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{</span> -<span id="cb560-32"><a href="#cb560-32" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb560-33"><a href="#cb560-33" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {<span class="co">%</span></span> -<span id="cb560-34"><a href="#cb560-34" aria-hidden="true" tabindex="-1"></a> :<span class="fu">\par</span></span> -<span id="cb560-35"><a href="#cb560-35" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> -<span id="cb560-36"><a href="#cb560-36" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb560-37"><a href="#cb560-37" aria-hidden="true" tabindex="-1"></a> olBeginTight = {<span class="kw">\begin</span>{<span class="ex">enumerate</span>}},</span> -<span id="cb560-38"><a href="#cb560-38" aria-hidden="true" tabindex="-1"></a> olItemWithNumber = {<span class="co">%</span></span> -<span id="cb560-39"><a href="#cb560-39" aria-hidden="true" tabindex="-1"></a> <span class="fu">\item</span> This is the</span> -<span id="cb560-40"><a href="#cb560-40" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=1<span class="fu">\relax</span></span> -<span id="cb560-41"><a href="#cb560-41" aria-hidden="true" tabindex="-1"></a> first</span> -<span id="cb560-42"><a href="#cb560-42" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb560-43"><a href="#cb560-43" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=2<span class="fu">\relax</span></span> -<span id="cb560-44"><a href="#cb560-44" aria-hidden="true" tabindex="-1"></a> second</span> -<span id="cb560-45"><a href="#cb560-45" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb560-46"><a href="#cb560-46" aria-hidden="true" tabindex="-1"></a> third</span> -<span id="cb560-47"><a href="#cb560-47" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb560-48"><a href="#cb560-48" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb560-49"><a href="#cb560-49" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb560-50"><a href="#cb560-50" aria-hidden="true" tabindex="-1"></a> olItemEnd = {.},</span> -<span id="cb560-51"><a href="#cb560-51" aria-hidden="true" tabindex="-1"></a> olEnd = {<span class="kw">\end</span>{<span class="ex">enumerate</span>}},</span> -<span id="cb560-52"><a href="#cb560-52" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb560-53"><a href="#cb560-53" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb560-54"><a href="#cb560-54" aria-hidden="true" tabindex="-1"></a>This is a loose list</span> -<span id="cb560-55"><a href="#cb560-55" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb560-56"><a href="#cb560-56" aria-hidden="true" tabindex="-1"></a>1. item</span> -<span id="cb560-57"><a href="#cb560-57" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb560-58"><a href="#cb560-58" aria-hidden="true" tabindex="-1"></a>2. item</span> -<span id="cb560-59"><a href="#cb560-59" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb560-60"><a href="#cb560-60" aria-hidden="true" tabindex="-1"></a>3. item</span> -<span id="cb560-61"><a href="#cb560-61" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb560-62"><a href="#cb560-62" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb560-63"><a href="#cb560-63" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb613"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb613-1"><a href="#cb613-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb613-2"><a href="#cb613-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[tightLists, startNumber]{<span class="ex">markdown</span>}</span> +<span id="cb613-3"><a href="#cb613-3" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb613-4"><a href="#cb613-4" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb613-5"><a href="#cb613-5" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[</span> +<span id="cb613-6"><a href="#cb613-6" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb613-7"><a href="#cb613-7" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {},</span> +<span id="cb613-8"><a href="#cb613-8" aria-hidden="true" tabindex="-1"></a> olBeginTight = { (},</span> +<span id="cb613-9"><a href="#cb613-9" aria-hidden="true" tabindex="-1"></a> olItemWithNumber = {<span class="co">%</span></span> +<span id="cb613-10"><a href="#cb613-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=1<span class="fu">\relax</span></span> +<span id="cb613-11"><a href="#cb613-11" aria-hidden="true" tabindex="-1"></a> the first</span> +<span id="cb613-12"><a href="#cb613-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb613-13"><a href="#cb613-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=2<span class="fu">\relax</span></span> +<span id="cb613-14"><a href="#cb613-14" aria-hidden="true" tabindex="-1"></a> , the second</span> +<span id="cb613-15"><a href="#cb613-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb613-16"><a href="#cb613-16" aria-hidden="true" tabindex="-1"></a> , and the third</span> +<span id="cb613-17"><a href="#cb613-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb613-18"><a href="#cb613-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb613-19"><a href="#cb613-19" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb613-20"><a href="#cb613-20" aria-hidden="true" tabindex="-1"></a> olItemEnd = {},</span> +<span id="cb613-21"><a href="#cb613-21" aria-hidden="true" tabindex="-1"></a> olEndTight = {).},</span> +<span id="cb613-22"><a href="#cb613-22" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb613-23"><a href="#cb613-23" aria-hidden="true" tabindex="-1"></a>]</span> +<span id="cb613-24"><a href="#cb613-24" aria-hidden="true" tabindex="-1"></a>This is a tight list</span> +<span id="cb613-25"><a href="#cb613-25" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb613-26"><a href="#cb613-26" aria-hidden="true" tabindex="-1"></a>1. item</span> +<span id="cb613-27"><a href="#cb613-27" aria-hidden="true" tabindex="-1"></a>2. item</span> +<span id="cb613-28"><a href="#cb613-28" aria-hidden="true" tabindex="-1"></a>3. item</span> +<span id="cb613-29"><a href="#cb613-29" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb613-30"><a href="#cb613-30" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb613-31"><a href="#cb613-31" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[</span> +<span id="cb613-32"><a href="#cb613-32" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb613-33"><a href="#cb613-33" aria-hidden="true" tabindex="-1"></a> interblockSeparator = {<span class="co">%</span></span> +<span id="cb613-34"><a href="#cb613-34" aria-hidden="true" tabindex="-1"></a> :<span class="fu">\par</span></span> +<span id="cb613-35"><a href="#cb613-35" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> +<span id="cb613-36"><a href="#cb613-36" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb613-37"><a href="#cb613-37" aria-hidden="true" tabindex="-1"></a> olBeginTight = {<span class="kw">\begin</span>{<span class="ex">enumerate</span>}},</span> +<span id="cb613-38"><a href="#cb613-38" aria-hidden="true" tabindex="-1"></a> olItemWithNumber = {<span class="co">%</span></span> +<span id="cb613-39"><a href="#cb613-39" aria-hidden="true" tabindex="-1"></a> <span class="fu">\item</span> This is the</span> +<span id="cb613-40"><a href="#cb613-40" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=1<span class="fu">\relax</span></span> +<span id="cb613-41"><a href="#cb613-41" aria-hidden="true" tabindex="-1"></a> first</span> +<span id="cb613-42"><a href="#cb613-42" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb613-43"><a href="#cb613-43" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=2<span class="fu">\relax</span></span> +<span id="cb613-44"><a href="#cb613-44" aria-hidden="true" tabindex="-1"></a> second</span> +<span id="cb613-45"><a href="#cb613-45" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb613-46"><a href="#cb613-46" aria-hidden="true" tabindex="-1"></a> third</span> +<span id="cb613-47"><a href="#cb613-47" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb613-48"><a href="#cb613-48" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb613-49"><a href="#cb613-49" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb613-50"><a href="#cb613-50" aria-hidden="true" tabindex="-1"></a> olItemEnd = {.},</span> +<span id="cb613-51"><a href="#cb613-51" aria-hidden="true" tabindex="-1"></a> olEnd = {<span class="kw">\end</span>{<span class="ex">enumerate</span>}},</span> +<span id="cb613-52"><a href="#cb613-52" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb613-53"><a href="#cb613-53" aria-hidden="true" tabindex="-1"></a>]</span> +<span id="cb613-54"><a href="#cb613-54" aria-hidden="true" tabindex="-1"></a>This is a loose list</span> +<span id="cb613-55"><a href="#cb613-55" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb613-56"><a href="#cb613-56" aria-hidden="true" tabindex="-1"></a>1. item</span> +<span id="cb613-57"><a href="#cb613-57" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb613-58"><a href="#cb613-58" aria-hidden="true" tabindex="-1"></a>2. item</span> +<span id="cb613-59"><a href="#cb613-59" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb613-60"><a href="#cb613-60" aria-hidden="true" tabindex="-1"></a>3. item</span> +<span id="cb613-61"><a href="#cb613-61" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb613-62"><a href="#cb613-62" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb613-63"><a href="#cb613-63" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb561"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb561-1"><a href="#cb561-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb614"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb614-1"><a href="#cb614-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -10265,78 +11406,78 @@ item).</p> <li><p>This is the third item.</p></li> </ol> </blockquote> -<h5 class="unnumbered" id="context-example-48">Con<span +<h5 class="unnumbered" id="context-example-50">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb562"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb562-1"><a href="#cb562-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb562-2"><a href="#cb562-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span></span> -<span id="cb562-3"><a href="#cb562-3" aria-hidden="true" tabindex="-1"></a> [</span> -<span id="cb562-4"><a href="#cb562-4" aria-hidden="true" tabindex="-1"></a> tightLists = yes,</span> -<span id="cb562-5"><a href="#cb562-5" aria-hidden="true" tabindex="-1"></a> startNumber = yes,</span> -<span id="cb562-6"><a href="#cb562-6" aria-hidden="true" tabindex="-1"></a> ]</span> -<span id="cb562-7"><a href="#cb562-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb562-8"><a href="#cb562-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb562-9"><a href="#cb562-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{}</span> -<span id="cb562-10"><a href="#cb562-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlBeginTight</span>{ (}</span> -<span id="cb562-11"><a href="#cb562-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemWithNumber</span>#1{<span class="co">%</span></span> -<span id="cb562-12"><a href="#cb562-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=1<span class="fu">\relax</span></span> -<span id="cb562-13"><a href="#cb562-13" aria-hidden="true" tabindex="-1"></a> the first</span> -<span id="cb562-14"><a href="#cb562-14" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb562-15"><a href="#cb562-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=2<span class="fu">\relax</span></span> -<span id="cb562-16"><a href="#cb562-16" aria-hidden="true" tabindex="-1"></a> , the second</span> -<span id="cb562-17"><a href="#cb562-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb562-18"><a href="#cb562-18" aria-hidden="true" tabindex="-1"></a> , and the third</span> -<span id="cb562-19"><a href="#cb562-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb562-20"><a href="#cb562-20" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb562-21"><a href="#cb562-21" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb562-22"><a href="#cb562-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemEnd</span>{}</span> -<span id="cb562-23"><a href="#cb562-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlEndTight</span>{).}</span> -<span id="cb562-24"><a href="#cb562-24" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb562-25"><a href="#cb562-25" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb562-26"><a href="#cb562-26" aria-hidden="true" tabindex="-1"></a>This is a tight list</span> -<span id="cb562-27"><a href="#cb562-27" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb562-28"><a href="#cb562-28" aria-hidden="true" tabindex="-1"></a>1. item</span> -<span id="cb562-29"><a href="#cb562-29" aria-hidden="true" tabindex="-1"></a>2. item</span> -<span id="cb562-30"><a href="#cb562-30" aria-hidden="true" tabindex="-1"></a>3. item</span> -<span id="cb562-31"><a href="#cb562-31" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb562-32"><a href="#cb562-32" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb562-33"><a href="#cb562-33" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> -<span id="cb562-34"><a href="#cb562-34" aria-hidden="true" tabindex="-1"></a> :<span class="fu">\par</span></span> -<span id="cb562-35"><a href="#cb562-35" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> -<span id="cb562-36"><a href="#cb562-36" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb562-37"><a href="#cb562-37" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlBegin</span>{<span class="fu">\startitemize</span>}</span> -<span id="cb562-38"><a href="#cb562-38" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemWithNumber</span>#1{<span class="co">%</span></span> -<span id="cb562-39"><a href="#cb562-39" aria-hidden="true" tabindex="-1"></a> <span class="fu">\sym</span>{#1.}</span> -<span id="cb562-40"><a href="#cb562-40" aria-hidden="true" tabindex="-1"></a> This is the</span> -<span id="cb562-41"><a href="#cb562-41" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=1<span class="fu">\relax</span></span> -<span id="cb562-42"><a href="#cb562-42" aria-hidden="true" tabindex="-1"></a> first</span> -<span id="cb562-43"><a href="#cb562-43" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb562-44"><a href="#cb562-44" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=2<span class="fu">\relax</span></span> -<span id="cb562-45"><a href="#cb562-45" aria-hidden="true" tabindex="-1"></a> second</span> -<span id="cb562-46"><a href="#cb562-46" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb562-47"><a href="#cb562-47" aria-hidden="true" tabindex="-1"></a> third</span> -<span id="cb562-48"><a href="#cb562-48" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb562-49"><a href="#cb562-49" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb562-50"><a href="#cb562-50" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb562-51"><a href="#cb562-51" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemEnd</span>{.<span class="fu">\par</span>}</span> -<span id="cb562-52"><a href="#cb562-52" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlEnd</span>{<span class="fu">\stopitemize</span>}</span> -<span id="cb562-53"><a href="#cb562-53" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb562-54"><a href="#cb562-54" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb562-55"><a href="#cb562-55" aria-hidden="true" tabindex="-1"></a>This is a loose list</span> -<span id="cb562-56"><a href="#cb562-56" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb562-57"><a href="#cb562-57" aria-hidden="true" tabindex="-1"></a>1. item</span> -<span id="cb562-58"><a href="#cb562-58" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb562-59"><a href="#cb562-59" aria-hidden="true" tabindex="-1"></a>2. item</span> -<span id="cb562-60"><a href="#cb562-60" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb562-61"><a href="#cb562-61" aria-hidden="true" tabindex="-1"></a>3. item</span> -<span id="cb562-62"><a href="#cb562-62" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb562-63"><a href="#cb562-63" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb562-64"><a href="#cb562-64" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb615"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb615-1"><a href="#cb615-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb615-2"><a href="#cb615-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span></span> +<span id="cb615-3"><a href="#cb615-3" aria-hidden="true" tabindex="-1"></a> [</span> +<span id="cb615-4"><a href="#cb615-4" aria-hidden="true" tabindex="-1"></a> tightLists = yes,</span> +<span id="cb615-5"><a href="#cb615-5" aria-hidden="true" tabindex="-1"></a> startNumber = yes,</span> +<span id="cb615-6"><a href="#cb615-6" aria-hidden="true" tabindex="-1"></a> ]</span> +<span id="cb615-7"><a href="#cb615-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb615-8"><a href="#cb615-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb615-9"><a href="#cb615-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{}</span> +<span id="cb615-10"><a href="#cb615-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlBeginTight</span>{ (}</span> +<span id="cb615-11"><a href="#cb615-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemWithNumber</span>#1{<span class="co">%</span></span> +<span id="cb615-12"><a href="#cb615-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=1<span class="fu">\relax</span></span> +<span id="cb615-13"><a href="#cb615-13" aria-hidden="true" tabindex="-1"></a> the first</span> +<span id="cb615-14"><a href="#cb615-14" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb615-15"><a href="#cb615-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=2<span class="fu">\relax</span></span> +<span id="cb615-16"><a href="#cb615-16" aria-hidden="true" tabindex="-1"></a> , the second</span> +<span id="cb615-17"><a href="#cb615-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb615-18"><a href="#cb615-18" aria-hidden="true" tabindex="-1"></a> , and the third</span> +<span id="cb615-19"><a href="#cb615-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb615-20"><a href="#cb615-20" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb615-21"><a href="#cb615-21" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb615-22"><a href="#cb615-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemEnd</span>{}</span> +<span id="cb615-23"><a href="#cb615-23" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlEndTight</span>{).}</span> +<span id="cb615-24"><a href="#cb615-24" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb615-25"><a href="#cb615-25" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb615-26"><a href="#cb615-26" aria-hidden="true" tabindex="-1"></a>This is a tight list</span> +<span id="cb615-27"><a href="#cb615-27" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb615-28"><a href="#cb615-28" aria-hidden="true" tabindex="-1"></a>1. item</span> +<span id="cb615-29"><a href="#cb615-29" aria-hidden="true" tabindex="-1"></a>2. item</span> +<span id="cb615-30"><a href="#cb615-30" aria-hidden="true" tabindex="-1"></a>3. item</span> +<span id="cb615-31"><a href="#cb615-31" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb615-32"><a href="#cb615-32" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb615-33"><a href="#cb615-33" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="co">%</span></span> +<span id="cb615-34"><a href="#cb615-34" aria-hidden="true" tabindex="-1"></a> :<span class="fu">\par</span></span> +<span id="cb615-35"><a href="#cb615-35" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\markdownRendererInterblockSeparator</span>{<span class="fu">\par</span>}<span class="co">%</span></span> +<span id="cb615-36"><a href="#cb615-36" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb615-37"><a href="#cb615-37" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlBegin</span>{<span class="fu">\startitemize</span>}</span> +<span id="cb615-38"><a href="#cb615-38" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemWithNumber</span>#1{<span class="co">%</span></span> +<span id="cb615-39"><a href="#cb615-39" aria-hidden="true" tabindex="-1"></a> <span class="fu">\sym</span>{#1.}</span> +<span id="cb615-40"><a href="#cb615-40" aria-hidden="true" tabindex="-1"></a> This is the</span> +<span id="cb615-41"><a href="#cb615-41" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=1<span class="fu">\relax</span></span> +<span id="cb615-42"><a href="#cb615-42" aria-hidden="true" tabindex="-1"></a> first</span> +<span id="cb615-43"><a href="#cb615-43" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb615-44"><a href="#cb615-44" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum</span> #1=2<span class="fu">\relax</span></span> +<span id="cb615-45"><a href="#cb615-45" aria-hidden="true" tabindex="-1"></a> second</span> +<span id="cb615-46"><a href="#cb615-46" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb615-47"><a href="#cb615-47" aria-hidden="true" tabindex="-1"></a> third</span> +<span id="cb615-48"><a href="#cb615-48" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb615-49"><a href="#cb615-49" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb615-50"><a href="#cb615-50" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb615-51"><a href="#cb615-51" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlItemEnd</span>{.<span class="fu">\par</span>}</span> +<span id="cb615-52"><a href="#cb615-52" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererOlEnd</span>{<span class="fu">\stopitemize</span>}</span> +<span id="cb615-53"><a href="#cb615-53" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb615-54"><a href="#cb615-54" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb615-55"><a href="#cb615-55" aria-hidden="true" tabindex="-1"></a>This is a loose list</span> +<span id="cb615-56"><a href="#cb615-56" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb615-57"><a href="#cb615-57" aria-hidden="true" tabindex="-1"></a>1. item</span> +<span id="cb615-58"><a href="#cb615-58" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb615-59"><a href="#cb615-59" aria-hidden="true" tabindex="-1"></a>2. item</span> +<span id="cb615-60"><a href="#cb615-60" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb615-61"><a href="#cb615-61" aria-hidden="true" tabindex="-1"></a>3. item</span> +<span id="cb615-62"><a href="#cb615-62" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb615-63"><a href="#cb615-63" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb615-64"><a href="#cb615-64" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb563"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb563-1"><a href="#cb563-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb616"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb616-1"><a href="#cb616-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -10349,75 +11490,8 @@ item).</p> <li><p>This is the third item.</p></li> </ol> </blockquote> -<h4 data-number="2.3.1.29" id="parenthesized-citations-renderer"><span -class="header-section-number">2.3.1.29</span> Parenthesized Citations -Renderer</h4> -<p>The <code>\markdownRendererCite</code> macro represents a string of -one or more parenthetical citations. This macro will only be produced, -when the <strong><code>citations</code></strong> option is enabled. The -macro receives the parameter <code>{</code>⟨<em>number of -citations</em>⟩<code>}</code> followed by ⟨<em>suppress author</em>⟩ -<code>{</code>⟨<em>prenote</em>⟩<code>}{</code>⟨<em>postnote</em>⟩<code>}{</code>⟨<em>name</em>⟩<code>}</code> -repeated ⟨<em>number of citations</em>⟩ times. The ⟨<em>suppress -author</em>⟩ parameter is either the token <code>-</code>, when the -author’s name is to be suppressed, or <code>+</code> otherwise.</p> -<h5 class="unnumbered" id="latex-example-82"><span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> -<p>Using a text editor, create a text document named -<code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb564"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb564-1"><a href="#cb564-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb564-2"><a href="#cb564-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[citations]{<span class="ex">markdown</span>}</span> -<span id="cb564-3"><a href="#cb564-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\newcount\citationsCounter</span></span> -<span id="cb564-4"><a href="#cb564-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\newcount\citationsTotal</span></span> -<span id="cb564-5"><a href="#cb564-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\makeatletter</span></span> -<span id="cb564-6"><a href="#cb564-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\citations</span>#1#2#3#4{<span class="co">%</span></span> -<span id="cb564-7"><a href="#cb564-7" aria-hidden="true" tabindex="-1"></a> a parenthesized citation <span class="fu">\emph</span>{#4}</span> -<span id="cb564-8"><a href="#cb564-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\advance\citationsCounter</span> by 1<span class="fu">\relax</span></span> -<span id="cb564-9"><a href="#cb564-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifx\relax</span>#2<span class="fu">\relax</span></span> -<span id="cb564-10"><a href="#cb564-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifx\relax</span>#3<span class="fu">\relax\else</span></span> -<span id="cb564-11"><a href="#cb564-11" aria-hidden="true" tabindex="-1"></a> with a postfix <span class="fu">\emph</span>{#3}<span class="co">%</span></span> -<span id="cb564-12"><a href="#cb564-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb564-13"><a href="#cb564-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb564-14"><a href="#cb564-14" aria-hidden="true" tabindex="-1"></a> with a prefix <span class="fu">\emph</span>{#2}<span class="co">%</span></span> -<span id="cb564-15"><a href="#cb564-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifx\relax</span>#3<span class="fu">\relax\else</span></span> -<span id="cb564-16"><a href="#cb564-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ </span>and a postfix <span class="fu">\emph</span>{#3}<span class="co">%</span></span> -<span id="cb564-17"><a href="#cb564-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb564-18"><a href="#cb564-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb564-19"><a href="#cb564-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\citationsCounter</span>><span class="fu">\citationsTotal\relax</span></span> -<span id="cb564-20"><a href="#cb564-20" aria-hidden="true" tabindex="-1"></a> .<span class="co">%</span></span> -<span id="cb564-21"><a href="#cb564-21" aria-hidden="true" tabindex="-1"></a> <span class="fu">\expandafter\@gobble</span></span> -<span id="cb564-22"><a href="#cb564-22" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb564-23"><a href="#cb564-23" aria-hidden="true" tabindex="-1"></a> , and</span> -<span id="cb564-24"><a href="#cb564-24" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi\citations</span>}</span> -<span id="cb564-25"><a href="#cb564-25" aria-hidden="true" tabindex="-1"></a><span class="fu">\makeatother</span></span> -<span id="cb564-26"><a href="#cb564-26" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb564-27"><a href="#cb564-27" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb564-28"><a href="#cb564-28" aria-hidden="true" tabindex="-1"></a> cite = {<span class="co">%</span></span> -<span id="cb564-29"><a href="#cb564-29" aria-hidden="true" tabindex="-1"></a> <span class="fu">\citationsCounter</span>=1<span class="co">%</span></span> -<span id="cb564-30"><a href="#cb564-30" aria-hidden="true" tabindex="-1"></a> <span class="fu">\citationsTotal</span>=#1<span class="co">%</span></span> -<span id="cb564-31"><a href="#cb564-31" aria-hidden="true" tabindex="-1"></a> This is</span> -<span id="cb564-32"><a href="#cb564-32" aria-hidden="true" tabindex="-1"></a> <span class="fu">\expandafter\citations</span></span> -<span id="cb564-33"><a href="#cb564-33" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb564-34"><a href="#cb564-34" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb564-35"><a href="#cb564-35" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb564-36"><a href="#cb564-36" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb564-37"><a href="#cb564-37" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb564-38"><a href="#cb564-38" aria-hidden="true" tabindex="-1"></a>[see @abrahams90, pp. 12; @eijkhout91, pp. 34]</span> -<span id="cb564-39"><a href="#cb564-39" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb564-40"><a href="#cb564-40" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb565"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb565-1"><a href="#cb565-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> -<p>A PDF document named <code>document.pdf</code> should be produced and -contain the following text:</p> -<blockquote> -<p>This is a parenthesized citation <em>abrahams90</em> with a prefix -see and a postfix <em>pp. 12</em>, and a citation <em>eijkhout91</em> -with a postfix <em>pp. 34</em>.</p> -</blockquote> -<h4 data-number="2.3.1.30" id="raw-content-renderers"><span -class="header-section-number">2.3.1.30</span> Raw Content Renderers</h4> +<h4 data-number="2.3.1.31" id="raw-content-renderers"><span +class="header-section-number">2.3.1.31</span> Raw Content Renderers</h4> <p>The <code>\markdownRendererInputRawInline</code> macro represents an inline raw span. The macro receives two arguments: the filename of a file contaning the inline raw span contents and the raw attribute that @@ -10430,63 +11504,63 @@ contaning the raw block and the raw attribute that designates the format of the raw block. This macro will only be produced, when the <strong><code>rawAttribute</code></strong> and <strong><code>fencedCode</code></strong> options are enabled.</p> -<h5 class="unnumbered" id="latex-example-83"><span +<h5 class="unnumbered" id="latex-example-89"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb566"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb566-1"><a href="#cb566-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb566-2"><a href="#cb566-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[rawAttribute, fencedCode]{<span class="ex">markdown</span>}</span> -<span id="cb566-3"><a href="#cb566-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">expl3</span>}</span> -<span id="cb566-4"><a href="#cb566-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> -<span id="cb566-5"><a href="#cb566-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\cs</span>_new:Nn</span> -<span id="cb566-6"><a href="#cb566-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\display</span>_raw_content:nn</span> -<span id="cb566-7"><a href="#cb566-7" aria-hidden="true" tabindex="-1"></a> {</span> -<span id="cb566-8"><a href="#cb566-8" aria-hidden="true" tabindex="-1"></a> <span class="co">% If the raw attribute is TeX, execute the content as a TeX document.</span></span> -<span id="cb566-9"><a href="#cb566-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\str</span>_if_eq:nnTF</span> -<span id="cb566-10"><a href="#cb566-10" aria-hidden="true" tabindex="-1"></a> { #2 }</span> -<span id="cb566-11"><a href="#cb566-11" aria-hidden="true" tabindex="-1"></a> { tex }</span> -<span id="cb566-12"><a href="#cb566-12" aria-hidden="true" tabindex="-1"></a> { <span class="fu">\markdownEscape</span> { #1 } }</span> -<span id="cb566-13"><a href="#cb566-13" aria-hidden="true" tabindex="-1"></a> <span class="co">% Otherwise, ignore the content.</span></span> -<span id="cb566-14"><a href="#cb566-14" aria-hidden="true" tabindex="-1"></a> { }</span> -<span id="cb566-15"><a href="#cb566-15" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb566-16"><a href="#cb566-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb566-17"><a href="#cb566-17" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb566-18"><a href="#cb566-18" aria-hidden="true" tabindex="-1"></a> rawInline = { <span class="fu">\display</span>_raw_content:nn { #1 } { #2 } },</span> -<span id="cb566-19"><a href="#cb566-19" aria-hidden="true" tabindex="-1"></a> rawBlock = { <span class="fu">\display</span>_raw_content:nn { #1 } { #2 } }</span> -<span id="cb566-20"><a href="#cb566-20" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb566-21"><a href="#cb566-21" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb566-22"><a href="#cb566-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> -<span id="cb566-23"><a href="#cb566-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb566-24"><a href="#cb566-24" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb566-25"><a href="#cb566-25" aria-hidden="true" tabindex="-1"></a>`<span class="ss">$H_2 O$</span>`{=tex} is a liquid.</span> -<span id="cb566-26"><a href="#cb566-26" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb566-27"><a href="#cb566-27" aria-hidden="true" tabindex="-1"></a>``` {=html}</span> -<span id="cb566-28"><a href="#cb566-28" aria-hidden="true" tabindex="-1"></a><p>Here is some HTML content that will be ignored.</p></span> -<span id="cb566-29"><a href="#cb566-29" aria-hidden="true" tabindex="-1"></a>```</span> -<span id="cb566-30"><a href="#cb566-30" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb566-31"><a href="#cb566-31" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb617"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb617-1"><a href="#cb617-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb617-2"><a href="#cb617-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[rawAttribute, fencedCode]{<span class="ex">markdown</span>}</span> +<span id="cb617-3"><a href="#cb617-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">expl3</span>}</span> +<span id="cb617-4"><a href="#cb617-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> +<span id="cb617-5"><a href="#cb617-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\cs</span>_new:Nn</span> +<span id="cb617-6"><a href="#cb617-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\display</span>_raw_content:nn</span> +<span id="cb617-7"><a href="#cb617-7" aria-hidden="true" tabindex="-1"></a> {</span> +<span id="cb617-8"><a href="#cb617-8" aria-hidden="true" tabindex="-1"></a> <span class="co">% If the raw attribute is TeX, execute the content as a TeX document.</span></span> +<span id="cb617-9"><a href="#cb617-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\str</span>_if_eq:nnTF</span> +<span id="cb617-10"><a href="#cb617-10" aria-hidden="true" tabindex="-1"></a> { #2 }</span> +<span id="cb617-11"><a href="#cb617-11" aria-hidden="true" tabindex="-1"></a> { tex }</span> +<span id="cb617-12"><a href="#cb617-12" aria-hidden="true" tabindex="-1"></a> { <span class="fu">\markdownEscape</span> { #1 } }</span> +<span id="cb617-13"><a href="#cb617-13" aria-hidden="true" tabindex="-1"></a> <span class="co">% Otherwise, ignore the content.</span></span> +<span id="cb617-14"><a href="#cb617-14" aria-hidden="true" tabindex="-1"></a> { }</span> +<span id="cb617-15"><a href="#cb617-15" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb617-16"><a href="#cb617-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb617-17"><a href="#cb617-17" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb617-18"><a href="#cb617-18" aria-hidden="true" tabindex="-1"></a> rawInline = { <span class="fu">\display</span>_raw_content:nn { #1 } { #2 } },</span> +<span id="cb617-19"><a href="#cb617-19" aria-hidden="true" tabindex="-1"></a> rawBlock = { <span class="fu">\display</span>_raw_content:nn { #1 } { #2 } }</span> +<span id="cb617-20"><a href="#cb617-20" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb617-21"><a href="#cb617-21" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb617-22"><a href="#cb617-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> +<span id="cb617-23"><a href="#cb617-23" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb617-24"><a href="#cb617-24" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb617-25"><a href="#cb617-25" aria-hidden="true" tabindex="-1"></a>`<span class="ss">$H_2 O$</span>`{=tex} is a liquid.</span> +<span id="cb617-26"><a href="#cb617-26" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb617-27"><a href="#cb617-27" aria-hidden="true" tabindex="-1"></a>``` {=html}</span> +<span id="cb617-28"><a href="#cb617-28" aria-hidden="true" tabindex="-1"></a><p>Here is some HTML content that will be ignored.</p></span> +<span id="cb617-29"><a href="#cb617-29" aria-hidden="true" tabindex="-1"></a>```</span> +<span id="cb617-30"><a href="#cb617-30" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb617-31"><a href="#cb617-31" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb567"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb567-1"><a href="#cb567-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb618"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb618-1"><a href="#cb618-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>H<sub>2</sub>O is a liquid.</p> </blockquote> -<h4 data-number="2.3.1.31" id="section-renderers"><span -class="header-section-number">2.3.1.31</span> Section Renderers</h4> +<h4 data-number="2.3.1.32" id="section-renderers"><span +class="header-section-number">2.3.1.32</span> Section Renderers</h4> <p>The <code>\markdownRendererSectionBegin</code> and <code>\markdownRendererSectionEnd</code> macros represent the beginning and the end of a section based on headings.</p> -<h4 data-number="2.3.1.32" id="replacement-character-renderers"><span -class="header-section-number">2.3.1.32</span> Replacement Character +<h4 data-number="2.3.1.33" id="replacement-character-renderers"><span +class="header-section-number">2.3.1.33</span> Replacement Character Renderers</h4> <p>The <code>\markdownRendererReplacementCharacter</code> macro represents the U+0000 and U+FFFD Unicode characters. The macro receives no arguments.</p> -<h4 data-number="2.3.1.33" id="special-character-renderers"><span -class="header-section-number">2.3.1.33</span> Special Character +<h4 data-number="2.3.1.34" id="special-character-renderers"><span +class="header-section-number">2.3.1.34</span> Special Character Renderers</h4> <p>The following macros replace any special plain <span class="tex">T<sub>e</sub>X</span> characters, including the active pipe @@ -10516,306 +11590,407 @@ class="tex">T<sub>e</sub>X</span>t, in the input text:</p> <li><code>\markdownRendererUnderscore</code> replaces the underscore (<code>_</code>).</li> </ul> -<h5 class="unnumbered" id="plain-tex-example-36">Plain <span +<h5 class="unnumbered" id="plain-tex-example-40">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content. We will make the tilde behave as if it were written in <span class="tex">T<sub>e</sub>X</span>, where it represents a non-breaking space.</p> -<div class="sourceCode" id="cb568"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb568-1"><a href="#cb568-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb568-2"><a href="#cb568-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTilde</span>{~}</span> -<span id="cb568-3"><a href="#cb568-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb568-4"><a href="#cb568-4" aria-hidden="true" tabindex="-1"></a>Bartel~Leendert van~der~Waerden</span> -<span id="cb568-5"><a href="#cb568-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb568-6"><a href="#cb568-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb619"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb619-1"><a href="#cb619-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb619-2"><a href="#cb619-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTilde</span>{~}</span> +<span id="cb619-3"><a href="#cb619-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb619-4"><a href="#cb619-4" aria-hidden="true" tabindex="-1"></a>Bartel~Leendert van~der~Waerden</span> +<span id="cb619-5"><a href="#cb619-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb619-6"><a href="#cb619-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb569"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb569-1"><a href="#cb569-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb620"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb620-1"><a href="#cb620-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text, where the middot (<code>·</code>) denotes a non-breaking space:</p> <blockquote> <p>Bartel·Leendert van·der·Waerden</p> </blockquote> -<h5 class="unnumbered" id="latex-example-84"><span +<h5 class="unnumbered" id="latex-example-90"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content. We will make the tilde behave as if it were written in <span class="tex">T<sub>e</sub>X</span>, where it represents a non-breaking space.</p> -<div class="sourceCode" id="cb570"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb570-1"><a href="#cb570-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb570-2"><a href="#cb570-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb570-3"><a href="#cb570-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb570-4"><a href="#cb570-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb570-5"><a href="#cb570-5" aria-hidden="true" tabindex="-1"></a> tilde = ~,</span> -<span id="cb570-6"><a href="#cb570-6" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb570-7"><a href="#cb570-7" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb570-8"><a href="#cb570-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb570-9"><a href="#cb570-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb570-10"><a href="#cb570-10" aria-hidden="true" tabindex="-1"></a>Bartel~Leendert van~der~Waerden</span> -<span id="cb570-11"><a href="#cb570-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb570-12"><a href="#cb570-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb621"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb621-1"><a href="#cb621-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb621-2"><a href="#cb621-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb621-3"><a href="#cb621-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb621-4"><a href="#cb621-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb621-5"><a href="#cb621-5" aria-hidden="true" tabindex="-1"></a> tilde = ~,</span> +<span id="cb621-6"><a href="#cb621-6" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb621-7"><a href="#cb621-7" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb621-8"><a href="#cb621-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb621-9"><a href="#cb621-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb621-10"><a href="#cb621-10" aria-hidden="true" tabindex="-1"></a>Bartel~Leendert van~der~Waerden</span> +<span id="cb621-11"><a href="#cb621-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb621-12"><a href="#cb621-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb571"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb571-1"><a href="#cb571-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb622"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb622-1"><a href="#cb622-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text, where the middot (<code>·</code>) denotes a non-breaking space:</p> <blockquote> <p>Bartel·Leendert van·der·Waerden</p> </blockquote> -<h5 class="unnumbered" id="context-example-49">Con<span +<h5 class="unnumbered" id="context-example-51">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content. We will make the tilde behave as if it were written in <span class="tex">T<sub>e</sub>X</span>, where it represents a non-breaking space.</p> -<div class="sourceCode" id="cb572"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb572-1"><a href="#cb572-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb572-2"><a href="#cb572-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTilde</span>{~}</span> -<span id="cb572-3"><a href="#cb572-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb572-4"><a href="#cb572-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb572-5"><a href="#cb572-5" aria-hidden="true" tabindex="-1"></a>Bartel~Leendert van~der~Waerden</span> -<span id="cb572-6"><a href="#cb572-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb572-7"><a href="#cb572-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb623"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb623-1"><a href="#cb623-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb623-2"><a href="#cb623-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTilde</span>{~}</span> +<span id="cb623-3"><a href="#cb623-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb623-4"><a href="#cb623-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb623-5"><a href="#cb623-5" aria-hidden="true" tabindex="-1"></a>Bartel~Leendert van~der~Waerden</span> +<span id="cb623-6"><a href="#cb623-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb623-7"><a href="#cb623-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb573"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb573-1"><a href="#cb573-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb624"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb624-1"><a href="#cb624-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text, where the middot (<code>·</code>) denotes a non-breaking space:</p> <blockquote> <p>Bartel·Leendert van·der·Waerden</p> </blockquote> -<h4 data-number="2.3.1.34" id="strike-through-renderer"><span -class="header-section-number">2.3.1.34</span> Strike-Through +<h4 data-number="2.3.1.35" id="strike-through-renderer"><span +class="header-section-number">2.3.1.35</span> Strike-Through Renderer</h4> <p>The <code>\markdownRendererStrikeThrough</code> macro represents a strike-through span of text. The macro receives a single argument that corresponds to the striked-out span of text. This macro will only be produced, when the <strong><code>strikeThrough</code></strong> option is enabled.</p> -<h5 class="unnumbered" id="plain-tex-example-37">Plain <span +<h5 class="unnumbered" id="plain-tex-example-41">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb574"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb574-1"><a href="#cb574-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb574-2"><a href="#cb574-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionStrikeThrough</span>{true}</span> -<span id="cb574-3"><a href="#cb574-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> soulutf8.sty</span> -<span id="cb574-4"><a href="#cb574-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererStrikeThrough</span>#1{<span class="fu">\st</span>{#1}}</span> -<span id="cb574-5"><a href="#cb574-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb574-6"><a href="#cb574-6" aria-hidden="true" tabindex="-1"></a>This is ~~a lunar roving vehicle~~ strike-through text.</span> -<span id="cb574-7"><a href="#cb574-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb574-8"><a href="#cb574-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb625"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb625-1"><a href="#cb625-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb625-2"><a href="#cb625-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionStrikeThrough</span>{true}</span> +<span id="cb625-3"><a href="#cb625-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> soulutf8.sty</span> +<span id="cb625-4"><a href="#cb625-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererStrikeThrough</span>#1{<span class="fu">\st</span>{#1}}</span> +<span id="cb625-5"><a href="#cb625-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb625-6"><a href="#cb625-6" aria-hidden="true" tabindex="-1"></a>This is ~~a lunar roving vehicle~~ strike-through text.</span> +<span id="cb625-7"><a href="#cb625-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb625-8"><a href="#cb625-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb575"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb575-1"><a href="#cb575-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb626"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb626-1"><a href="#cb626-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>This is <del>a lunar roving vehicle</del> strike-through text.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-85"><span +<h5 class="unnumbered" id="latex-example-91"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb576"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb576-1"><a href="#cb576-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb576-2"><a href="#cb576-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[strikeThrough]{<span class="ex">markdown</span>}</span> -<span id="cb576-3"><a href="#cb576-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">soulutf8</span>}</span> -<span id="cb576-4"><a href="#cb576-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb576-5"><a href="#cb576-5" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb576-6"><a href="#cb576-6" aria-hidden="true" tabindex="-1"></a> strikeThrough = {<span class="fu">\st</span>{#1}},</span> -<span id="cb576-7"><a href="#cb576-7" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb576-8"><a href="#cb576-8" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb576-9"><a href="#cb576-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb576-10"><a href="#cb576-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb576-11"><a href="#cb576-11" aria-hidden="true" tabindex="-1"></a>This is ~~a lunar roving vehicle~~ strike-through text.</span> -<span id="cb576-12"><a href="#cb576-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb576-13"><a href="#cb576-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb627"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb627-1"><a href="#cb627-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb627-2"><a href="#cb627-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[strikeThrough]{<span class="ex">markdown</span>}</span> +<span id="cb627-3"><a href="#cb627-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">soulutf8</span>}</span> +<span id="cb627-4"><a href="#cb627-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb627-5"><a href="#cb627-5" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb627-6"><a href="#cb627-6" aria-hidden="true" tabindex="-1"></a> strikeThrough = {<span class="fu">\st</span>{#1}},</span> +<span id="cb627-7"><a href="#cb627-7" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb627-8"><a href="#cb627-8" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb627-9"><a href="#cb627-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb627-10"><a href="#cb627-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb627-11"><a href="#cb627-11" aria-hidden="true" tabindex="-1"></a>This is ~~a lunar roving vehicle~~ strike-through text.</span> +<span id="cb627-12"><a href="#cb627-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb627-13"><a href="#cb627-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb577"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb577-1"><a href="#cb577-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb628"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb628-1"><a href="#cb628-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>This is <del>a lunar roving vehicle</del> strike-through text.</p> </blockquote> -<h5 class="unnumbered" id="context-example-50">Con<span +<h5 class="unnumbered" id="context-example-52">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb578"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb578-1"><a href="#cb578-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb578-2"><a href="#cb578-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[strikeThrough = yes]</span> -<span id="cb578-3"><a href="#cb578-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererStrikeThrough</span>#1{<span class="fu">\overstrikes</span>{#1}}</span> -<span id="cb578-4"><a href="#cb578-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb578-5"><a href="#cb578-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb578-6"><a href="#cb578-6" aria-hidden="true" tabindex="-1"></a>This is ~~a lunar roving vehicle~~ strike-through text.</span> -<span id="cb578-7"><a href="#cb578-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb578-8"><a href="#cb578-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb629"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb629-1"><a href="#cb629-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb629-2"><a href="#cb629-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[strikeThrough = yes]</span> +<span id="cb629-3"><a href="#cb629-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererStrikeThrough</span>#1{<span class="fu">\overstrikes</span>{#1}}</span> +<span id="cb629-4"><a href="#cb629-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb629-5"><a href="#cb629-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb629-6"><a href="#cb629-6" aria-hidden="true" tabindex="-1"></a>This is ~~a lunar roving vehicle~~ strike-through text.</span> +<span id="cb629-7"><a href="#cb629-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb629-8"><a href="#cb629-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb579"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb579-1"><a href="#cb579-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb630"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb630-1"><a href="#cb630-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>This is <del>a lunar roving vehicle</del> strike-through text.</p> </blockquote> -<h4 data-number="2.3.1.35" id="subscript-renderer"><span -class="header-section-number">2.3.1.35</span> Subscript Renderer</h4> +<h4 data-number="2.3.1.36" id="subscript-renderer"><span +class="header-section-number">2.3.1.36</span> Subscript Renderer</h4> <p>The <code>\markdownRendererSubscript</code> macro represents a subscript span of text. The macro receives a single argument that corresponds to the subscript span of text. This macro will only be produced, when the <strong><code>subscripts</code></strong> option is enabled.</p> -<h5 class="unnumbered" id="plain-tex-example-38">Plain <span +<h5 class="unnumbered" id="plain-tex-example-42">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb580"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb580-1"><a href="#cb580-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb580-2"><a href="#cb580-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionSubscripts</span>{true}</span> -<span id="cb580-3"><a href="#cb580-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererSubscript</span>#1{ (#1 moles) and }</span> -<span id="cb580-4"><a href="#cb580-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb580-5"><a href="#cb580-5" aria-hidden="true" tabindex="-1"></a>H~2~O is a liquid.</span> -<span id="cb580-6"><a href="#cb580-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb580-7"><a href="#cb580-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb631"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb631-1"><a href="#cb631-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb631-2"><a href="#cb631-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionSubscripts</span>{true}</span> +<span id="cb631-3"><a href="#cb631-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererSubscript</span>#1{ (#1 moles) and }</span> +<span id="cb631-4"><a href="#cb631-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb631-5"><a href="#cb631-5" aria-hidden="true" tabindex="-1"></a>H~2~O is a liquid.</span> +<span id="cb631-6"><a href="#cb631-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb631-7"><a href="#cb631-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb581"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb581-1"><a href="#cb581-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb632"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb632-1"><a href="#cb632-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>H (2 moles) and O is a liquid.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-86"><span +<h5 class="unnumbered" id="latex-example-92"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb582"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb582-1"><a href="#cb582-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb582-2"><a href="#cb582-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[subscripts]{<span class="ex">markdown</span>}</span> -<span id="cb582-3"><a href="#cb582-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb582-4"><a href="#cb582-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb582-5"><a href="#cb582-5" aria-hidden="true" tabindex="-1"></a> subscript = { (#1 moles) and },</span> -<span id="cb582-6"><a href="#cb582-6" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb582-7"><a href="#cb582-7" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb582-8"><a href="#cb582-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb582-9"><a href="#cb582-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb582-10"><a href="#cb582-10" aria-hidden="true" tabindex="-1"></a>H~2~O is a liquid.</span> -<span id="cb582-11"><a href="#cb582-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb582-12"><a href="#cb582-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb633"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb633-1"><a href="#cb633-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb633-2"><a href="#cb633-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[subscripts]{<span class="ex">markdown</span>}</span> +<span id="cb633-3"><a href="#cb633-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb633-4"><a href="#cb633-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb633-5"><a href="#cb633-5" aria-hidden="true" tabindex="-1"></a> subscript = { (#1 moles) and },</span> +<span id="cb633-6"><a href="#cb633-6" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb633-7"><a href="#cb633-7" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb633-8"><a href="#cb633-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb633-9"><a href="#cb633-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb633-10"><a href="#cb633-10" aria-hidden="true" tabindex="-1"></a>H~2~O is a liquid.</span> +<span id="cb633-11"><a href="#cb633-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb633-12"><a href="#cb633-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb583"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb583-1"><a href="#cb583-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb634"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb634-1"><a href="#cb634-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>H (2 moles) and O is a liquid.</p> </blockquote> -<h5 class="unnumbered" id="context-example-51">Con<span +<h5 class="unnumbered" id="context-example-53">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb584"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb584-1"><a href="#cb584-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb584-2"><a href="#cb584-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[subscripts = yes]</span> -<span id="cb584-3"><a href="#cb584-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererSubscript</span>#1{ (#1 moles) and }</span> -<span id="cb584-4"><a href="#cb584-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb584-5"><a href="#cb584-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb584-6"><a href="#cb584-6" aria-hidden="true" tabindex="-1"></a>H~2~O is a liquid.</span> -<span id="cb584-7"><a href="#cb584-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb584-8"><a href="#cb584-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb635"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb635-1"><a href="#cb635-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb635-2"><a href="#cb635-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[subscripts = yes]</span> +<span id="cb635-3"><a href="#cb635-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererSubscript</span>#1{ (#1 moles) and }</span> +<span id="cb635-4"><a href="#cb635-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb635-5"><a href="#cb635-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb635-6"><a href="#cb635-6" aria-hidden="true" tabindex="-1"></a>H~2~O is a liquid.</span> +<span id="cb635-7"><a href="#cb635-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb635-8"><a href="#cb635-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb585"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb585-1"><a href="#cb585-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb636"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb636-1"><a href="#cb636-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>H (2 moles) and O is a liquid.</p> </blockquote> -<h4 data-number="2.3.1.36" id="superscript-renderer"><span -class="header-section-number">2.3.1.36</span> Superscript Renderer</h4> +<h4 data-number="2.3.1.37" id="superscript-renderer"><span +class="header-section-number">2.3.1.37</span> Superscript Renderer</h4> <p>The <code>\markdownRendererSuperscript</code> macro represents a superscript span of text. The macro receives a single argument that corresponds to the superscript span of text. This macro will only be produced, when the <strong><code>superscripts</code></strong> option is enabled.</p> -<h5 class="unnumbered" id="plain-tex-example-39">Plain <span +<h5 class="unnumbered" id="plain-tex-example-43">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb586"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb586-1"><a href="#cb586-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb586-2"><a href="#cb586-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionSuperscripts</span>{true}</span> -<span id="cb586-3"><a href="#cb586-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererSuperscript</span>#1{ taken to the power of #1}</span> -<span id="cb586-4"><a href="#cb586-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb586-5"><a href="#cb586-5" aria-hidden="true" tabindex="-1"></a>2^10^ is 1024.</span> -<span id="cb586-6"><a href="#cb586-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb586-7"><a href="#cb586-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb637"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb637-1"><a href="#cb637-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb637-2"><a href="#cb637-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionSuperscripts</span>{true}</span> +<span id="cb637-3"><a href="#cb637-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererSuperscript</span>#1{ taken to the power of #1}</span> +<span id="cb637-4"><a href="#cb637-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb637-5"><a href="#cb637-5" aria-hidden="true" tabindex="-1"></a>2^10^ is 1024.</span> +<span id="cb637-6"><a href="#cb637-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb637-7"><a href="#cb637-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb587"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb587-1"><a href="#cb587-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb638"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb638-1"><a href="#cb638-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>2 taken to the power of 10 is 1024.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-87"><span +<h5 class="unnumbered" id="latex-example-93"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb588"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb588-1"><a href="#cb588-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb588-2"><a href="#cb588-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[superscripts]{<span class="ex">markdown</span>}</span> -<span id="cb588-3"><a href="#cb588-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb588-4"><a href="#cb588-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb588-5"><a href="#cb588-5" aria-hidden="true" tabindex="-1"></a> superscript = { taken to the power of #1},</span> -<span id="cb588-6"><a href="#cb588-6" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb588-7"><a href="#cb588-7" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb588-8"><a href="#cb588-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb588-9"><a href="#cb588-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb588-10"><a href="#cb588-10" aria-hidden="true" tabindex="-1"></a>2^10^ is 1024.</span> -<span id="cb588-11"><a href="#cb588-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb588-12"><a href="#cb588-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb639"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb639-1"><a href="#cb639-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb639-2"><a href="#cb639-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[superscripts]{<span class="ex">markdown</span>}</span> +<span id="cb639-3"><a href="#cb639-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb639-4"><a href="#cb639-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb639-5"><a href="#cb639-5" aria-hidden="true" tabindex="-1"></a> superscript = { taken to the power of #1},</span> +<span id="cb639-6"><a href="#cb639-6" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb639-7"><a href="#cb639-7" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb639-8"><a href="#cb639-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb639-9"><a href="#cb639-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb639-10"><a href="#cb639-10" aria-hidden="true" tabindex="-1"></a>2^10^ is 1024.</span> +<span id="cb639-11"><a href="#cb639-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb639-12"><a href="#cb639-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb589"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb589-1"><a href="#cb589-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb640"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb640-1"><a href="#cb640-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>2 taken to the power of 10 is 1024.</p> </blockquote> -<h5 class="unnumbered" id="context-example-52">Con<span +<h5 class="unnumbered" id="context-example-54">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb590"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb590-1"><a href="#cb590-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb590-2"><a href="#cb590-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[superscripts = yes]</span> -<span id="cb590-3"><a href="#cb590-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererSuperscript</span>#1{ taken to the power of #1}</span> -<span id="cb590-4"><a href="#cb590-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb590-5"><a href="#cb590-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb590-6"><a href="#cb590-6" aria-hidden="true" tabindex="-1"></a>2^10^ is 1024.</span> -<span id="cb590-7"><a href="#cb590-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb590-8"><a href="#cb590-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb641"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb641-1"><a href="#cb641-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb641-2"><a href="#cb641-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[superscripts = yes]</span> +<span id="cb641-3"><a href="#cb641-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererSuperscript</span>#1{ taken to the power of #1}</span> +<span id="cb641-4"><a href="#cb641-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb641-5"><a href="#cb641-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb641-6"><a href="#cb641-6" aria-hidden="true" tabindex="-1"></a>2^10^ is 1024.</span> +<span id="cb641-7"><a href="#cb641-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb641-8"><a href="#cb641-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb591"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb591-1"><a href="#cb591-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb642"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb642-1"><a href="#cb642-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>2 taken to the power of 10 is 1024.</p> </blockquote> -<h4 data-number="2.3.1.37" id="table-renderer"><span -class="header-section-number">2.3.1.37</span> Table Renderer</h4> +<h4 data-number="2.3.1.38" id="table-attribute-context-renderers"><span +class="header-section-number">2.3.1.38</span> Table Attribute Context +Renderers</h4> +<p>The following macros are only produced, when the +<strong><code>tableCaptions</code></strong> and +<strong><code>tableAttributes</code></strong> options are enabled.</p> +<p>The <code>\markdownRendererTableAttributeContextBegin</code> and +<code>\markdownRendererTableAttributeContextEnd</code> macros represent +the beginning and the end of a context in which the attributes of a +table apply. The macros receive no arguments.</p> +<h5 class="unnumbered" id="latex-example-94"><span +class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> +<p>Using a text editor, create a text document named +<code>document.tex</code> with the following content:</p> +<div class="sourceCode" id="cb643"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb643-1"><a href="#cb643-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb643-2"><a href="#cb643-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[</span> +<span id="cb643-3"><a href="#cb643-3" aria-hidden="true" tabindex="-1"></a> pipeTables,</span> +<span id="cb643-4"><a href="#cb643-4" aria-hidden="true" tabindex="-1"></a> tableCaptions,</span> +<span id="cb643-5"><a href="#cb643-5" aria-hidden="true" tabindex="-1"></a> tableAttributes,</span> +<span id="cb643-6"><a href="#cb643-6" aria-hidden="true" tabindex="-1"></a> relativeReferences,</span> +<span id="cb643-7"><a href="#cb643-7" aria-hidden="true" tabindex="-1"></a>]{<span class="ex">markdown</span>}</span> +<span id="cb643-8"><a href="#cb643-8" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">expl3</span>}</span> +<span id="cb643-9"><a href="#cb643-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> +<span id="cb643-10"><a href="#cb643-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb643-11"><a href="#cb643-11" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb643-12"><a href="#cb643-12" aria-hidden="true" tabindex="-1"></a> tableAttributeContextBegin = {</span> +<span id="cb643-13"><a href="#cb643-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_begin:</span> +<span id="cb643-14"><a href="#cb643-14" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{</span> +<span id="cb643-15"><a href="#cb643-15" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb643-16"><a href="#cb643-16" aria-hidden="true" tabindex="-1"></a> attributeIdentifier = {</span> +<span id="cb643-17"><a href="#cb643-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\markdownSetup</span>{</span> +<span id="cb643-18"><a href="#cb643-18" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb643-19"><a href="#cb643-19" aria-hidden="true" tabindex="-1"></a> tableAttributeContextEnd = {</span> +<span id="cb643-20"><a href="#cb643-20" aria-hidden="true" tabindex="-1"></a> <span class="kw">\label</span>{<span class="ex">##1</span>}</span> +<span id="cb643-21"><a href="#cb643-21" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_end:</span> +<span id="cb643-22"><a href="#cb643-22" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb643-23"><a href="#cb643-23" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb643-24"><a href="#cb643-24" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb643-25"><a href="#cb643-25" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb643-26"><a href="#cb643-26" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb643-27"><a href="#cb643-27" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb643-28"><a href="#cb643-28" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb643-29"><a href="#cb643-29" aria-hidden="true" tabindex="-1"></a> tableAttributeContextEnd = {</span> +<span id="cb643-30"><a href="#cb643-30" aria-hidden="true" tabindex="-1"></a> <span class="fu">\group</span>_end:</span> +<span id="cb643-31"><a href="#cb643-31" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb643-32"><a href="#cb643-32" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb643-33"><a href="#cb643-33" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb643-34"><a href="#cb643-34" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> +<span id="cb643-35"><a href="#cb643-35" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb643-36"><a href="#cb643-36" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb643-37"><a href="#cb643-37" aria-hidden="true" tabindex="-1"></a>See Table <#example-table>.</span> +<span id="cb643-38"><a href="#cb643-38" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb643-39"><a href="#cb643-39" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> +<span id="cb643-40"><a href="#cb643-40" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> +<span id="cb643-41"><a href="#cb643-41" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> +<span id="cb643-42"><a href="#cb643-42" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> +<span id="cb643-43"><a href="#cb643-43" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> +<span id="cb643-44"><a href="#cb643-44" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb643-45"><a href="#cb643-45" aria-hidden="true" tabindex="-1"></a> : Demonstration of pipe table syntax. {#example-table}</span> +<span id="cb643-46"><a href="#cb643-46" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb643-47"><a href="#cb643-47" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb644"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb644-1"><a href="#cb644-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<p>A PDF document named <code>document.pdf</code> should be produced and +contain the following text:</p> +<blockquote> +<p>See Table 1.</p> +<table> +<caption>Table 1. Demonstration of pipe table syntax.</caption> +<thead> +<tr class="header"> +<th style="text-align: right;">Right</th> +<th style="text-align: left;">Left</th> +<th>Default</th> +<th style="text-align: center;">Center</th> +</tr> +</thead> +<tbody> +<tr class="odd"> +<td style="text-align: right;">12</td> +<td style="text-align: left;">12</td> +<td>12</td> +<td style="text-align: center;">12</td> +</tr> +<tr class="even"> +<td style="text-align: right;">123</td> +<td style="text-align: left;">123</td> +<td>123</td> +<td style="text-align: center;">123</td> +</tr> +<tr class="odd"> +<td style="text-align: right;">1</td> +<td style="text-align: left;">1</td> +<td>1</td> +<td style="text-align: center;">1</td> +</tr> +</tbody> +</table> +</blockquote> +<h4 data-number="2.3.1.39" id="table-renderer"><span +class="header-section-number">2.3.1.39</span> Table Renderer</h4> <p>The <code>\markdownRendererTable</code> macro represents a table. This macro will only be produced, when the <strong><code>pipeTables</code></strong> option is enabled. The macro @@ -10836,71 +12011,71 @@ one of the following:</p> <li><code>c</code> – The corresponding column is centered.</li> <li><code>r</code> – The corresponding column is right-aligned.</li> </ul> -<h5 class="unnumbered" id="latex-example-88"><span +<h5 class="unnumbered" id="latex-example-95"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb592"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb592-1"><a href="#cb592-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb592-2"><a href="#cb592-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[pipeTables, tableCaptions]{<span class="ex">markdown</span>}</span> -<span id="cb592-3"><a href="#cb592-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\newcount\rowCounter</span></span> -<span id="cb592-4"><a href="#cb592-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\newcount\columnCounter</span></span> -<span id="cb592-5"><a href="#cb592-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\makeatletter</span></span> -<span id="cb592-6"><a href="#cb592-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\processRow</span>#1{<span class="co">%</span></span> -<span id="cb592-7"><a href="#cb592-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\columnCounter</span>=1<span class="co">%</span></span> -<span id="cb592-8"><a href="#cb592-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\rowCounter</span>=0<span class="fu">\relax</span></span> -<span id="cb592-9"><a href="#cb592-9" aria-hidden="true" tabindex="-1"></a> As for the alignment,</span> -<span id="cb592-10"><a href="#cb592-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb592-11"><a href="#cb592-11" aria-hidden="true" tabindex="-1"></a> In row <span class="fu">\the\rowCounter</span>,</span> -<span id="cb592-12"><a href="#cb592-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb592-13"><a href="#cb592-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\processColumn</span>#1</span> -<span id="cb592-14"><a href="#cb592-14" aria-hidden="true" tabindex="-1"></a> <span class="fu">\advance\rowCounter</span> by 1<span class="fu">\relax</span></span> -<span id="cb592-15"><a href="#cb592-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\rowCounter</span>><span class="fu">\rowTotal\relax</span></span> -<span id="cb592-16"><a href="#cb592-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">\expandafter\@gobble</span></span> -<span id="cb592-17"><a href="#cb592-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi\processRow</span>}<span class="co">%</span></span> -<span id="cb592-18"><a href="#cb592-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\processColumn</span>#1{<span class="co">%</span></span> -<span id="cb592-19"><a href="#cb592-19" aria-hidden="true" tabindex="-1"></a> column number <span class="fu">\the\columnCounter</span>{}</span> -<span id="cb592-20"><a href="#cb592-20" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\rowCounter</span>=0<span class="fu">\relax</span></span> -<span id="cb592-21"><a href="#cb592-21" aria-hidden="true" tabindex="-1"></a> <span class="fu">\if</span>#1d{}has default alignment<span class="fu">\fi</span></span> -<span id="cb592-22"><a href="#cb592-22" aria-hidden="true" tabindex="-1"></a> <span class="fu">\if</span>#1l{}is left-aligned<span class="fu">\fi</span></span> -<span id="cb592-23"><a href="#cb592-23" aria-hidden="true" tabindex="-1"></a> <span class="fu">\if</span>#1c{}is centered<span class="fu">\fi</span></span> -<span id="cb592-24"><a href="#cb592-24" aria-hidden="true" tabindex="-1"></a> <span class="fu">\if</span>#1r{}is right-aligned<span class="fu">\fi</span></span> -<span id="cb592-25"><a href="#cb592-25" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb592-26"><a href="#cb592-26" aria-hidden="true" tabindex="-1"></a> says <span class="fu">\emph</span>{#1}<span class="co">%</span></span> -<span id="cb592-27"><a href="#cb592-27" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb592-28"><a href="#cb592-28" aria-hidden="true" tabindex="-1"></a> <span class="fu">\advance\columnCounter</span> by 1<span class="fu">\relax</span></span> -<span id="cb592-29"><a href="#cb592-29" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\columnCounter</span><<span class="fu">\columnTotal\relax</span>, <span class="fu">\fi</span></span> -<span id="cb592-30"><a href="#cb592-30" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\columnCounter</span>=<span class="fu">\columnTotal\relax</span>, and <span class="fu">\fi</span></span> -<span id="cb592-31"><a href="#cb592-31" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\columnCounter</span>><span class="fu">\columnTotal\relax</span></span> -<span id="cb592-32"><a href="#cb592-32" aria-hidden="true" tabindex="-1"></a> .<span class="fu">\expandafter\@gobble</span></span> -<span id="cb592-33"><a href="#cb592-33" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi\processColumn</span>}<span class="co">%</span></span> -<span id="cb592-34"><a href="#cb592-34" aria-hidden="true" tabindex="-1"></a><span class="fu">\makeatother</span></span> -<span id="cb592-35"><a href="#cb592-35" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb592-36"><a href="#cb592-36" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb592-37"><a href="#cb592-37" aria-hidden="true" tabindex="-1"></a> table = {<span class="co">%</span></span> -<span id="cb592-38"><a href="#cb592-38" aria-hidden="true" tabindex="-1"></a> This is a table with caption <span class="fu">\emph</span>{#1} that is #3 colums wide</span> -<span id="cb592-39"><a href="#cb592-39" aria-hidden="true" tabindex="-1"></a> and #2 rows long.</span> -<span id="cb592-40"><a href="#cb592-40" aria-hidden="true" tabindex="-1"></a> <span class="fu">\rowCounter</span>=0<span class="co">%</span></span> -<span id="cb592-41"><a href="#cb592-41" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\rowTotal</span>{#2}<span class="co">%</span></span> -<span id="cb592-42"><a href="#cb592-42" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\columnTotal</span>{#3}<span class="co">%</span></span> -<span id="cb592-43"><a href="#cb592-43" aria-hidden="true" tabindex="-1"></a> <span class="fu">\processRow</span></span> -<span id="cb592-44"><a href="#cb592-44" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb592-45"><a href="#cb592-45" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb592-46"><a href="#cb592-46" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb592-47"><a href="#cb592-47" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb592-48"><a href="#cb592-48" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb592-49"><a href="#cb592-49" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> -<span id="cb592-50"><a href="#cb592-50" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> -<span id="cb592-51"><a href="#cb592-51" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> -<span id="cb592-52"><a href="#cb592-52" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> -<span id="cb592-53"><a href="#cb592-53" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> -<span id="cb592-54"><a href="#cb592-54" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb592-55"><a href="#cb592-55" aria-hidden="true" tabindex="-1"></a> : Demonstration of pipe table syntax</span> -<span id="cb592-56"><a href="#cb592-56" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb592-57"><a href="#cb592-57" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb593"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb593-1"><a href="#cb593-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb645"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb645-1"><a href="#cb645-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb645-2"><a href="#cb645-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[pipeTables, tableCaptions]{<span class="ex">markdown</span>}</span> +<span id="cb645-3"><a href="#cb645-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\newcount\rowCounter</span></span> +<span id="cb645-4"><a href="#cb645-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\newcount\columnCounter</span></span> +<span id="cb645-5"><a href="#cb645-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\makeatletter</span></span> +<span id="cb645-6"><a href="#cb645-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\processRow</span>#1{<span class="co">%</span></span> +<span id="cb645-7"><a href="#cb645-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">\columnCounter</span>=1<span class="co">%</span></span> +<span id="cb645-8"><a href="#cb645-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\rowCounter</span>=0<span class="fu">\relax</span></span> +<span id="cb645-9"><a href="#cb645-9" aria-hidden="true" tabindex="-1"></a> As for the alignment,</span> +<span id="cb645-10"><a href="#cb645-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb645-11"><a href="#cb645-11" aria-hidden="true" tabindex="-1"></a> In row <span class="fu">\the\rowCounter</span>,</span> +<span id="cb645-12"><a href="#cb645-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb645-13"><a href="#cb645-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\processColumn</span>#1</span> +<span id="cb645-14"><a href="#cb645-14" aria-hidden="true" tabindex="-1"></a> <span class="fu">\advance\rowCounter</span> by 1<span class="fu">\relax</span></span> +<span id="cb645-15"><a href="#cb645-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\rowCounter</span>><span class="fu">\rowTotal\relax</span></span> +<span id="cb645-16"><a href="#cb645-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">\expandafter\@gobble</span></span> +<span id="cb645-17"><a href="#cb645-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi\processRow</span>}<span class="co">%</span></span> +<span id="cb645-18"><a href="#cb645-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\processColumn</span>#1{<span class="co">%</span></span> +<span id="cb645-19"><a href="#cb645-19" aria-hidden="true" tabindex="-1"></a> column number <span class="fu">\the\columnCounter</span>{}</span> +<span id="cb645-20"><a href="#cb645-20" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\rowCounter</span>=0<span class="fu">\relax</span></span> +<span id="cb645-21"><a href="#cb645-21" aria-hidden="true" tabindex="-1"></a> <span class="fu">\if</span>#1d{}has default alignment<span class="fu">\fi</span></span> +<span id="cb645-22"><a href="#cb645-22" aria-hidden="true" tabindex="-1"></a> <span class="fu">\if</span>#1l{}is left-aligned<span class="fu">\fi</span></span> +<span id="cb645-23"><a href="#cb645-23" aria-hidden="true" tabindex="-1"></a> <span class="fu">\if</span>#1c{}is centered<span class="fu">\fi</span></span> +<span id="cb645-24"><a href="#cb645-24" aria-hidden="true" tabindex="-1"></a> <span class="fu">\if</span>#1r{}is right-aligned<span class="fu">\fi</span></span> +<span id="cb645-25"><a href="#cb645-25" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> +<span id="cb645-26"><a href="#cb645-26" aria-hidden="true" tabindex="-1"></a> says <span class="fu">\emph</span>{#1}<span class="co">%</span></span> +<span id="cb645-27"><a href="#cb645-27" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> +<span id="cb645-28"><a href="#cb645-28" aria-hidden="true" tabindex="-1"></a> <span class="fu">\advance\columnCounter</span> by 1<span class="fu">\relax</span></span> +<span id="cb645-29"><a href="#cb645-29" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\columnCounter</span><<span class="fu">\columnTotal\relax</span>, <span class="fu">\fi</span></span> +<span id="cb645-30"><a href="#cb645-30" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\columnCounter</span>=<span class="fu">\columnTotal\relax</span>, and <span class="fu">\fi</span></span> +<span id="cb645-31"><a href="#cb645-31" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\columnCounter</span>><span class="fu">\columnTotal\relax</span></span> +<span id="cb645-32"><a href="#cb645-32" aria-hidden="true" tabindex="-1"></a> .<span class="fu">\expandafter\@gobble</span></span> +<span id="cb645-33"><a href="#cb645-33" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi\processColumn</span>}<span class="co">%</span></span> +<span id="cb645-34"><a href="#cb645-34" aria-hidden="true" tabindex="-1"></a><span class="fu">\makeatother</span></span> +<span id="cb645-35"><a href="#cb645-35" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb645-36"><a href="#cb645-36" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb645-37"><a href="#cb645-37" aria-hidden="true" tabindex="-1"></a> table = {<span class="co">%</span></span> +<span id="cb645-38"><a href="#cb645-38" aria-hidden="true" tabindex="-1"></a> This is a table with caption <span class="fu">\emph</span>{#1} that is #3 colums wide</span> +<span id="cb645-39"><a href="#cb645-39" aria-hidden="true" tabindex="-1"></a> and #2 rows long.</span> +<span id="cb645-40"><a href="#cb645-40" aria-hidden="true" tabindex="-1"></a> <span class="fu">\rowCounter</span>=0<span class="co">%</span></span> +<span id="cb645-41"><a href="#cb645-41" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\rowTotal</span>{#2}<span class="co">%</span></span> +<span id="cb645-42"><a href="#cb645-42" aria-hidden="true" tabindex="-1"></a> <span class="fu">\def\columnTotal</span>{#3}<span class="co">%</span></span> +<span id="cb645-43"><a href="#cb645-43" aria-hidden="true" tabindex="-1"></a> <span class="fu">\processRow</span></span> +<span id="cb645-44"><a href="#cb645-44" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb645-45"><a href="#cb645-45" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb645-46"><a href="#cb645-46" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb645-47"><a href="#cb645-47" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb645-48"><a href="#cb645-48" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb645-49"><a href="#cb645-49" aria-hidden="true" tabindex="-1"></a>| Right | Left | Default | Center |</span> +<span id="cb645-50"><a href="#cb645-50" aria-hidden="true" tabindex="-1"></a>|------:|:-----|---------|:------:|</span> +<span id="cb645-51"><a href="#cb645-51" aria-hidden="true" tabindex="-1"></a>| 12 | 12 | 12 | 12 |</span> +<span id="cb645-52"><a href="#cb645-52" aria-hidden="true" tabindex="-1"></a>| 123 | 123 | 123 | 123 |</span> +<span id="cb645-53"><a href="#cb645-53" aria-hidden="true" tabindex="-1"></a>| 1 | 1 | 1 | 1 |</span> +<span id="cb645-54"><a href="#cb645-54" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb645-55"><a href="#cb645-55" aria-hidden="true" tabindex="-1"></a> : Demonstration of pipe table syntax</span> +<span id="cb645-56"><a href="#cb645-56" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb645-57"><a href="#cb645-57" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb646"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb646-1"><a href="#cb646-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -10918,35 +12093,36 @@ column number 4 says <em>12</em>. In row 3, column number 1 says number 1 says <em>1</em>, column number 2 says <em>1</em>, column number 3 says <em>1</em>, and column number 4 says <em>1</em>.</p> </blockquote> -<h4 data-number="2.3.1.38" id="tex-math-renderers"><span -class="header-section-number">2.3.1.38</span> Tex Math Renderers</h4> +<h4 data-number="2.3.1.40" id="tex-math-renderers"><span +class="header-section-number">2.3.1.40</span> <span +class="tex">T<sub>e</sub>X</span> Math Renderers</h4> <p>The <code>\markdownRendererInlineMath</code> and <code>\markdownRendererDisplayMath</code> macros represent inline and display <span class="tex">T<sub>e</sub>X</span> math. Both macros -receive a single argument that corresponds to the tex math content. -These macros will only be produced, when the -<strong><code>texMathDollars</code></strong>, +receive a single argument that corresponds to the <span +class="tex">T<sub>e</sub>X</span> math content. These macros will only +be produced, when the <strong><code>texMathDollars</code></strong>, <strong><code>texMathSingleBackslash</code></strong>, or <strong><code>texMathDoubleBackslash</code></strong> option are enabled.</p> -<h5 class="unnumbered" id="plain-tex-example-40">Plain <span +<h5 class="unnumbered" id="plain-tex-example-44">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb594"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb594-1"><a href="#cb594-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb594-2"><a href="#cb594-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTexMathDollars</span>{true}</span> -<span id="cb594-3"><a href="#cb594-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInlineMath</span>#1{<span class="ss">$#1</span><span class="sc">\dots</span><span class="ss">$</span>}</span> -<span id="cb594-4"><a href="#cb594-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDisplayMath</span>#1{<span class="ss">$$#1</span><span class="sc">\eqno</span><span class="ss">(1)$$</span>}</span> -<span id="cb594-5"><a href="#cb594-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb594-6"><a href="#cb594-6" aria-hidden="true" tabindex="-1"></a><span class="ss">$E=mc^2$</span></span> -<span id="cb594-7"><a href="#cb594-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb594-8"><a href="#cb594-8" aria-hidden="true" tabindex="-1"></a><span class="ss">$$</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx$$</span></span> -<span id="cb594-9"><a href="#cb594-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb594-10"><a href="#cb594-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb647"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb647-1"><a href="#cb647-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb647-2"><a href="#cb647-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionTexMathDollars</span>{true}</span> +<span id="cb647-3"><a href="#cb647-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInlineMath</span>#1{<span class="ss">$#1</span><span class="sc">\dots</span><span class="ss">$</span>}</span> +<span id="cb647-4"><a href="#cb647-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDisplayMath</span>#1{<span class="ss">$$#1</span><span class="sc">\eqno</span><span class="ss">(1)$$</span>}</span> +<span id="cb647-5"><a href="#cb647-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb647-6"><a href="#cb647-6" aria-hidden="true" tabindex="-1"></a><span class="ss">$E=mc^2$</span></span> +<span id="cb647-7"><a href="#cb647-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb647-8"><a href="#cb647-8" aria-hidden="true" tabindex="-1"></a><span class="ss">$$</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx$$</span></span> +<span id="cb647-9"><a href="#cb647-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb647-10"><a href="#cb647-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb595"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb595-1"><a href="#cb595-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb648"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb648-1"><a href="#cb648-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -10956,26 +12132,26 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup>…</span>< \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx\eqno(1)$$</span></p> </blockquote> -<h5 class="unnumbered" id="latex-example-89"><span +<h5 class="unnumbered" id="latex-example-96"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb596"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb596-1"><a href="#cb596-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb596-2"><a href="#cb596-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[texMathDollars]{<span class="ex">markdown</span>}</span> -<span id="cb596-3"><a href="#cb596-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">amsmath</span>}</span> -<span id="cb596-4"><a href="#cb596-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInlineMath</span>#1{<span class="kw">\begin</span>{<span class="ex">math</span>}<span class="ss">#1</span><span class="sc">\dots\end</span><span class="ss">{math}}</span></span> -<span id="cb596-5"><a href="#cb596-5" aria-hidden="true" tabindex="-1"></a><span class="sc">\def\markdownRendererDisplayMath</span><span class="ss">#1{</span><span class="kw">\begin</span>{<span class="ex">equation</span>}<span class="ss">#1</span><span class="sc">\end</span><span class="ss">{equation}}</span></span> -<span id="cb596-6"><a href="#cb596-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb596-7"><a href="#cb596-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb596-8"><a href="#cb596-8" aria-hidden="true" tabindex="-1"></a><span class="er">$</span><span class="ss">E=mc^2</span><span class="er">$</span></span> -<span id="cb596-9"><a href="#cb596-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb596-10"><a href="#cb596-10" aria-hidden="true" tabindex="-1"></a><span class="er">$$</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx</span><span class="er">$$</span></span> -<span id="cb596-11"><a href="#cb596-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb596-12"><a href="#cb596-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb649"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb649-1"><a href="#cb649-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb649-2"><a href="#cb649-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[texMathDollars]{<span class="ex">markdown</span>}</span> +<span id="cb649-3"><a href="#cb649-3" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">amsmath</span>}</span> +<span id="cb649-4"><a href="#cb649-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInlineMath</span>#1{<span class="kw">\begin</span>{<span class="ex">math</span>}<span class="ss">#1</span><span class="sc">\dots\end</span><span class="ss">{math}}</span></span> +<span id="cb649-5"><a href="#cb649-5" aria-hidden="true" tabindex="-1"></a><span class="sc">\def\markdownRendererDisplayMath</span><span class="ss">#1{</span><span class="kw">\begin</span>{<span class="ex">equation</span>}<span class="ss">#1</span><span class="sc">\end</span><span class="ss">{equation}}</span></span> +<span id="cb649-6"><a href="#cb649-6" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb649-7"><a href="#cb649-7" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb649-8"><a href="#cb649-8" aria-hidden="true" tabindex="-1"></a><span class="er">$</span><span class="ss">E=mc^2</span><span class="er">$</span></span> +<span id="cb649-9"><a href="#cb649-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb649-10"><a href="#cb649-10" aria-hidden="true" tabindex="-1"></a><span class="er">$$</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx</span><span class="er">$$</span></span> +<span id="cb649-11"><a href="#cb649-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb649-12"><a href="#cb649-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb597"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb597-1"><a href="#cb597-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb650"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb650-1"><a href="#cb650-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -10984,25 +12160,25 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup>…</span>< <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em> (1)</span></p> </blockquote> -<h5 class="unnumbered" id="context-example-53">Con<span +<h5 class="unnumbered" id="context-example-55">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb598"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb598-1"><a href="#cb598-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb598-2"><a href="#cb598-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[texMathDollars = yes]</span> -<span id="cb598-3"><a href="#cb598-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInlineMath</span>#1{<span class="ss">$#1</span><span class="sc">\dots</span><span class="ss">$</span>}<span class="co">%</span></span> -<span id="cb598-4"><a href="#cb598-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDisplayMath</span>#1{<span class="fu">\placeformula\startformula</span>#1<span class="fu">\stopformula</span>}<span class="co">%</span></span> -<span id="cb598-5"><a href="#cb598-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb598-6"><a href="#cb598-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb598-7"><a href="#cb598-7" aria-hidden="true" tabindex="-1"></a><span class="ss">$E=mc^2$</span></span> -<span id="cb598-8"><a href="#cb598-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb598-9"><a href="#cb598-9" aria-hidden="true" tabindex="-1"></a><span class="ss">$$</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx$$</span></span> -<span id="cb598-10"><a href="#cb598-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb598-11"><a href="#cb598-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb651"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb651-1"><a href="#cb651-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb651-2"><a href="#cb651-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[texMathDollars = yes]</span> +<span id="cb651-3"><a href="#cb651-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererInlineMath</span>#1{<span class="ss">$#1</span><span class="sc">\dots</span><span class="ss">$</span>}<span class="co">%</span></span> +<span id="cb651-4"><a href="#cb651-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererDisplayMath</span>#1{<span class="fu">\placeformula\startformula</span>#1<span class="fu">\stopformula</span>}<span class="co">%</span></span> +<span id="cb651-5"><a href="#cb651-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb651-6"><a href="#cb651-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb651-7"><a href="#cb651-7" aria-hidden="true" tabindex="-1"></a><span class="ss">$E=mc^2$</span></span> +<span id="cb651-8"><a href="#cb651-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb651-9"><a href="#cb651-9" aria-hidden="true" tabindex="-1"></a><span class="ss">$$</span><span class="sc">\hat</span><span class="ss">{f} </span><span class="sc">\left</span><span class="ss"> ( </span><span class="sc">\xi</span><span class="ss"> </span><span class="sc">\right</span><span class="ss"> )= </span><span class="sc">\int</span><span class="ss">_{-</span><span class="sc">\infty</span><span class="ss">}^{</span><span class="sc">\infty</span><span class="ss">} f</span><span class="sc">\left</span><span class="ss"> ( x </span><span class="sc">\right</span><span class="ss"> ) e^{-i2</span><span class="sc">\pi</span><span class="ss"> </span><span class="sc">\xi</span><span class="ss"> x} dx$$</span></span> +<span id="cb651-10"><a href="#cb651-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb651-11"><a href="#cb651-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb599"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb599-1"><a href="#cb599-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb652"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb652-1"><a href="#cb652-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -11011,92 +12187,29 @@ class="math inline"><em>E</em> = <em>m</em><em>c</em><sup>2</sup>…</span>< <p><span class="math display"><em>f̂</em>(<em>ξ</em>) = ∫<sub>−∞</sub><sup>∞</sup><em>f</em>(<em>x</em>)<em>e</em><sup>−<em>i</em>2<em>π</em><em>ξ</em><em>x</em></sup><em>d</em><em>x</em> (1)</span></p> </blockquote> -<h4 data-number="2.3.1.39" id="text-citations-renderer"><span -class="header-section-number">2.3.1.39</span> Text Citations -Renderer</h4> -<p>The <code>\markdownRendererTextCite</code> macro represents a string -of one or more text citations. This macro will only be produced, when -the <strong><code>citations</code></strong> option is enabled. The macro -receives parameters in the same format as the -<code>\markdownRendererCite</code> macro.</p> -<h5 class="unnumbered" id="latex-example-90"><span -class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> -<p>Using a text editor, create a text document named -<code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb600"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb600-1"><a href="#cb600-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb600-2"><a href="#cb600-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[citations]{<span class="ex">markdown</span>}</span> -<span id="cb600-3"><a href="#cb600-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\newcount\citationsCounter</span></span> -<span id="cb600-4"><a href="#cb600-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\newcount\citationsTotal</span></span> -<span id="cb600-5"><a href="#cb600-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\makeatletter</span></span> -<span id="cb600-6"><a href="#cb600-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\citations</span>#1#2#3#4{<span class="co">%</span></span> -<span id="cb600-7"><a href="#cb600-7" aria-hidden="true" tabindex="-1"></a> a text citation <span class="fu">\emph</span>{#4}</span> -<span id="cb600-8"><a href="#cb600-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">\advance\citationsCounter</span> by 1<span class="fu">\relax</span></span> -<span id="cb600-9"><a href="#cb600-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifx\relax</span>#2<span class="fu">\relax</span></span> -<span id="cb600-10"><a href="#cb600-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifx\relax</span>#3<span class="fu">\relax\else</span></span> -<span id="cb600-11"><a href="#cb600-11" aria-hidden="true" tabindex="-1"></a> with a postfix <span class="fu">\emph</span>{#3}<span class="co">%</span></span> -<span id="cb600-12"><a href="#cb600-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb600-13"><a href="#cb600-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb600-14"><a href="#cb600-14" aria-hidden="true" tabindex="-1"></a> with a prefix <span class="fu">\emph</span>{#2}<span class="co">%</span></span> -<span id="cb600-15"><a href="#cb600-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifx\relax</span>#3<span class="fu">\relax\else</span></span> -<span id="cb600-16"><a href="#cb600-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ </span>and a postfix <span class="fu">\emph</span>{#3}<span class="co">%</span></span> -<span id="cb600-17"><a href="#cb600-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb600-18"><a href="#cb600-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi</span></span> -<span id="cb600-19"><a href="#cb600-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">\ifnum\citationsCounter</span>><span class="fu">\citationsTotal\relax</span></span> -<span id="cb600-20"><a href="#cb600-20" aria-hidden="true" tabindex="-1"></a> .<span class="co">%</span></span> -<span id="cb600-21"><a href="#cb600-21" aria-hidden="true" tabindex="-1"></a> <span class="fu">\expandafter\@gobble</span></span> -<span id="cb600-22"><a href="#cb600-22" aria-hidden="true" tabindex="-1"></a> <span class="fu">\else</span></span> -<span id="cb600-23"><a href="#cb600-23" aria-hidden="true" tabindex="-1"></a> , and</span> -<span id="cb600-24"><a href="#cb600-24" aria-hidden="true" tabindex="-1"></a> <span class="fu">\fi\citations</span>}</span> -<span id="cb600-25"><a href="#cb600-25" aria-hidden="true" tabindex="-1"></a><span class="fu">\makeatother</span></span> -<span id="cb600-26"><a href="#cb600-26" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb600-27"><a href="#cb600-27" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb600-28"><a href="#cb600-28" aria-hidden="true" tabindex="-1"></a> textCite = {<span class="co">%</span></span> -<span id="cb600-29"><a href="#cb600-29" aria-hidden="true" tabindex="-1"></a> <span class="fu">\citationsCounter</span>=1<span class="co">%</span></span> -<span id="cb600-30"><a href="#cb600-30" aria-hidden="true" tabindex="-1"></a> <span class="fu">\citationsTotal</span>=#1<span class="co">%</span></span> -<span id="cb600-31"><a href="#cb600-31" aria-hidden="true" tabindex="-1"></a> This is</span> -<span id="cb600-32"><a href="#cb600-32" aria-hidden="true" tabindex="-1"></a> <span class="fu">\expandafter\citations</span></span> -<span id="cb600-33"><a href="#cb600-33" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb600-34"><a href="#cb600-34" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb600-35"><a href="#cb600-35" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb600-36"><a href="#cb600-36" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb600-37"><a href="#cb600-37" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb600-38"><a href="#cb600-38" aria-hidden="true" tabindex="-1"></a>@abrahams90 [pp. 12; also @eijkhout91]</span> -<span id="cb600-39"><a href="#cb600-39" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb600-40"><a href="#cb600-40" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb601"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb601-1"><a href="#cb601-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> -<p>A PDF document named <code>document.pdf</code> should be produced and -contain the following text:</p> -<blockquote> -<p>This is a text citation <em>abrahams90</em> with a postfix -<em>pp. 12</em>, and a citation <em>eijkhout91</em> with a prefix -<em>also</em>.</p> -</blockquote> -<h4 data-number="2.3.1.40" id="thematic-break-renderer"><span -class="header-section-number">2.3.1.40</span> Thematic Break +<h4 data-number="2.3.1.41" id="thematic-break-renderer"><span +class="header-section-number">2.3.1.41</span> Thematic Break Renderer</h4> <p>The <code>\markdownRendererThematicBreak</code> macro represents a thematic break. The macro receives no arguments.</p> -<h5 class="unnumbered" id="plain-tex-example-41">Plain <span +<h5 class="unnumbered" id="plain-tex-example-45">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb602"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb602-1"><a href="#cb602-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb602-2"><a href="#cb602-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererThematicBreak</span>{<span class="fu">\vfil\break</span>}</span> -<span id="cb602-3"><a href="#cb602-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb602-4"><a href="#cb602-4" aria-hidden="true" tabindex="-1"></a>This is the first page.</span> -<span id="cb602-5"><a href="#cb602-5" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb602-6"><a href="#cb602-6" aria-hidden="true" tabindex="-1"></a>***</span> -<span id="cb602-7"><a href="#cb602-7" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb602-8"><a href="#cb602-8" aria-hidden="true" tabindex="-1"></a>This is the second page.</span> -<span id="cb602-9"><a href="#cb602-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb602-10"><a href="#cb602-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb653"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb653-1"><a href="#cb653-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb653-2"><a href="#cb653-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererThematicBreak</span>{<span class="fu">\vfil\break</span>}</span> +<span id="cb653-3"><a href="#cb653-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb653-4"><a href="#cb653-4" aria-hidden="true" tabindex="-1"></a>This is the first page.</span> +<span id="cb653-5"><a href="#cb653-5" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb653-6"><a href="#cb653-6" aria-hidden="true" tabindex="-1"></a>***</span> +<span id="cb653-7"><a href="#cb653-7" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb653-8"><a href="#cb653-8" aria-hidden="true" tabindex="-1"></a>This is the second page.</span> +<span id="cb653-9"><a href="#cb653-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb653-10"><a href="#cb653-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb603"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb603-1"><a href="#cb603-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb654"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb654-1"><a href="#cb654-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -11104,30 +12217,30 @@ contain the following text:</p> <hr /> <p>This is the second page.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-91"><span +<h5 class="unnumbered" id="latex-example-97"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb604"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb604-1"><a href="#cb604-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb604-2"><a href="#cb604-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb604-3"><a href="#cb604-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb604-4"><a href="#cb604-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb604-5"><a href="#cb604-5" aria-hidden="true" tabindex="-1"></a> thematicBreak = <span class="fu">\newpage</span>,</span> -<span id="cb604-6"><a href="#cb604-6" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb604-7"><a href="#cb604-7" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb604-8"><a href="#cb604-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb604-9"><a href="#cb604-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb604-10"><a href="#cb604-10" aria-hidden="true" tabindex="-1"></a>This is the first page.</span> -<span id="cb604-11"><a href="#cb604-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb604-12"><a href="#cb604-12" aria-hidden="true" tabindex="-1"></a>***</span> -<span id="cb604-13"><a href="#cb604-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb604-14"><a href="#cb604-14" aria-hidden="true" tabindex="-1"></a>This is the second page.</span> -<span id="cb604-15"><a href="#cb604-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb604-16"><a href="#cb604-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb655"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb655-1"><a href="#cb655-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb655-2"><a href="#cb655-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb655-3"><a href="#cb655-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb655-4"><a href="#cb655-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb655-5"><a href="#cb655-5" aria-hidden="true" tabindex="-1"></a> thematicBreak = <span class="fu">\newpage</span>,</span> +<span id="cb655-6"><a href="#cb655-6" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb655-7"><a href="#cb655-7" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb655-8"><a href="#cb655-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb655-9"><a href="#cb655-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb655-10"><a href="#cb655-10" aria-hidden="true" tabindex="-1"></a>This is the first page.</span> +<span id="cb655-11"><a href="#cb655-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb655-12"><a href="#cb655-12" aria-hidden="true" tabindex="-1"></a>***</span> +<span id="cb655-13"><a href="#cb655-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb655-14"><a href="#cb655-14" aria-hidden="true" tabindex="-1"></a>This is the second page.</span> +<span id="cb655-15"><a href="#cb655-15" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb655-16"><a href="#cb655-16" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb605"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb605-1"><a href="#cb605-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb656"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb656-1"><a href="#cb656-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -11135,25 +12248,25 @@ contain the following text:</p> <hr /> <p>This is the second page.</p> </blockquote> -<h5 class="unnumbered" id="context-example-54">Con<span +<h5 class="unnumbered" id="context-example-56">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb606"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb606-1"><a href="#cb606-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb606-2"><a href="#cb606-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererThematicBreak</span>{<span class="fu">\page</span>[yes]}</span> -<span id="cb606-3"><a href="#cb606-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb606-4"><a href="#cb606-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb606-5"><a href="#cb606-5" aria-hidden="true" tabindex="-1"></a>This is the first page.</span> -<span id="cb606-6"><a href="#cb606-6" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb606-7"><a href="#cb606-7" aria-hidden="true" tabindex="-1"></a>***</span> -<span id="cb606-8"><a href="#cb606-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb606-9"><a href="#cb606-9" aria-hidden="true" tabindex="-1"></a>This is the second page.</span> -<span id="cb606-10"><a href="#cb606-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb606-11"><a href="#cb606-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb657"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb657-1"><a href="#cb657-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb657-2"><a href="#cb657-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererThematicBreak</span>{<span class="fu">\page</span>[yes]}</span> +<span id="cb657-3"><a href="#cb657-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb657-4"><a href="#cb657-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb657-5"><a href="#cb657-5" aria-hidden="true" tabindex="-1"></a>This is the first page.</span> +<span id="cb657-6"><a href="#cb657-6" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb657-7"><a href="#cb657-7" aria-hidden="true" tabindex="-1"></a>***</span> +<span id="cb657-8"><a href="#cb657-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb657-9"><a href="#cb657-9" aria-hidden="true" tabindex="-1"></a>This is the second page.</span> +<span id="cb657-10"><a href="#cb657-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb657-11"><a href="#cb657-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb607"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb607-1"><a href="#cb607-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb658"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb658-1"><a href="#cb658-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -11161,8 +12274,8 @@ contain the following text:</p> <hr /> <p>This is the second page.</p> </blockquote> -<h4 data-number="2.3.1.41" id="tickbox-renderers"><span -class="header-section-number">2.3.1.41</span> Tickbox Renderers</h4> +<h4 data-number="2.3.1.42" id="tickbox-renderers"><span +class="header-section-number">2.3.1.42</span> Tickbox Renderers</h4> <p>The macros named <code>\markdownRendererTickedBox</code>, <code>\markdownRendererHalfTickedBox</code>, and <code>\markdownRendererUntickedBox</code> represent ticked and unticked @@ -11171,28 +12284,28 @@ boxes, respectively. These macros will either be produced, when the Ballot Box with X (☒, U+2612), Hourglass (⌛, U+231B) or Ballot Box (☐, U+2610) Unicode characters are encountered in the markdown input, respectively.</p> -<h5 class="unnumbered" id="latex-example-92"><span +<h5 class="unnumbered" id="latex-example-98"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb608"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb608-1"><a href="#cb608-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb608-2"><a href="#cb608-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[taskLists]{<span class="ex">markdown</span>}</span> -<span id="cb608-3"><a href="#cb608-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb608-4"><a href="#cb608-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb608-5"><a href="#cb608-5" aria-hidden="true" tabindex="-1"></a> untickedBox = No,</span> -<span id="cb608-6"><a href="#cb608-6" aria-hidden="true" tabindex="-1"></a> tickedBox = Yes,</span> -<span id="cb608-7"><a href="#cb608-7" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb608-8"><a href="#cb608-8" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb608-9"><a href="#cb608-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb608-10"><a href="#cb608-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb608-11"><a href="#cb608-11" aria-hidden="true" tabindex="-1"></a>- [ ] you can't.</span> -<span id="cb608-12"><a href="#cb608-12" aria-hidden="true" tabindex="-1"></a>- [x] I can!</span> -<span id="cb608-13"><a href="#cb608-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb608-14"><a href="#cb608-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<div class="sourceCode" id="cb659"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb659-1"><a href="#cb659-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb659-2"><a href="#cb659-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[taskLists]{<span class="ex">markdown</span>}</span> +<span id="cb659-3"><a href="#cb659-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb659-4"><a href="#cb659-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb659-5"><a href="#cb659-5" aria-hidden="true" tabindex="-1"></a> untickedBox = No,</span> +<span id="cb659-6"><a href="#cb659-6" aria-hidden="true" tabindex="-1"></a> tickedBox = Yes,</span> +<span id="cb659-7"><a href="#cb659-7" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb659-8"><a href="#cb659-8" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb659-9"><a href="#cb659-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb659-10"><a href="#cb659-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb659-11"><a href="#cb659-11" aria-hidden="true" tabindex="-1"></a>- [ ] you can't.</span> +<span id="cb659-12"><a href="#cb659-12" aria-hidden="true" tabindex="-1"></a>- [x] I can!</span> +<span id="cb659-13"><a href="#cb659-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb659-14"><a href="#cb659-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb609"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb609-1"><a href="#cb609-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb660"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb660-1"><a href="#cb660-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -11201,24 +12314,24 @@ contain the following text:</p> <li>Yes I can!</li> </ul> </blockquote> -<h5 class="unnumbered" id="context-example-55">Con<span +<h5 class="unnumbered" id="context-example-57">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb610"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb610-1"><a href="#cb610-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb610-2"><a href="#cb610-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[taskLists = yes]</span> -<span id="cb610-3"><a href="#cb610-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUntickedBox</span>{No}</span> -<span id="cb610-4"><a href="#cb610-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTickedBox</span>{Yes}</span> -<span id="cb610-5"><a href="#cb610-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb610-6"><a href="#cb610-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb610-7"><a href="#cb610-7" aria-hidden="true" tabindex="-1"></a>- [ ] you can't.</span> -<span id="cb610-8"><a href="#cb610-8" aria-hidden="true" tabindex="-1"></a>- [x] I can!</span> -<span id="cb610-9"><a href="#cb610-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb610-10"><a href="#cb610-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb661"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb661-1"><a href="#cb661-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb661-2"><a href="#cb661-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[taskLists = yes]</span> +<span id="cb661-3"><a href="#cb661-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererUntickedBox</span>{No}</span> +<span id="cb661-4"><a href="#cb661-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTickedBox</span>{Yes}</span> +<span id="cb661-5"><a href="#cb661-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb661-6"><a href="#cb661-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb661-7"><a href="#cb661-7" aria-hidden="true" tabindex="-1"></a>- [ ] you can't.</span> +<span id="cb661-8"><a href="#cb661-8" aria-hidden="true" tabindex="-1"></a>- [x] I can!</span> +<span id="cb661-9"><a href="#cb661-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb661-10"><a href="#cb661-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb611"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb611-1"><a href="#cb611-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb662"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb662-1"><a href="#cb662-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -11227,8 +12340,8 @@ contain the following text:</p> <li>Yes I can!</li> </ul> </blockquote> -<h4 data-number="2.3.1.42" id="yamlmetadatarenderers"><span -class="header-section-number">2.3.1.42</span> YAML Metadata +<h4 data-number="2.3.1.43" id="yamlmetadatarenderers"><span +class="header-section-number">2.3.1.43</span> YAML Metadata Renderers</h4> <p>The <code>\markdownRendererJekyllDataBegin</code> macro represents the beginning of a <abbr>yaml</abbr> document. This macro will only be @@ -11286,88 +12399,88 @@ be produced when the <strong><code>jekyllData</code></strong> option is enabled. The macro receives one argument: the scalar key in the parent structure, cast to a string following <abbr>yaml</abbr> serialization rules.</p> -<h5 class="unnumbered" id="plain-tex-example-42">Plain <span +<h5 class="unnumbered" id="plain-tex-example-46">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb612"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb612-1"><a href="#cb612-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb612-2"><a href="#cb612-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionJekyllData</span>{true}</span> -<span id="cb612-3"><a href="#cb612-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataString</span>#1#2{<span class="fu">\gdef\name</span>{#2}}</span> -<span id="cb612-4"><a href="#cb612-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataNumber</span>#1#2{<span class="fu">\gdef\age</span>{#2}}</span> -<span id="cb612-5"><a href="#cb612-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataEnd</span>{<span class="co">%</span></span> -<span id="cb612-6"><a href="#cb612-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.}</span> -<span id="cb612-7"><a href="#cb612-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb612-8"><a href="#cb612-8" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb612-9"><a href="#cb612-9" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> -<span id="cb612-10"><a href="#cb612-10" aria-hidden="true" tabindex="-1"></a>age: 99</span> -<span id="cb612-11"><a href="#cb612-11" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb612-12"><a href="#cb612-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb612-13"><a href="#cb612-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb663"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb663-1"><a href="#cb663-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb663-2"><a href="#cb663-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionJekyllData</span>{true}</span> +<span id="cb663-3"><a href="#cb663-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataString</span>#1#2{<span class="fu">\gdef\name</span>{#2}}</span> +<span id="cb663-4"><a href="#cb663-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataNumber</span>#1#2{<span class="fu">\gdef\age</span>{#2}}</span> +<span id="cb663-5"><a href="#cb663-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataEnd</span>{<span class="co">%</span></span> +<span id="cb663-6"><a href="#cb663-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.}</span> +<span id="cb663-7"><a href="#cb663-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb663-8"><a href="#cb663-8" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb663-9"><a href="#cb663-9" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> +<span id="cb663-10"><a href="#cb663-10" aria-hidden="true" tabindex="-1"></a>age: 99</span> +<span id="cb663-11"><a href="#cb663-11" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb663-12"><a href="#cb663-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb663-13"><a href="#cb663-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb613"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb613-1"><a href="#cb613-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb664"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb664-1"><a href="#cb664-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Jane Doe is 99 years old.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-93"><span +<h5 class="unnumbered" id="latex-example-99"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb614"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb614-1"><a href="#cb614-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb614-2"><a href="#cb614-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[jekyllData]{<span class="ex">markdown</span>}</span> -<span id="cb614-3"><a href="#cb614-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb614-4"><a href="#cb614-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb614-5"><a href="#cb614-5" aria-hidden="true" tabindex="-1"></a> jekyllDataString = {<span class="fu">\gdef\name</span>{#2}},</span> -<span id="cb614-6"><a href="#cb614-6" aria-hidden="true" tabindex="-1"></a> jekyllDataNumber = {<span class="fu">\gdef\age</span>{#2}},</span> -<span id="cb614-7"><a href="#cb614-7" aria-hidden="true" tabindex="-1"></a> jekyllDataEnd = {<span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.},</span> -<span id="cb614-8"><a href="#cb614-8" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb614-9"><a href="#cb614-9" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb614-10"><a href="#cb614-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb614-11"><a href="#cb614-11" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb614-12"><a href="#cb614-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb614-13"><a href="#cb614-13" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb614-14"><a href="#cb614-14" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> -<span id="cb614-15"><a href="#cb614-15" aria-hidden="true" tabindex="-1"></a>age: 99</span> -<span id="cb614-16"><a href="#cb614-16" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb614-17"><a href="#cb614-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb614-18"><a href="#cb614-18" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb614-19"><a href="#cb614-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb615"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb615-1"><a href="#cb615-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb665"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb665-1"><a href="#cb665-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb665-2"><a href="#cb665-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[jekyllData]{<span class="ex">markdown</span>}</span> +<span id="cb665-3"><a href="#cb665-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb665-4"><a href="#cb665-4" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb665-5"><a href="#cb665-5" aria-hidden="true" tabindex="-1"></a> jekyllDataString = {<span class="fu">\gdef\name</span>{#2}},</span> +<span id="cb665-6"><a href="#cb665-6" aria-hidden="true" tabindex="-1"></a> jekyllDataNumber = {<span class="fu">\gdef\age</span>{#2}},</span> +<span id="cb665-7"><a href="#cb665-7" aria-hidden="true" tabindex="-1"></a> jekyllDataEnd = {<span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.},</span> +<span id="cb665-8"><a href="#cb665-8" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb665-9"><a href="#cb665-9" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb665-10"><a href="#cb665-10" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb665-11"><a href="#cb665-11" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb665-12"><a href="#cb665-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb665-13"><a href="#cb665-13" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb665-14"><a href="#cb665-14" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> +<span id="cb665-15"><a href="#cb665-15" aria-hidden="true" tabindex="-1"></a>age: 99</span> +<span id="cb665-16"><a href="#cb665-16" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb665-17"><a href="#cb665-17" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb665-18"><a href="#cb665-18" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb665-19"><a href="#cb665-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb666"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb666-1"><a href="#cb666-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Jane Doe is 99 years old.</p> </blockquote> -<h5 class="unnumbered" id="context-example-56">Con<span +<h5 class="unnumbered" id="context-example-58">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb616"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb616-1"><a href="#cb616-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb616-2"><a href="#cb616-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[jekyllData = yes]</span> -<span id="cb616-3"><a href="#cb616-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataString</span>#1#2{<span class="fu">\gdef\name</span>{#2}}</span> -<span id="cb616-4"><a href="#cb616-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataNumber</span>#1#2{<span class="fu">\gdef\age</span>{#2}}</span> -<span id="cb616-5"><a href="#cb616-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataEnd</span>{<span class="co">%</span></span> -<span id="cb616-6"><a href="#cb616-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.}</span> -<span id="cb616-7"><a href="#cb616-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb616-8"><a href="#cb616-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb616-9"><a href="#cb616-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb616-10"><a href="#cb616-10" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb616-11"><a href="#cb616-11" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> -<span id="cb616-12"><a href="#cb616-12" aria-hidden="true" tabindex="-1"></a>age: 99</span> -<span id="cb616-13"><a href="#cb616-13" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb616-14"><a href="#cb616-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb616-15"><a href="#cb616-15" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb616-16"><a href="#cb616-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb667"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb667-1"><a href="#cb667-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb667-2"><a href="#cb667-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[jekyllData = yes]</span> +<span id="cb667-3"><a href="#cb667-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataString</span>#1#2{<span class="fu">\gdef\name</span>{#2}}</span> +<span id="cb667-4"><a href="#cb667-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataNumber</span>#1#2{<span class="fu">\gdef\age</span>{#2}}</span> +<span id="cb667-5"><a href="#cb667-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataEnd</span>{<span class="co">%</span></span> +<span id="cb667-6"><a href="#cb667-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.}</span> +<span id="cb667-7"><a href="#cb667-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb667-8"><a href="#cb667-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb667-9"><a href="#cb667-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb667-10"><a href="#cb667-10" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb667-11"><a href="#cb667-11" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> +<span id="cb667-12"><a href="#cb667-12" aria-hidden="true" tabindex="-1"></a>age: 99</span> +<span id="cb667-13"><a href="#cb667-13" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb667-14"><a href="#cb667-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb667-15"><a href="#cb667-15" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb667-16"><a href="#cb667-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb617"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb617-1"><a href="#cb617-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb668"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb668-1"><a href="#cb668-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -11379,93 +12492,93 @@ Prototypes</h3> <p>By default, token renderers point to package-defined <span class="tex">T<sub>e</sub>X</span> macros, further referred to as <em>prototypes</em>, which provide useful default definitions.</p> -<h5 class="unnumbered" id="plain-tex-example-43">Plain <span +<h5 class="unnumbered" id="plain-tex-example-47">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb618"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb618-1"><a href="#cb618-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb618-2"><a href="#cb618-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTildePrototype</span>{<span class="co">%</span></span> -<span id="cb618-3"><a href="#cb618-3" aria-hidden="true" tabindex="-1"></a> Packages can specify token renderer prototypes.<span class="co">%</span></span> -<span id="cb618-4"><a href="#cb618-4" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb618-5"><a href="#cb618-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb618-6"><a href="#cb618-6" aria-hidden="true" tabindex="-1"></a>~</span> -<span id="cb618-7"><a href="#cb618-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb618-8"><a href="#cb618-8" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb618-9"><a href="#cb618-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTilde</span>{<span class="co">%</span></span> -<span id="cb618-10"><a href="#cb618-10" aria-hidden="true" tabindex="-1"></a> User-defined token renderers take precedence.<span class="co">%</span></span> -<span id="cb618-11"><a href="#cb618-11" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb618-12"><a href="#cb618-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb618-13"><a href="#cb618-13" aria-hidden="true" tabindex="-1"></a>~</span> -<span id="cb618-14"><a href="#cb618-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb618-15"><a href="#cb618-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<div class="sourceCode" id="cb669"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb669-1"><a href="#cb669-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb669-2"><a href="#cb669-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTildePrototype</span>{<span class="co">%</span></span> +<span id="cb669-3"><a href="#cb669-3" aria-hidden="true" tabindex="-1"></a> Packages can specify token renderer prototypes.<span class="co">%</span></span> +<span id="cb669-4"><a href="#cb669-4" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb669-5"><a href="#cb669-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb669-6"><a href="#cb669-6" aria-hidden="true" tabindex="-1"></a>~</span> +<span id="cb669-7"><a href="#cb669-7" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb669-8"><a href="#cb669-8" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb669-9"><a href="#cb669-9" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTilde</span>{<span class="co">%</span></span> +<span id="cb669-10"><a href="#cb669-10" aria-hidden="true" tabindex="-1"></a> User-defined token renderers take precedence.<span class="co">%</span></span> +<span id="cb669-11"><a href="#cb669-11" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb669-12"><a href="#cb669-12" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb669-13"><a href="#cb669-13" aria-hidden="true" tabindex="-1"></a>~</span> +<span id="cb669-14"><a href="#cb669-14" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb669-15"><a href="#cb669-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb619"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb619-1"><a href="#cb619-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb670"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb670-1"><a href="#cb670-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Packages can specify token renderer prototypes.</p> <p>User-defined token renderers take precedence.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-94"><span +<h5 class="unnumbered" id="latex-example-100"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb620"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb620-1"><a href="#cb620-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb620-2"><a href="#cb620-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> -<span id="cb620-3"><a href="#cb620-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb620-4"><a href="#cb620-4" aria-hidden="true" tabindex="-1"></a> rendererPrototypes = {</span> -<span id="cb620-5"><a href="#cb620-5" aria-hidden="true" tabindex="-1"></a> tilde = {Packages can specify token renderer prototypes.},</span> -<span id="cb620-6"><a href="#cb620-6" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb620-7"><a href="#cb620-7" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb620-8"><a href="#cb620-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb620-9"><a href="#cb620-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb620-10"><a href="#cb620-10" aria-hidden="true" tabindex="-1"></a>~</span> -<span id="cb620-11"><a href="#cb620-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb620-12"><a href="#cb620-12" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb620-13"><a href="#cb620-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown*</span>}{</span> -<span id="cb620-14"><a href="#cb620-14" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb620-15"><a href="#cb620-15" aria-hidden="true" tabindex="-1"></a> tilde = {User-defined token renderers take precedence.},</span> -<span id="cb620-16"><a href="#cb620-16" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb620-17"><a href="#cb620-17" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb620-18"><a href="#cb620-18" aria-hidden="true" tabindex="-1"></a>~</span> -<span id="cb620-19"><a href="#cb620-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown*</span>}</span> -<span id="cb620-20"><a href="#cb620-20" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb621"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb621-1"><a href="#cb621-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb671"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb671-1"><a href="#cb671-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb671-2"><a href="#cb671-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>{<span class="ex">markdown</span>}</span> +<span id="cb671-3"><a href="#cb671-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb671-4"><a href="#cb671-4" aria-hidden="true" tabindex="-1"></a> rendererPrototypes = {</span> +<span id="cb671-5"><a href="#cb671-5" aria-hidden="true" tabindex="-1"></a> tilde = {Packages can specify token renderer prototypes.},</span> +<span id="cb671-6"><a href="#cb671-6" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb671-7"><a href="#cb671-7" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb671-8"><a href="#cb671-8" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb671-9"><a href="#cb671-9" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb671-10"><a href="#cb671-10" aria-hidden="true" tabindex="-1"></a>~</span> +<span id="cb671-11"><a href="#cb671-11" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb671-12"><a href="#cb671-12" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb671-13"><a href="#cb671-13" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}[</span> +<span id="cb671-14"><a href="#cb671-14" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb671-15"><a href="#cb671-15" aria-hidden="true" tabindex="-1"></a> tilde = {User-defined token renderers take precedence.},</span> +<span id="cb671-16"><a href="#cb671-16" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb671-17"><a href="#cb671-17" aria-hidden="true" tabindex="-1"></a>]</span> +<span id="cb671-18"><a href="#cb671-18" aria-hidden="true" tabindex="-1"></a>~</span> +<span id="cb671-19"><a href="#cb671-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb671-20"><a href="#cb671-20" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb672"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb672-1"><a href="#cb672-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Packages can specify token renderer prototypes.</p> <p>User-defined token renderers take precedence.</p> </blockquote> -<h5 class="unnumbered" id="context-example-57">Con<span +<h5 class="unnumbered" id="context-example-59">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb622"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb622-1"><a href="#cb622-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb622-2"><a href="#cb622-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTildePrototype</span>{<span class="co">%</span></span> -<span id="cb622-3"><a href="#cb622-3" aria-hidden="true" tabindex="-1"></a> Packages can specify token renderer prototypes.<span class="co">%</span></span> -<span id="cb622-4"><a href="#cb622-4" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb622-5"><a href="#cb622-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb622-6"><a href="#cb622-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb622-7"><a href="#cb622-7" aria-hidden="true" tabindex="-1"></a>~</span> -<span id="cb622-8"><a href="#cb622-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb622-9"><a href="#cb622-9" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb622-10"><a href="#cb622-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTilde</span>{<span class="co">%</span></span> -<span id="cb622-11"><a href="#cb622-11" aria-hidden="true" tabindex="-1"></a> User-defined token renderers take precedence.<span class="co">%</span></span> -<span id="cb622-12"><a href="#cb622-12" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb622-13"><a href="#cb622-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb622-14"><a href="#cb622-14" aria-hidden="true" tabindex="-1"></a>~</span> -<span id="cb622-15"><a href="#cb622-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb622-16"><a href="#cb622-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<div class="sourceCode" id="cb673"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb673-1"><a href="#cb673-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb673-2"><a href="#cb673-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTildePrototype</span>{<span class="co">%</span></span> +<span id="cb673-3"><a href="#cb673-3" aria-hidden="true" tabindex="-1"></a> Packages can specify token renderer prototypes.<span class="co">%</span></span> +<span id="cb673-4"><a href="#cb673-4" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb673-5"><a href="#cb673-5" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb673-6"><a href="#cb673-6" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb673-7"><a href="#cb673-7" aria-hidden="true" tabindex="-1"></a>~</span> +<span id="cb673-8"><a href="#cb673-8" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb673-9"><a href="#cb673-9" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb673-10"><a href="#cb673-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererTilde</span>{<span class="co">%</span></span> +<span id="cb673-11"><a href="#cb673-11" aria-hidden="true" tabindex="-1"></a> User-defined token renderers take precedence.<span class="co">%</span></span> +<span id="cb673-12"><a href="#cb673-12" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb673-13"><a href="#cb673-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb673-14"><a href="#cb673-14" aria-hidden="true" tabindex="-1"></a>~</span> +<span id="cb673-15"><a href="#cb673-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb673-16"><a href="#cb673-16" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> <p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb623"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb623-1"><a href="#cb623-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb674"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb674-1"><a href="#cb674-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> @@ -11479,142 +12592,140 @@ Prototypes</h4> high-level interface that can be programmed using the <code>markdown/jekyllData</code> key–values from the l3keys module of the <span class="latex">L<sup>a</sup>T<sub>e</sub>X</span>3 kernel.</p> -<h5 class="unnumbered" id="plain-tex-example-44">Plain <span +<h5 class="unnumbered" id="plain-tex-example-48">Plain <span class="tex">T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb624"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb624-1"><a href="#cb624-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> -<span id="cb624-2"><a href="#cb624-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionJekyllData</span>{true}</span> -<span id="cb624-3"><a href="#cb624-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> -<span id="cb624-4"><a href="#cb624-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\keys</span>_define:nn</span> -<span id="cb624-5"><a href="#cb624-5" aria-hidden="true" tabindex="-1"></a> { markdown/jekyllData }</span> -<span id="cb624-6"><a href="#cb624-6" aria-hidden="true" tabindex="-1"></a> {</span> -<span id="cb624-7"><a href="#cb624-7" aria-hidden="true" tabindex="-1"></a> name .code:n = { <span class="fu">\gdef\name</span>{#1} },</span> -<span id="cb624-8"><a href="#cb624-8" aria-hidden="true" tabindex="-1"></a> age .code:n = { <span class="fu">\gdef\age</span>{#1} },</span> -<span id="cb624-9"><a href="#cb624-9" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb624-10"><a href="#cb624-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> -<span id="cb624-11"><a href="#cb624-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataEnd</span>{<span class="co">%</span></span> -<span id="cb624-12"><a href="#cb624-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.}</span> -<span id="cb624-13"><a href="#cb624-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> -<span id="cb624-14"><a href="#cb624-14" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb624-15"><a href="#cb624-15" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> -<span id="cb624-16"><a href="#cb624-16" aria-hidden="true" tabindex="-1"></a>age: 99</span> -<span id="cb624-17"><a href="#cb624-17" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb624-18"><a href="#cb624-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> -<span id="cb624-19"><a href="#cb624-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb625"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb625-1"><a href="#cb625-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb675"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb675-1"><a href="#cb675-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\input</span> markdown</span> +<span id="cb675-2"><a href="#cb675-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownOptionJekyllData</span>{true}</span> +<span id="cb675-3"><a href="#cb675-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> +<span id="cb675-4"><a href="#cb675-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\keys</span>_define:nn</span> +<span id="cb675-5"><a href="#cb675-5" aria-hidden="true" tabindex="-1"></a> { markdown/jekyllData }</span> +<span id="cb675-6"><a href="#cb675-6" aria-hidden="true" tabindex="-1"></a> {</span> +<span id="cb675-7"><a href="#cb675-7" aria-hidden="true" tabindex="-1"></a> name .code:n = { <span class="fu">\gdef\name</span>{#1} },</span> +<span id="cb675-8"><a href="#cb675-8" aria-hidden="true" tabindex="-1"></a> age .code:n = { <span class="fu">\gdef\age</span>{#1} },</span> +<span id="cb675-9"><a href="#cb675-9" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb675-10"><a href="#cb675-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> +<span id="cb675-11"><a href="#cb675-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataEnd</span>{<span class="co">%</span></span> +<span id="cb675-12"><a href="#cb675-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.}</span> +<span id="cb675-13"><a href="#cb675-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownBegin</span></span> +<span id="cb675-14"><a href="#cb675-14" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb675-15"><a href="#cb675-15" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> +<span id="cb675-16"><a href="#cb675-16" aria-hidden="true" tabindex="-1"></a>age: 99</span> +<span id="cb675-17"><a href="#cb675-17" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb675-18"><a href="#cb675-18" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownEnd</span></span> +<span id="cb675-19"><a href="#cb675-19" aria-hidden="true" tabindex="-1"></a><span class="fu">\bye</span></span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb676"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb676-1"><a href="#cb676-1" aria-hidden="true" tabindex="-1"></a><span class="ex">luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Jane Doe is 99 years old.</p> </blockquote> -<h5 class="unnumbered" id="latex-example-95"><span +<h5 class="unnumbered" id="latex-example-101"><span class="latex">L<sup>a</sup>T<sub>e</sub>X</span> Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb626"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb626-1"><a href="#cb626-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> -<span id="cb626-2"><a href="#cb626-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[jekyllData]{<span class="ex">markdown</span>}</span> -<span id="cb626-3"><a href="#cb626-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> -<span id="cb626-4"><a href="#cb626-4" aria-hidden="true" tabindex="-1"></a> jekyllDataRenderers = {</span> -<span id="cb626-5"><a href="#cb626-5" aria-hidden="true" tabindex="-1"></a> name = {<span class="fu">\gdef\name</span>{#1}},</span> -<span id="cb626-6"><a href="#cb626-6" aria-hidden="true" tabindex="-1"></a> code = {<span class="fu">\gdef\age</span>{#1}},</span> -<span id="cb626-7"><a href="#cb626-7" aria-hidden="true" tabindex="-1"></a> },</span> -<span id="cb626-8"><a href="#cb626-8" aria-hidden="true" tabindex="-1"></a> renderers = {</span> -<span id="cb626-9"><a href="#cb626-9" aria-hidden="true" tabindex="-1"></a> jekyllDataEnd = {<span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.},</span> -<span id="cb626-10"><a href="#cb626-10" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb626-11"><a href="#cb626-11" aria-hidden="true" tabindex="-1"></a>}</span> -<span id="cb626-12"><a href="#cb626-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> -<span id="cb626-13"><a href="#cb626-13" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb626-14"><a href="#cb626-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> -<span id="cb626-15"><a href="#cb626-15" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb626-16"><a href="#cb626-16" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> -<span id="cb626-17"><a href="#cb626-17" aria-hidden="true" tabindex="-1"></a>age: 99</span> -<span id="cb626-18"><a href="#cb626-18" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb626-19"><a href="#cb626-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> -<span id="cb626-20"><a href="#cb626-20" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb626-21"><a href="#cb626-21" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb627"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb627-1"><a href="#cb627-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb677"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb677-1"><a href="#cb677-1" aria-hidden="true" tabindex="-1"></a><span class="bu">\documentclass</span>{<span class="ex">article</span>}</span> +<span id="cb677-2"><a href="#cb677-2" aria-hidden="true" tabindex="-1"></a><span class="bu">\usepackage</span>[jekyllData]{<span class="ex">markdown</span>}</span> +<span id="cb677-3"><a href="#cb677-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\markdownSetup</span>{</span> +<span id="cb677-4"><a href="#cb677-4" aria-hidden="true" tabindex="-1"></a> jekyllDataRenderers = {</span> +<span id="cb677-5"><a href="#cb677-5" aria-hidden="true" tabindex="-1"></a> name = {<span class="fu">\gdef\name</span>{#1}},</span> +<span id="cb677-6"><a href="#cb677-6" aria-hidden="true" tabindex="-1"></a> code = {<span class="fu">\gdef\age</span>{#1}},</span> +<span id="cb677-7"><a href="#cb677-7" aria-hidden="true" tabindex="-1"></a> },</span> +<span id="cb677-8"><a href="#cb677-8" aria-hidden="true" tabindex="-1"></a> renderers = {</span> +<span id="cb677-9"><a href="#cb677-9" aria-hidden="true" tabindex="-1"></a> jekyllDataEnd = {<span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.},</span> +<span id="cb677-10"><a href="#cb677-10" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb677-11"><a href="#cb677-11" aria-hidden="true" tabindex="-1"></a>}</span> +<span id="cb677-12"><a href="#cb677-12" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">document</span>}</span> +<span id="cb677-13"><a href="#cb677-13" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb677-14"><a href="#cb677-14" aria-hidden="true" tabindex="-1"></a><span class="kw">\begin</span>{<span class="ex">markdown</span>}</span> +<span id="cb677-15"><a href="#cb677-15" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb677-16"><a href="#cb677-16" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> +<span id="cb677-17"><a href="#cb677-17" aria-hidden="true" tabindex="-1"></a>age: 99</span> +<span id="cb677-18"><a href="#cb677-18" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb677-19"><a href="#cb677-19" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">markdown</span>}</span> +<span id="cb677-20"><a href="#cb677-20" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb677-21"><a href="#cb677-21" aria-hidden="true" tabindex="-1"></a><span class="kw">\end</span>{<span class="ex">document</span>}</span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb678"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb678-1"><a href="#cb678-1" aria-hidden="true" tabindex="-1"></a><span class="ex">lualatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Jane Doe is 99 years old.</p> </blockquote> -<h5 class="unnumbered" id="context-example-58">Con<span +<h5 class="unnumbered" id="context-example-60">Con<span class="tex">T<sub>e</sub>X</span>t Example</h5> <p>Using a text editor, create a text document named <code>document.tex</code> with the following content:</p> -<div class="sourceCode" id="cb628"><pre -class="sourceCode tex"><code class="sourceCode latex"><span id="cb628-1"><a href="#cb628-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> -<span id="cb628-2"><a href="#cb628-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[jekyllData = yes]</span> -<span id="cb628-3"><a href="#cb628-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> -<span id="cb628-4"><a href="#cb628-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\keys</span>_define:nn</span> -<span id="cb628-5"><a href="#cb628-5" aria-hidden="true" tabindex="-1"></a> { markdown/jekyllData }</span> -<span id="cb628-6"><a href="#cb628-6" aria-hidden="true" tabindex="-1"></a> {</span> -<span id="cb628-7"><a href="#cb628-7" aria-hidden="true" tabindex="-1"></a> name .code:n = { <span class="fu">\gdef\name</span>{#1} },</span> -<span id="cb628-8"><a href="#cb628-8" aria-hidden="true" tabindex="-1"></a> age .code:n = { <span class="fu">\gdef\age</span>{#1} },</span> -<span id="cb628-9"><a href="#cb628-9" aria-hidden="true" tabindex="-1"></a> }</span> -<span id="cb628-10"><a href="#cb628-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> -<span id="cb628-11"><a href="#cb628-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataEnd</span>{<span class="co">%</span></span> -<span id="cb628-12"><a href="#cb628-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.}</span> -<span id="cb628-13"><a href="#cb628-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> -<span id="cb628-14"><a href="#cb628-14" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb628-15"><a href="#cb628-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> -<span id="cb628-16"><a href="#cb628-16" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb628-17"><a href="#cb628-17" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> -<span id="cb628-18"><a href="#cb628-18" aria-hidden="true" tabindex="-1"></a>age: 99</span> -<span id="cb628-19"><a href="#cb628-19" aria-hidden="true" tabindex="-1"></a>---</span> -<span id="cb628-20"><a href="#cb628-20" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> -<span id="cb628-21"><a href="#cb628-21" aria-hidden="true" tabindex="-1"></a></span> -<span id="cb628-22"><a href="#cb628-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> -<p>Next, invoke LuaTeX from the terminal:</p> -<div class="sourceCode" id="cb629"><pre -class="sourceCode sh"><code class="sourceCode bash"><span id="cb629-1"><a href="#cb629-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> document.tex</span></code></pre></div> +<div class="sourceCode" id="cb679"><pre +class="sourceCode tex"><code class="sourceCode latex"><span id="cb679-1"><a href="#cb679-1" aria-hidden="true" tabindex="-1"></a><span class="fu">\usemodule</span>[t][markdown]</span> +<span id="cb679-2"><a href="#cb679-2" aria-hidden="true" tabindex="-1"></a><span class="fu">\setupmarkdown</span>[jekyllData = yes]</span> +<span id="cb679-3"><a href="#cb679-3" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOn</span></span> +<span id="cb679-4"><a href="#cb679-4" aria-hidden="true" tabindex="-1"></a><span class="fu">\keys</span>_define:nn</span> +<span id="cb679-5"><a href="#cb679-5" aria-hidden="true" tabindex="-1"></a> { markdown/jekyllData }</span> +<span id="cb679-6"><a href="#cb679-6" aria-hidden="true" tabindex="-1"></a> {</span> +<span id="cb679-7"><a href="#cb679-7" aria-hidden="true" tabindex="-1"></a> name .code:n = { <span class="fu">\gdef\name</span>{#1} },</span> +<span id="cb679-8"><a href="#cb679-8" aria-hidden="true" tabindex="-1"></a> age .code:n = { <span class="fu">\gdef\age</span>{#1} },</span> +<span id="cb679-9"><a href="#cb679-9" aria-hidden="true" tabindex="-1"></a> }</span> +<span id="cb679-10"><a href="#cb679-10" aria-hidden="true" tabindex="-1"></a><span class="fu">\ExplSyntaxOff</span></span> +<span id="cb679-11"><a href="#cb679-11" aria-hidden="true" tabindex="-1"></a><span class="fu">\def\markdownRendererJekyllDataEnd</span>{<span class="co">%</span></span> +<span id="cb679-12"><a href="#cb679-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">\name</span>{} is <span class="fu">\age</span>{} years old.}</span> +<span id="cb679-13"><a href="#cb679-13" aria-hidden="true" tabindex="-1"></a><span class="fu">\starttext</span></span> +<span id="cb679-14"><a href="#cb679-14" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb679-15"><a href="#cb679-15" aria-hidden="true" tabindex="-1"></a><span class="fu">\startmarkdown</span></span> +<span id="cb679-16"><a href="#cb679-16" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb679-17"><a href="#cb679-17" aria-hidden="true" tabindex="-1"></a>name: Jane Doe</span> +<span id="cb679-18"><a href="#cb679-18" aria-hidden="true" tabindex="-1"></a>age: 99</span> +<span id="cb679-19"><a href="#cb679-19" aria-hidden="true" tabindex="-1"></a>---</span> +<span id="cb679-20"><a href="#cb679-20" aria-hidden="true" tabindex="-1"></a><span class="fu">\stopmarkdown</span></span> +<span id="cb679-21"><a href="#cb679-21" aria-hidden="true" tabindex="-1"></a></span> +<span id="cb679-22"><a href="#cb679-22" aria-hidden="true" tabindex="-1"></a><span class="fu">\stoptext</span></span></code></pre></div> +<p>Next, invoke LuaTeX from the terminal:</p> +<div class="sourceCode" id="cb680"><pre +class="sourceCode sh"><code class="sourceCode bash"><span id="cb680-1"><a href="#cb680-1" aria-hidden="true" tabindex="-1"></a><span class="ex">context</span> <span class="at">--luatex</span> document.tex</span></code></pre></div> <p>A PDF document named <code>document.pdf</code> should be produced and contain the following text:</p> <blockquote> <p>Jane Doe is 99 years old.</p> </blockquote> -<section class="footnotes footnotes-end-of-document" +<aside id="footnotes" class="footnotes footnotes-end-of-document" role="doc-endnotes"> <hr /> <ol> -<li id="fn1" role="doc-endnote"><p>Inlines notes are easier to write, -since you don’t have to pick an identifier and move down to type the -note.<a href="#fnref1" class="footnote-back" -role="doc-backlink">↩︎</a></p></li> -<li id="fn2" role="doc-endnote"><p>Inlines notes are easier to write, -since you don’t have to pick an identifier and move down to type the -note.<a href="#fnref2" class="footnote-back" -role="doc-backlink">↩︎</a></p></li> -<li id="fn3" role="doc-endnote"><p>Here is the note.<a href="#fnref3" +<li id="fn1"><p>Inlines notes are easier to write, since you don’t have +to pick an identifier and move down to type the note.<a href="#fnref1" class="footnote-back" role="doc-backlink">↩︎</a></p></li> -<li id="fn4" role="doc-endnote"><p>Here’s one with multiple blocks.</p> +<li id="fn2"><p>Inlines notes are easier to write, since you don’t have +to pick an identifier and move down to type the note.<a href="#fnref2" +class="footnote-back" role="doc-backlink">↩︎</a></p></li> +<li id="fn3"><p>Here is the note.<a href="#fnref3" class="footnote-back" +role="doc-backlink">↩︎</a></p></li> +<li id="fn4"><p>Here’s one with multiple blocks.</p> <p>Subsequent paragraphs are indented to show that they belong to the previous note.</p> <pre><code>{ some.code }</code></pre> <p>The whole paragraph can be indented, or just the first line. In this way, multi-paragraph notes work like multi-paragraph list items.<a href="#fnref4" class="footnote-back" role="doc-backlink">↩︎</a></p></li> -<li id="fn5" role="doc-endnote"><p>Here is the note.<a href="#fnref5" -class="footnote-back" role="doc-backlink">↩︎</a></p></li> -<li id="fn6" role="doc-endnote"><p>Here’s one with multiple blocks.</p> +<li id="fn5"><p>Here is the note.<a href="#fnref5" class="footnote-back" +role="doc-backlink">↩︎</a></p></li> +<li id="fn6"><p>Here’s one with multiple blocks.</p> <p>Subsequent paragraphs are indented to show that they belong to the previous note.</p> <pre><code>{ some.code }</code></pre> <p>The whole paragraph can be indented, or just the first line. In this way, multi-paragraph notes work like multi-paragraph list items.<a href="#fnref6" class="footnote-back" role="doc-backlink">↩︎</a></p></li> -<li id="fn7" role="doc-endnote"><p>Filenames other than +<li id="fn7"><p>Filenames other than <code>markdown-languages.json</code> may be specified using the <code>contentBlocksLanguageMap</code> Lua option.<a href="#fnref7" class="footnote-back" role="doc-backlink">↩︎</a></p></li> </ol> -</section> +</aside> </body> </html> diff --git a/Master/texmf-dist/doc/generic/markdown/markdown.pdf b/Master/texmf-dist/doc/generic/markdown/markdown.pdf Binary files differindex 4b99308976f..a5d91a23272 100644 --- a/Master/texmf-dist/doc/generic/markdown/markdown.pdf +++ b/Master/texmf-dist/doc/generic/markdown/markdown.pdf diff --git a/Master/texmf-dist/doc/latex/markdown/examples/example.md b/Master/texmf-dist/doc/latex/markdown/examples/example.md index 8819ef5b672..5e5457088ed 100644 --- a/Master/texmf-dist/doc/latex/markdown/examples/example.md +++ b/Master/texmf-dist/doc/latex/markdown/examples/example.md @@ -41,9 +41,7 @@ This is a table: This is a bullet list: -* The first item of a bullet list - - that spans several paragraphs, +* The first item of a bullet list, * the second item of a bullet list, @@ -57,9 +55,7 @@ This is a compact bullet list: This is an ordered list: -5. The first item of an ordered list - - that spans several paragraphs, +5. The first item of an ordered list, 6. the second item of an ordered list, @@ -67,9 +63,7 @@ This is an ordered list: This is a fancy ordered list: -e) The first item of an ordered list - - that spans several paragraphs, +e) The first item of an ordered list, f) the second item of an ordered list, @@ -77,9 +71,7 @@ g) the third item of an ordered list. This is an ordered list using hash enumerators: -#. The first item of an ordered list - - that spans several paragraphs, +#. The first item of an ordered list, #. the second item of an ordered list, diff --git a/Master/texmf-dist/doc/latex/markdown/examples/latex-luatex.tex b/Master/texmf-dist/doc/latex/markdown/examples/latex-luatex.tex index 18b16bf7769..9b2e6234080 100644 --- a/Master/texmf-dist/doc/latex/markdown/examples/latex-luatex.tex +++ b/Master/texmf-dist/doc/latex/markdown/examples/latex-luatex.tex @@ -1,5 +1,15 @@ \documentclass{book} \usepackage{polyglossia} +% work around a bug in polyglossia +\makeatletter +\ExplSyntaxOn +\pretocmd\xpg@set@alias@values{% + \prop_if_exist:cF { xpg@alias@keyvals@#1@#4 } + { \prop_new:c {xpg@alias@keyvals@#1@#4} } +}{}{} +\ExplSyntaxOff +\makeatother +% end of workaround \setmainlanguage{english} \usepackage{fontspec} \usepackage{booktabs} @@ -28,13 +38,13 @@ texMathSingleBackslash, ]{markdown} % Set the document metadata using a YAML metadata block. -\begin{markdown*}{hybrid} +\begin{markdown}[hybrid] --- title: An Example *Markdown* Document -author: Vít Novotný +author: Vít Starý Novotný date: \today --- -\end{markdown*} +\end{markdown} \begin{document} % Typeset the document `example.md` by letting the Markdown package handle % the conversion internally. diff --git a/Master/texmf-dist/doc/latex/markdown/examples/latex-pdftex.tex b/Master/texmf-dist/doc/latex/markdown/examples/latex-pdftex.tex index db6cbea8c80..7d188d75f25 100644 --- a/Master/texmf-dist/doc/latex/markdown/examples/latex-pdftex.tex +++ b/Master/texmf-dist/doc/latex/markdown/examples/latex-pdftex.tex @@ -29,13 +29,13 @@ texMathSingleBackslash, ]{markdown} % Set the document metadata using a YAML metadata block. -\begin{markdown*}{hybrid} +\begin{markdown}[hybrid] --- title: An Example *Markdown* Document -author: Vít Novotný +author: Vít Starý Novotný date: \today --- -\end{markdown*} +\end{markdown} \begin{document} % Typeset the document `example.md` by letting the Markdown package handle % the conversion internally. @@ -55,7 +55,7 @@ date: \today Here are some non-ASCII characters: *ěščřžýáíé*. \end{markdown} -\begin{markdown*}{html, hybrid} +\begin{markdown}[hybrid] Here is some <b>HTML code</b> mixed *with Markdown*. In \TeX, the HTML code will be silently ignored, whereas in \TeX 4ht, the HTML code will be passed through to the output: @@ -72,5 +72,5 @@ through to the output: <td>10</td> </tr> </table> -\end{markdown*} +\end{markdown} \end{document} diff --git a/Master/texmf-dist/doc/latex/markdown/examples/latex-tex4ht.tex b/Master/texmf-dist/doc/latex/markdown/examples/latex-tex4ht.tex index db6cbea8c80..7d188d75f25 100644 --- a/Master/texmf-dist/doc/latex/markdown/examples/latex-tex4ht.tex +++ b/Master/texmf-dist/doc/latex/markdown/examples/latex-tex4ht.tex @@ -29,13 +29,13 @@ texMathSingleBackslash, ]{markdown} % Set the document metadata using a YAML metadata block. -\begin{markdown*}{hybrid} +\begin{markdown}[hybrid] --- title: An Example *Markdown* Document -author: Vít Novotný +author: Vít Starý Novotný date: \today --- -\end{markdown*} +\end{markdown} \begin{document} % Typeset the document `example.md` by letting the Markdown package handle % the conversion internally. @@ -55,7 +55,7 @@ date: \today Here are some non-ASCII characters: *ěščřžýáíé*. \end{markdown} -\begin{markdown*}{html, hybrid} +\begin{markdown}[hybrid] Here is some <b>HTML code</b> mixed *with Markdown*. In \TeX, the HTML code will be silently ignored, whereas in \TeX 4ht, the HTML code will be passed through to the output: @@ -72,5 +72,5 @@ through to the output: <td>10</td> </tr> </table> -\end{markdown*} +\end{markdown} \end{document} diff --git a/Master/texmf-dist/doc/latex/markdown/examples/latex-xetex.tex b/Master/texmf-dist/doc/latex/markdown/examples/latex-xetex.tex index 18b16bf7769..9b2e6234080 100644 --- a/Master/texmf-dist/doc/latex/markdown/examples/latex-xetex.tex +++ b/Master/texmf-dist/doc/latex/markdown/examples/latex-xetex.tex @@ -1,5 +1,15 @@ \documentclass{book} \usepackage{polyglossia} +% work around a bug in polyglossia +\makeatletter +\ExplSyntaxOn +\pretocmd\xpg@set@alias@values{% + \prop_if_exist:cF { xpg@alias@keyvals@#1@#4 } + { \prop_new:c {xpg@alias@keyvals@#1@#4} } +}{}{} +\ExplSyntaxOff +\makeatother +% end of workaround \setmainlanguage{english} \usepackage{fontspec} \usepackage{booktabs} @@ -28,13 +38,13 @@ texMathSingleBackslash, ]{markdown} % Set the document metadata using a YAML metadata block. -\begin{markdown*}{hybrid} +\begin{markdown}[hybrid] --- title: An Example *Markdown* Document -author: Vít Novotný +author: Vít Starý Novotný date: \today --- -\end{markdown*} +\end{markdown} \begin{document} % Typeset the document `example.md` by letting the Markdown package handle % the conversion internally. diff --git a/Master/texmf-dist/doc/optex/markdown/examples/example.md b/Master/texmf-dist/doc/optex/markdown/examples/example.md new file mode 100644 index 00000000000..5e5457088ed --- /dev/null +++ b/Master/texmf-dist/doc/optex/markdown/examples/example.md @@ -0,0 +1,189 @@ +# This is an H1 + +## This is an H2 + +### This is an H3 + +#### This is an H4 + +##### This is an H5 + +###### This is an H6 + +This is a text paragraph containing an ellipsis ... and followed by a thematic break. + +*** + +This is inline `code`. This is a [link](http://google.cz "Google"). _This is an *emphasized* span of text_. __This is a **strongly emphasized** span of text__. + + ![example image](example-image.png "An example image from Martin Scharrer's mwe package") + + /scientists.csv (The great minds of the 19th century rendered via a content block) + +This is a fenced code block: + +``` latex +\documentclass{article} +\begin{document} + Hello world! +\end{document} +``` + +This is a table: + +| Right | Left | Default | Center | +|------:|:-----|---------|:------:| +| 12 | 12 | 12 | 12 | +| 123 | 123 | 123 | 123 | +| 1 | 1 | 1 | 1 | + + : Demonstration of pipe table syntax. + +This is a bullet list: + +* The first item of a bullet list, + +* the second item of a bullet list, + +* the third item of a bullet list. + +This is a compact bullet list: + +* The first item of a bullet list, +* the second item of a bullet list, +* the third item of a bullet list. + +This is an ordered list: + +5. The first item of an ordered list, + +6. the second item of an ordered list, + +7. the third item of an ordered list. + +This is a fancy ordered list: + +e) The first item of an ordered list, + +f) the second item of an ordered list, + +g) the third item of an ordered list. + +This is an ordered list using hash enumerators: + +#. The first item of an ordered list, + +#. the second item of an ordered list, + +#. the third item of an ordered list. + +This is a compact ordered list: + +5. The first item of an ordered list, +6. the second item of an ordered list, +7. the third item of an ordered list. + +This is a compact ordered list using hash enumerators: + +#. The first item of an ordered list, +#. the second item of an ordered list, +#. the third item of an ordered list. + +This is a compact fancy ordered list using hash enumerators: + +#) The first item of an ordered list, +#) the second item of an ordered list, +#) the third item of an ordered list. + +This is a task list: + +* [ ] Some unfinished task +* [/] Some half-finished task +* [X] Some finished task +* An item of an unordered list + #. [ ] Some unfinished subtask + #. [.] Some half-finished subtask + #. [x] Some finished subtask + #. An item of an ordered list + +This is a definition list: + +Term 1 + +: Definition 1 with some ~~removed text~~ + +Term 2 + +: Definition 2 + + Some code, part of Definition 2 + + Third paragraph of Definition 2. + +: Definition 3 + +This is a compact definition list: + +Term 1 +: Definition 1 +Term 2 +: Definition 2 +: Definition 3 + +This is a ^superscript^ and a ~subscript~. + +This is a block quote: + +> This is the first level of quoting. +> +> > This is nested blockquote. +> +> Back to the first level. + +Here is a note reference[^1] and another.[^longnote] +Here is an inline note.^[Inlines notes are easier to +write, since you don't have to pick an identifier and +move down to type the note.] + +[^1]: Here is the note. + +[^longnote]: Here's one with multiple blocks. + + Subsequent paragraphs are indented to show that they +belong to the previous note. + + Some code + + The whole paragraph can be indented, or just the first + line. In this way, multi-paragraph notes work like + multi-paragraph list items. + +This is raw `\TeX`{=tex} code: + +``` {=tex} +$$ x^n + y^n = z^n $$ +``` + +| this is a line block that +| spans multiple +| even + discontinuous +| lines + +This is inline and display TeX math created using dollars signs: + +$E=mc^2$ + +$$E=mc^2$$ + +This is inline and display TeX math created using single backslashes: + +\(E=mc^2\) + +\[E=mc^2\] + +This is inline and display TeX math created using double backslashes: + +\\(E=mc^2\\) + +\\[E=mc^2\\] diff --git a/Master/texmf-dist/doc/optex/markdown/examples/optex.tex b/Master/texmf-dist/doc/optex/markdown/examples/optex.tex new file mode 100644 index 00000000000..d39369f6b39 --- /dev/null +++ b/Master/texmf-dist/doc/optex/markdown/examples/optex.tex @@ -0,0 +1,379 @@ +\fontfam[lm] +\hyperlinks\Blue\Blue + +% Set options of the Markdown module +\_def \markdownOptions { + cacheDir="_markdown_example", + definitionLists=true, + fencedCode=true, + hashEnumerators=true, + smartEllipses=true, + strikeThrough=true, +} + +% Set renderers of the Markdown module +%% Attribute Renderers +%%% TODO + +%% Block Quote Renderers +\_def \markdownRendererBlockQuoteBegin {\_begblock} +\_def \markdownRendererBlockQuoteEnd {\_endblock} + +%% Bracketed Spans Attribute Context Renderers +%%% TODO + +%% Bullet List Renderers +\_def \markdownRendererUlBegin {\_begitems \_itemskipamount=\_olistskipamount} +\_def \markdownRendererUlBeginTight {\_begitems} +\_def \markdownRendererUlItem {\_startitem} +\_def \markdownRendererUlItemEnd {\_par} +\_def \markdownRendererUlEnd {\_enditems} +\_def \markdownRendererUlEndTight {\_enditems} + +%% Citations Renderers +%%% TODO + +%% Code Block Renderers +\_def \markdownRendererInputVerbatim #1{\_verbinput (-) {#1} } +\_def \markdownRendererInputFencedCode #1#2{\_verbinput \_hisyntax{#2} (-) {#1} } + +%% Code Span Renderer +\_def \markdownRendererCodeSpan #1{{\_ttfont #1}} + +%% Code Span Attribute Context Renderers +%%% TODO + +%% Content Block Renderers +%%% TODO + +%% Definition List Renderers +\_sdef{_item:d}{\_aftergroup\dword} +\_def \dword #1#2{{\bf#2 }\ignorespaces} +\_def \markdownRendererDlBegin {\_begitems \_style d \_itemskipamount=\_olistskipamount} +\_def \markdownRendererDlBeginTight {\_begitems \_style d} +\_def \markdownRendererDlItem {% + \_begingroup + \_def \markdownRendererInterblockSeparator {% + \_par + \_advance\_leftskip by\_iindent + \_def \markdownRendererInterblockSeparator {\_par}% + }% + \_startitem +} +\_def \markdownRendererDlItemEnd {% + \_par + \_endgroup +} +\_def \markdownRendererDlDefinitionBegin {} +\_def \markdownRendererDlDefinitionEnd #1{% + \_ifx #1\markdownRendererDlDefinitionBegin + \_firstnoindent + \markdownRendererInterblockSeparator + \_vskip\_itemskipamount + \_fi + #1% +} +\_def \markdownRendererDlEnd {\_enditems} +\_def \markdownRendererDlEndTight {\_enditems} + +%% Ellipsis Renderer +\_def \markdownRendererEllipsis {$\_ldots$} + +%% Emphasis Renderers +\_def \markdownRendererEmphasis #1{{\_em #1}} +\_def \markdownRendererStrongEmphasis #1{{\_bf #1}} + +%% Fenced Code Attribute Context Renderers +%%% TODO + +%% Fenced Div Attribute Context Renderers +%%% TODO + +%% Header Attribute Context Renderers +%%% TODO + +%% Heading Renderers +\_def \markdownRendererHeadingOne #1{\_printtit{#1}} +\_def \markdownRendererHeadingTwo #1{\_inchap{#1}} +\_def \markdownRendererHeadingThree #1{\_insec{#1}} +\_def \markdownRendererHeadingFour #1{\_insecc{#1}} +\_def \markdownRendererHeadingFive #1{{\_bf #1}\_firstnoindent} +\_def \markdownRendererHeadingSix #1{#1\_firstnoindent} + +%% HTML Comment Renderers +%%% TODO + +%% HTML Tag and Element Renderers +%%% TODO + +%% Image Renderer +\_def \markdownRendererImage #1#2#3#4{% + \_topinsert + \_centerline{\_inspic{#3}}% + \_cskip + \_caption/f #4% + \_par + \_endinsert +} + +%% Image Attribute Context Renderers +%%% TODO + +%% Interblock Separator Renderer +\_def \markdownRendererInterblockSeparator {\_par} +\_def \markdownRendererParagraphSeparator {\markdownRendererInterblockSeparator} + +%% Line Block Renderers +%%% TODO + +%% Line Break Renderers +\_def \markdownRendererSoftLineBreak { } +\_def \markdownRendererHardLineBreak {\_nl} + +%% Link Renderer +\_def \markdownRendererLink #1#2#3#4{\_ea\_ulink\_ea[\_expanded{#3}]{#1}} + +%% Link Attribute Context Renderers +%%% TODO + +%% Markdown Document Renderers +\_let \markdownRendererDocumentBegin \_relax +\_let \markdownRendererDocumentEnd \_relax + +%% Non-Breaking Space Renderer +\_def \markdownRendererNbsp {~} + +%% Note Renderer +%%% TODO + +%% Ordered List Renderers +\_def \markdownRendererOlBegin {\_begitems \_style n \_itemskipamount=\_olistskipamount} +\_def \markdownRendererOlBeginTight {\_begitems \_style n} +\_def \markdownRendererFancyOlBegin #1#2{\markdownRendererOlBegin} +\_def \markdownRendererFancyOlBeginTight #1#2{\markdownRendererOlBeginTight} +\_def \markdownRendererOlItem {\_startitem} +\_def \markdownRendererOlItemEnd {\_par} +\_def \markdownRendererOlItemWithNumber #1{\_itemnum=#1 \_advance\_itemnum by -1 \_startitem} +\_let \markdownRendererFancyOlItem \markdownRendererOlItem +\_let \markdownRendererFancyOlItemEnd \markdownRendererOlItemEnd +\_let \markdownRendererFancyOlItemWithNumber \markdownRendererOlItemWithNumber +\_def \markdownRendererOlEnd {\_enditems} +\_def \markdownRendererOlEndTight {\_enditems} +\_let \markdownRendererFancyOlEndTight \markdownRendererOlEndTight +\_let \markdownRendererFancyOlEnd \markdownRendererOlEnd + +%% Raw Content Renderers +%%% TODO + +%% Section Renderers +\_let \markdownRendererSectionBegin \_relax +\_let \markdownRendererSectionEnd \_relax + +%% Replacement Character Renderers +\_def \markdownRendererReplacementCharacter {^^^^fffd} + +%% Special Character Renderers +\_edef \markdownRendererAmpersand #1{\_csstring\&} +\_edef \markdownRendererBackslash #1{\_csstring\\} +\_edef \markdownRendererCircumflex #1{\_csstring\^} +\_edef \markdownRendererDollarSign #1{\_csstring\$} +\_edef \markdownRendererHash #1{\_csstring\#} +\_edef \markdownRendererLeftBrace #1{\_csstring\{} +\_edef \markdownRendererPercentSign #1{\_csstring\%} +\_def \markdownRendererPipe #1{|} +\_edef \markdownRendererRightBrace #1{\_csstring\}} +\_edef \markdownRendererTilde #1{\_csstring\~} +\_def \markdownRendererUnderscore #1{_} + +%% Strike-Through Renderer +\_def \markdownRendererStrikeThrough #1{% + \_setbox0=\_hbox {#1}% + \_leavevmode + \_rlap {\raise.5ex \_hbox to \_wd0 {\_hfil \_hrulefill \_hfil}}% + \_box0 +} + +%% Subscript Renderer +%%% TODO + +%% Superscript Renderer +%%% TODO + +%% Table Renderer +%%% TODO + +%% TeX Math Renderers +%%% TODO + +%% Thematic Break Renderer +\_def \markdownRendererThematicBreak {% + \_vskip 0.5\_baselineskip + \_hrule + \_par + \_vskip 0.5\_baselineskip + \_firstnoindent +} + +%% Tickbox Renderers +%%% TODO + +%% YAML Metadata Renderers +\_let \markdownRendererJekyllDataBegin \_relax +\_let \markdownRendererJekyllDataEnd \_relax +\_def \markdownRendererJekyllDataMappingBegin #1#2{} +\_let \markdownRendererJekyllDataMappingEnd \_relax +\_def \markdownRendererJekyllDataSequenceBegin #1#2{} +\_let \markdownRendererJekyllDataSequenceEnd \_relax +\_def \markdownRendererJekyllDataBoolean #1#2{} +\_def \markdownRendererJekyllDataNumber #1#2{} +\_def \markdownRendererJekyllDataString #1#2{} +\_def \markdownRendererJekyllDataEmpty #1{} + +% Load the Markdown module and set TeX macros for the Markdown module +\_directlua{ + kpse = require("kpse") + kpse.set_program_name("luatex") + markdown = require("markdown") +} + +\_eoldef \markdownBegin #1{% #1 includes the end of the current line, parameters can be here + \_def\_markdownParams{#1}% + \_bgroup \_setverb \_savemathsb \_endlinechar=`\^^J + \_markdownBeginA +} + +\_ea\_def \_ea\_markdownBeginA \_ea#\_ea1\_csstring\\markdownEnd#2^^J{% + \_restoremathsb \_egroup + \_bgroup + \_catcode`\%=12\_relax + \_catcode`\#=12\_relax + \_directlua { + % Prepare a table of options. + local defaultOptions = {\markdownOptions} + local currentOptions = {\_markdownParams} + local options = {} + for k,v in pairs(defaultOptions) do options[k] = v end + for k,v in pairs(currentOptions) do options[k] = v end + % Ensure that the cache directory exists. + if options.cacheDir then + local lfs = require("lfs") + if not lfs.isdir(options.cacheDir) then + assert(lfs.mkdir(options.cacheDir)) + end + end + % Convert Markdown to TeX and print it. + local convert = markdown.new(options) + local input = "\_luaescapestring{#1}" + local output = convert(input) + tex.print(output) + }% + \_egroup +} + +% Set the document metadata using a YAML metadata block +\markdownBegin hybrid=true,jekyllData=true +--- +title: An Example *Markdown* Document +author: Vít Starý Novotný +date: \today +--- + +# This is an H1 + +## This is an H2 + +### This is an H3 + +#### This is an H4 + +##### This is an H5 + +###### This is an H6 + +This is a text paragraph containing an ellipsis ... and followed by a +thematic break. + +*** + +This is inline `code`. This is a [link](http://google.cz "Google"). +This is an *emphasized* span of text. +This is a __strongly emphasized__ span of text. + + ![example image](example-image.png "An example image from Martin Scharrer's mwe package") + +This is a fenced code block: + +``` tex +\fontfam[LMfonts] +Hello World! \bye +``` + +This is a bullet list: + +* The first item of a bullet list, + +* the second item of a bullet list, + +* the third item of a bullet list. + +This is a compact bullet list: + +* The first item of a bullet list, +* the second item of a bullet list, +* the third item of a bullet list. + +This is an ordered list: + +5. The first item of an ordered list, + +6. the second item of an ordered list, + +7. the third item of an ordered list. + +This is an ordered list using hash enumerators: + +#. The first item of an ordered list, + +#. the second item of an ordered list, + +#. the third item of an ordered list. + +This is a compact ordered list: + +5. The first item of an ordered list, +6. the second item of an ordered list, +7. the third item of an ordered list. + +This is a compact ordered list using hash enumerators: + +#. The first item of an ordered list, +#. the second item of an ordered list, +#. the third item of an ordered list. + +This is a definition list: + +Term 1 + +: Definition 1 with some ~~removed text~~ + +Term 2 + +: Definition 2 + + Some code, part of Definition 2 + + Third paragraph of Definition 2. + +: Definition 3 + +This is a compact definition list: + +Term 1 +: Definition 1 +Term 2 +: Definition 2 +: Definition 3 + +\markdownEnd + +\bye diff --git a/Master/texmf-dist/doc/optex/markdown/examples/scientists.csv b/Master/texmf-dist/doc/optex/markdown/examples/scientists.csv new file mode 100644 index 00000000000..dee7830edf8 --- /dev/null +++ b/Master/texmf-dist/doc/optex/markdown/examples/scientists.csv @@ -0,0 +1,4 @@ +Name,Surname,Born +Albert,Einstein,1879 +Marie,Curie,1867 +Thomas,Edison,1847 diff --git a/Master/texmf-dist/scripts/markdown/markdown-cli.lua b/Master/texmf-dist/scripts/markdown/markdown-cli.lua index 2d23c9a7bd8..32a8753873e 100644 --- a/Master/texmf-dist/scripts/markdown/markdown-cli.lua +++ b/Master/texmf-dist/scripts/markdown/markdown-cli.lua @@ -20,7 +20,7 @@ -- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- --- Copyright (C) 2016-2023 Vít Novotný +-- Copyright (C) 2016-2024 Vít Starý Novotný -- -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -33,7 +33,7 @@ -- version 2005/12/01 or later. -- -- This work has the LPPL maintenance status `maintained'. --- The Current Maintainer of this work is Vít Novotný. +-- The Current Maintainer of this work is Vít Starý Novotný. -- -- Send bug reports, requests for additions and questions -- either to the GitHub issue tracker at @@ -58,56 +58,59 @@ -- those in the standard .ins files. -- local metadata = { - version = "2.23.0-0-g0b22f91", + version = "3.4.1-0-g457226ae", comment = "A module for the conversion from markdown to plain TeX", - author = "John MacFarlane, Hans Hagen, Vít Novotný", + author = "John MacFarlane, Hans Hagen, Vít Starý Novotný", copyright = {"2009-2016 John MacFarlane, Hans Hagen", - "2016-2023 Vít Novotný"}, + "2016-2023 Vít Starý Novotný"}, license = "LPPL 1.3c" } local defaultOptions = {} +defaultOptions.eagerCache = false +defaultOptions.singletonCache = true defaultOptions.cacheDir = "." defaultOptions.contentBlocksLanguageMap = "markdown-languages.json" defaultOptions.debugExtensionsFileName = "debug-extensions.json" defaultOptions.frozenCacheFileName = "frozenCache.tex" +defaultOptions.autoIdentifiers = false defaultOptions.blankBeforeBlockquote = false defaultOptions.blankBeforeCodeFence = false defaultOptions.blankBeforeDivFence = false defaultOptions.blankBeforeHeading = false +defaultOptions.blankBeforeList = false defaultOptions.bracketedSpans = false -defaultOptions.breakableBlockquotes = false +defaultOptions.breakableBlockquotes = true defaultOptions.citationNbsps = true defaultOptions.citations = false defaultOptions.codeSpans = true defaultOptions.contentBlocks = false +defaultOptions.contentLevel = "block" defaultOptions.debugExtensions = false defaultOptions.definitionLists = false -defaultOptions.eagerCache = true defaultOptions.expectJekyllData = false defaultOptions.extensions = {} defaultOptions.fancyLists = false -defaultOptions.fencedCode = false +defaultOptions.fencedCode = true defaultOptions.fencedCodeAttributes = false defaultOptions.fencedDivs = false defaultOptions.finalizeCache = false defaultOptions.frozenCacheCounter = 0 -defaultOptions.hardLineBreaks = false +defaultOptions.gfmAutoIdentifiers = false defaultOptions.hashEnumerators = false defaultOptions.headerAttributes = false -defaultOptions.html = false +defaultOptions.html = true defaultOptions.hybrid = false defaultOptions.inlineCodeAttributes = false -defaultOptions.inlineFootnotes = false defaultOptions.inlineNotes = false defaultOptions.jekyllData = false defaultOptions.linkAttributes = false defaultOptions.lineBlocks = false -defaultOptions.footnotes = false +defaultOptions.mark = false defaultOptions.notes = false defaultOptions.pipeTables = false -defaultOptions.preserveTabs = false -defaultOptions.rawAttribute = true +defaultOptions.preserveTabs = true +defaultOptions.rawAttribute = false defaultOptions.relativeReferences = false defaultOptions.shiftHeadings = 0 defaultOptions.slice = "^ $" @@ -117,6 +120,7 @@ defaultOptions.strikeThrough = false defaultOptions.stripIndent = false defaultOptions.subscripts = false defaultOptions.superscripts = false +defaultOptions.tableAttributes = false defaultOptions.tableCaptions = false defaultOptions.taskLists = false defaultOptions.texComments = false @@ -250,9 +254,8 @@ local kpse (function() local should_initialize = package.loaded.kpse == nil or tex.initialize ~= nil - local ran_ok - ran_ok, kpse = pcall(require, "kpse") - if ran_ok and should_initialize then + kpse = require("kpse") + if should_initialize then kpse.set_program_name("luatex") end end)() @@ -272,3 +275,6 @@ if output_filename then else assert(io.write(output)) end +if options.cacheDir then + lfs.rmdir(options["cacheDir"]) +end diff --git a/Master/texmf-dist/source/generic/markdown/docstrip.cfg b/Master/texmf-dist/source/generic/markdown/docstrip.cfg index 853817bb0a7..9dc5f652309 100644 --- a/Master/texmf-dist/source/generic/markdown/docstrip.cfg +++ b/Master/texmf-dist/source/generic/markdown/docstrip.cfg @@ -22,7 +22,7 @@ -- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE^^J% -- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.^^J% --^^J% --- Copyright (C) 2016-2023 Vít Novotný^^J% +-- Copyright (C) 2016-2024 Vít Starý Novotný^^J% --^^J% -- This work may be distributed and/or modified under the^^J% -- conditions of the LaTeX Project Public License, either version 1.3^^J% @@ -35,7 +35,7 @@ -- version 2005/12/01 or later.^^J% --^^J% -- This work has the LPPL maintenance status `maintained'.^^J% --- The Current Maintainer of this work is Vít Novotný.^^J% +-- The Current Maintainer of this work is Vít Starý Novotný.^^J% --^^J% -- Send bug reports, requests for additions and questions^^J% -- either to the GitHub issue tracker at^^J% @@ -62,7 +62,7 @@ \let\luapostamble\empty \declarepreamble\texpreamble -Copyright (C) 2016-2023 Vít Novotný +Copyright (C) 2016-2024 Vít Starý Novotný This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3c @@ -72,7 +72,7 @@ The latest version of this license is in http://www.latex-project.org/lppl.txt This work has the LPPL maintenance status `maintained'. -The Current Maintainer of this work is Vít Novotný. +The Current Maintainer of this work is Vít Starý Novotný. Send bug reports, requests for additions and questions either to the GitHub issue tracker at diff --git a/Master/texmf-dist/source/generic/markdown/markdown.dtx b/Master/texmf-dist/source/generic/markdown/markdown.dtx index 3edb022e15a..26b5db62f10 100644 --- a/Master/texmf-dist/source/generic/markdown/markdown.dtx +++ b/Master/texmf-dist/source/generic/markdown/markdown.dtx @@ -104,13 +104,7 @@ \newunicodechar{☒}{\markdownRendererTickedBox} \newunicodechar{⌛}{\markdownRendererHalfTickedBox} \newunicodechar{☐}{\markdownRendererUntickedBox} -\usepackage{emoji} -\makeatletter -\@ifpackagelater{emoji}{2020/03/16}{ - \newunicodechar{😉}{\emoji{winking-face}} -}{ - \newunicodechar{😉}{;-)} -} +\newunicodechar{😉}{;-)} \makeatother % Set up the catcodes. @@ -122,7 +116,7 @@ --- title: A Markdown Interpreter for \TeX url: https://github.com/witiko/markdown -authors: [Vít Novotný] +authors: [Vít Starý Novotný] email: witiko@mail.muni.cz revision: \markdownVersion date: \markdownLastModified @@ -763,23 +757,17 @@ abbr { author = {Knuth, Donald Ervin}, year = {1986}, title = {\TeX: The Program}, - isbn = {0-201-13437-7}, + isbn = {978-0-201-13437-7}, pagetotal = {xvi, 594}, series = {Computers \& Typesetting}, volume = {B}, location = {Reading, MA}, publisher = {Addison-Wesley}} -@online{novotny21, - author = {Novotný, Vít}, - title = {\Hologo{LaTeX2e} no longer keys packages by pathnames}, - date = {2021-02-20}, - url = {https://github.com/latex3/latex2e/issues/510}, - urldate = {2021-02-21}} @book{eijkhout92, author = {Victor Eijkhout}, title = {\TeX{} by Topic}, subtitle = {A \TeX nician's Reference}, - isbn = {0-201-56882-0}, + isbn = {978-0-201-56882-0}, pagetotal = {307}, date = {1992-02-01}, location = {Wokingham, England}, @@ -792,50 +780,23 @@ abbr { pages = {196-205}, doi = {10.1109/ICPC.2010.41}} %</techdoc-bibliography> -%<*latex-themes-witiko-markdown-techdoc> -\ProvidesPackage{markdownthemewitiko_markdown_techdoc}[2022/02/23] +%<@@=markdown> +%<*themes-witiko-markdown-techdoc> +\ProvidesPackage{markdownthemewitiko_markdown_techdoc}[2022/12/13] \RequirePackage{etoolbox} \markdownSetup{ renderers = { - head*Four = {% - \paragraph{#1}\leavevmode - \def\markdownRendererInterblockSeparator{% - \let\markdownRendererInterblockSeparator\par - }% - \noindent - }, + head*Four = {\paragraph{#1}\leavevmode}, }, rendererPrototypes = { codeSpan = {\inline{#1}}, - jek*llDataEnd = {% + jekyllData(End) = {% \AfterEndPreamble{% \printtitlepage \tableofcontents {\def\addcontentsline##1##2##3{}\listoffigures}% }% }, - headerAttributeContextBegin = { - \markdownSetup{ - rendererPrototypes = { - attributeIdentifier = {% - \begingroup - \def\next####1{% - \def####1########1{% - \endgroup - ####1{########1}% - \label{sec:##1}% - }% - }% - \next\markdownRendererHeadingOne - \next\markdownRendererHeadingTwo - \next\markdownRendererHeadingThree - \next\markdownRendererHeadingFour - \next\markdownRendererHeadingFive - \next\markdownRendererHeadingSix - }, - }, - }% - }, }, jekyllDataRenderers = { /authors/* = {% @@ -853,6 +814,17 @@ abbr { url = {\gdef\ltd@title@url{#1}}, } } +\ExplSyntaxOn +\markdownSetup{ + rendererPrototypes = { + headerAttributeContextEnd = { + \seq_map_inline:Nn + \l_@@_header_identifiers_seq + { \label { sec:##1 } } + }, + }, +} +\ExplSyntaxOff \renewcommand\markdownLaTeXRendererDirectOrIndirectLink[4]{% #1\footnote{See \url{#3}.}} \RequirePackage{varioref} @@ -884,12 +856,12 @@ abbr { dlEnd = {\end{optionlist}}, } } -%</latex-themes-witiko-markdown-techdoc> +%</themes-witiko-markdown-techdoc> %<*manual> --- title: Markdown Package User Manual -author: Vít Novotný +author: Vít Starý Novotný date: \markdownVersion{} \markdownLastModified{} --- @@ -901,7 +873,7 @@ date: \markdownVersion{} \markdownLastModified{} Introduction ============ -The [Markdown package][pkg] converts [markdown][] markup to \TeX{} commands. The +The [Markdown package][pkg] converts [CommonMark][] markup to \TeX{} commands. The functionality is provided both as a Lua module and as plain \TeX{}, \LaTeX{}, and \Hologo{ConTeXt} macro packages that can be used to directly typeset \TeX{} documents containing markdown markup. Unlike other convertors, the Markdown package @@ -909,10 +881,10 @@ does not require any external programs, and makes it easy to redefine how each and every markdown element is rendered. Creative abuse of the markdown syntax is encouraged. 😉 - [markdown]: https://daringfireball.net/projects/markdown/basics - (Daring Fireball: Markdown Basics) - [pkg]: https://ctan.org/pkg/markdown - (CTAN: Package markdown) + [commonmark]: https://commonmark.org/ + (CommonMark: A strongly defined, highly compatible specification of Markdown) + [pkg]: https://ctan.org/pkg/markdown + (CTAN: Package markdown) % This document is a technical documentation for the \pkg{Markdown} package. It % consists of three sections. This section introduces the package and outlines @@ -942,9 +914,9 @@ documentation][techdoc]. local metadata = { version = "(((VERSION)))", comment = "A module for the conversion from markdown to plain TeX", - author = "John MacFarlane, Hans Hagen, Vít Novotný", + author = "John MacFarlane, Hans Hagen, Vít Starý Novotný", copyright = {"2009-2016 John MacFarlane, Hans Hagen", - "2016-2023 Vít Novotný"}, + "2016-2023 Vít Starý Novotný"}, license = "LPPL 1.3c" } @@ -994,15 +966,19 @@ make base `````` This should produce the following files: -* `markdown.lua`, the Lua module, -* `libraries/markdown-tinyyaml.lua`, an external library for reading \acro{yaml}, -* `markdown-cli.lua`, the Lua command-line interface, -* `markdown.tex`, the plain \TeX{} macro package, -* `markdown.sty`, the \LaTeX{} package, -* `markdownthemewitiko_dot.sty`, the `witiko/dot` \LaTeX{} theme, -* `markdownthemewitiko_graphicx_http.sty`, the `witiko/graphicx/http` \LaTeX{} theme, -* `markdownthemewitiko_tilde.sty`, the `witiko/tilde` \LaTeX{} theme, and -* `t-markdown.tex`, the \Hologo{ConTeXt} module. +* `markdown.lua`: The Lua module +* `libraries/markdown-tinyyaml.lua`: An external library for reading \acro{yaml} +* `markdown-cli.lua`: The Lua command-line interface +* `markdown.tex`: The plain \TeX{} macro package +* `markdown.sty`: The \LaTeX{} package +* `markdownthemewitiko_dot.sty`: The `witiko/dot` \LaTeX{} theme +* `markdownthemewitiko_graphicx_http.sty`: The `witiko/graphicx/http` \LaTeX{} theme +* `markdownthemewitiko_tilde.tex`: The `witiko/tilde` theme +* `markdownthemewitiko_markdown_defaults.tex`, + `markdownthemewitiko_markdown_defaults.sty`, and + `t-markdownthemewitiko_markdown_defaults.tex`: The `witiko/markdown/defaults` + theme +* `t-markdown.tex`: The \Hologo{ConTeXt} module ### Local Installation @@ -1014,11 +990,14 @@ placed: * `⟨TEXMF⟩/tex/luatex/markdown/markdown-tinyyaml.lua` * `⟨TEXMF⟩/scripts/markdown/markdown-cli.lua` * `⟨TEXMF⟩/tex/generic/markdown/markdown.tex` +* `⟨TEXMF⟩/tex/generic/markdown/markdownthemewitiko_tilde.tex` +* `⟨TEXMF⟩/tex/generic/markdown/markdownthemewitiko_markdown_defaults.tex` * `⟨TEXMF⟩/tex/latex/markdown/markdown.sty` * `⟨TEXMF⟩/tex/latex/markdown/markdownthemewitiko_dot.sty` * `⟨TEXMF⟩/tex/latex/markdown/markdownthemewitiko_graphicx_http.sty` -* `⟨TEXMF⟩/tex/latex/markdown/markdownthemewitiko_tilde.sty` +* `⟨TEXMF⟩/tex/latex/markdown/markdownthemewitiko_markdown_defaults.sty` * `⟨TEXMF⟩/tex/context/third/markdown/t-markdown.tex` +* `⟨TEXMF⟩/tex/context/third/markdown/t-markdownthemewitiko_markdown_defaults.tex` where `⟨TEXMF⟩` corresponds to a root of your \TeX{} distribution, such as `/usr/share/texmf` and `~/texmf` on UN\*X systems or @@ -1031,10 +1010,20 @@ Alternatively, you can also store the above files in the same folder as your \TeX{} document and distribute them together. This way your document can be portably typeset on legacy \TeX{} distributions. -Since Markdown version 2.10.0, the file `markdown.tex` must be placed in -a directory named `markdown` due to [issue #74][issue-74]. - - [issue-74]: https://github.com/witiko/markdown/issues/74 (Does not compile if user names own document markdown.tex) +This is where the individual files should be placed: + +* `./markdown.lua` +* `./markdown-tinyyaml.lua` +* `./markdown-cli.lua` +* `./markdown/markdown.tex` +* `./markdown.sty` +* `./t-markdown.tex` +* `./markdownthemewitiko_dot.sty` +* `./markdownthemewitiko_graphicx_http.sty` +* `./markdownthemewitiko_tilde.tex` +* `./markdownthemewitiko_markdown_defaults.tex` +* `./markdownthemewitiko_markdown_defaults.sty` +* `./t-markdownthemewitiko_markdown_defaults.tex` %</manual> %<*lua> @@ -1077,23 +1066,7 @@ local lpeg = require("lpeg") % % \end{markdown} % \begin{macrocode} -local unicode -(function() - local ran_ok - ran_ok, unicode = pcall(require, "unicode") -% \end{macrocode} -% \begin{markdown} -% -% If the Selene Unicode library is unavailable (could be because we are using -% LuaMeta\TeX) and we are using Lua${}\geq{}$5.3, we will use the built-in -% support for Unicode. -% -% \end{markdown} -% \begin{macrocode} - if not ran_ok then - unicode = {utf8 = {char=utf8.char}} - end -end)() +local unicode = require("unicode") % \end{macrocode} % \par % \begin{markdown} @@ -1133,22 +1106,10 @@ local md5 = require("md5"); % \begin{macrocode} local should_initialize = package.loaded.kpse == nil or tex.initialize ~= nil - local ran_ok - ran_ok, kpse = pcall(require, "kpse") - if ran_ok and should_initialize then + kpse = require("kpse") + if should_initialize then kpse.set_program_name("luatex") end -% \end{macrocode} -% \begin{markdown} -% -% If the \pkg{Kpathsea} library is unavailable, we will look up files only -% in the current working directory. -% -% \end{markdown} -% \begin{macrocode} - if not ran_ok then - kpse = {lookup = function(f, _) return f end} - end end)() % \end{macrocode} % \par @@ -1164,35 +1125,7 @@ end)() % % \end{markdown} % \begin{macrocode} -local uni_case -(function() - local ran_ok - ran_ok, uni_case = pcall(require, "lua-uni-case") -% \end{macrocode} -% \begin{markdown} -% -% If the lua-uni-algos library is unavailable but the Selene Unicode library -% is available, we will use its Unicode lower-casing support instead of -% the more proper case-folding. -% -% \end{markdown} -% \begin{macrocode} - if not ran_ok then - if unicode.utf8.lower then - uni_case = {casefold = unicode.utf8.lower} - else -% \end{macrocode} -% \begin{markdown} -% -% If the Selene Unicode library is also unavailable, we will defer to using -% ASCII lower-casing. -% -% \end{markdown} -% \begin{macrocode} - uni_case = {casefold = string.lower} - end - end -end)() +local uni_algos = require("lua-uni-algos") % \end{macrocode} % \par % \begin{markdown} @@ -1229,10 +1162,16 @@ end)() % % \end{markdown} % \begin{macrocode} -%<@@=markdown> +%</tex> +%<*context> +\unprotect +%</context> +%<*context,tex> \ifx\ExplSyntaxOn\undefined - \input expl3-generic\relax + \input expl3-generic \fi +%</context,tex> +%<*tex> % \end{macrocode} % \begin{markdown} % @@ -1264,11 +1203,10 @@ end)() % \TeX{} part of the package will require that either the Lua\TeX{} % `\directlua` primitive or the shell access file stream 18 is available in % your \TeX{} engine. If only the shell access file stream is available in your -% \TeX{} engine (as is the case with \hologo{pdfTeX} and \Hologo{XeTeX}) or if -% you enforce the use of shell using the \mref{markdownMode} macro, then unless -% your \TeX{} engine is globally configured to enable shell access, you will -% need to provide the `-shell-escape` parameter to your engine when typesetting -% a document. +% \TeX{} engine (as is the case with \hologo{pdfTeX} and \Hologo{XeTeX}), then +% unless your \TeX{} engine is globally configured to enable shell access, you +% will need to provide the `-shell-escape` parameter to your engine when +% typesetting a document. % % \end{markdown} % \iffalse @@ -1284,13 +1222,13 @@ end)() % loaded, % \end{markdown} % \iffalse -%<*latex-themes-witiko-dot,latex-themes-witiko-graphicx-http,latex-themes-witiko-tilde> +%<*themes-witiko-dot,latex-themes-witiko-graphicx-http> % \fi % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}% % \end{macrocode} % \iffalse -%</latex-themes-witiko-dot,latex-themes-witiko-graphicx-http,latex-themes-witiko-tilde> +%</themes-witiko-dot,latex-themes-witiko-graphicx-http> % \fi % \begin{markdown} % a \TeX{} engine that extends \Hologo{eTeX}, and all the plain \TeX{} @@ -1299,9 +1237,9 @@ end)() % The following packages are soft prerequisites. They are only used to provide % default token renderer prototypes (see sections % <#sec:texrendererprototypes> and -% <#sec:latex-default-renderer-prototypes>) or \LaTeX{} themes (see Section -% <#sec:latexthemes>) and will not be loaded if the `plain` package option -% has been enabled (see Section <#sec:latexplain>): +% <#sec:latex-token-renderer-prototypes>) or \LaTeX{} themes (see Section +% <#sec:latexthemes>) and will not be loaded if the option `plain` has been +% enabled (see Section <#sec:plain>): % % \pkg{url} % @@ -1333,7 +1271,7 @@ end)() % \pkg{csvsimple} % %: A package that provides the `\csvautotabular` macro for typesetting -% \acro{csv} files in the default renderer prototypes for iA\,Writer +% \acro{csv} files in the default renderer prototypes for iA\\,Writer % content blocks. % % \pkg{gobble} @@ -1378,7 +1316,7 @@ end)() % \pkg{soulutf8} % %: A package that is used in the default renderer prototype for -% strike-throughs. +% strike-throughs and marked text. % % \pkg{ltxcmds} % @@ -1411,7 +1349,7 @@ end)() % \pkg{m-database} % %: A module that provides the default token renderer prototype for -% iA\,Writer content blocks with the \acro{csv} filename extension (see +% iA\\,Writer content blocks with the \acro{csv} filename extension (see % Section <#sec:texrendererprototypes>). % % Feedback @@ -1498,7 +1436,11 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown +\begingroup +\catcode`\%=12 +\catcode`\#=12 \input hello +\endgroup \bye ``````` @@ -1508,8 +1450,8 @@ Using a text editor, create a text document named `hello.lua` with the following content: ``` lua #!/usr/bin/env texlua -local ran_ok, kpse = pcall(require, "kpse") -if ran_ok then kpse.set_program_name("luatex") end +local kpse = require("kpse") +kpse.set_program_name("luatex") local markdown = require("markdown") local convert = markdown.new() print(convert("Hello *world*!")) @@ -1569,10 +1511,35 @@ Next, invoke LuaTeX from the terminal: luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the text -“Hello *world*!” Invoking pdfTeX should have the same effect: +“Hello *world*!” + +Instead of LuaTeX, you may also use pdfTeX: ``` sh pdftex --shell-escape document.tex ``````` +This should also produce a PDF document named `document.pdf` with the same content. + +*** + +Instead of writing your markdown document between `\markdownBegin` and +`\markdownEnd`, you can also include markdown documents using the +`\markdownInput` macro, similarly to how you might use the `\input` TeX +primitive to include \TeX{} documents. + +Using a text editor, create a text document named `hello.md` with the +following content: +``` md +Hello *world*! +`````` +Create also a text document named `document.tex` with the following content: +``` tex +\input markdown +\markdownInput{hello.md} +\bye +``````` +Next, invoke LuaTeX or pdfTeX from the terminal like in the previous example. +A PDF document named `document.pdf` should be produced and contain the text +“Hello *world*!” ### Using \LaTeX{} @@ -1592,10 +1559,39 @@ Next, invoke LuaTeX from the terminal: lualatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the text “Hello -*world*!” Invoking pdfTeX should have the same effect: +*world*!” + +Instead of LuaTeX, you may also use pdfTeX: ``` sh pdflatex --shell-escape document.tex `````` +This should also produce a PDF document named `document.pdf` with the same content. + +*** + +Instead of writing your markdown document between `\begin{markdown}` and +`\end{markdown}`, you can also include markdown documents using the +`\markdownInput` macro, similarly to how you might use the `\input` TeX +primitive to include \LaTeX{} documents. + +Using a text editor, create a text document named `hello.md` with the +following content: +``` md +Hello *world*! +`````` +Create also a text document named `document.tex` with the following content: +``` tex +\documentclass{article} +\usepackage{markdown} +\begin{document} +\begin{markdown} +\markdownInput{hello.md} +\end{markdown} +\end{document} +``````` +Next, invoke LuaTeX or pdfTeX from the terminal like in the previous example. +A PDF document named `document.pdf` should be produced and contain the text +“Hello *world*!” *** @@ -1629,25 +1625,48 @@ Hello *world*! ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the text “Hello *world*!” *** +Instead of writing your markdown document between `\startmarkdown` and +`\stopmarkdown`, you can also include markdown documents using the +`\inputmarkdown` macro, similarly to how you might use the `\input` TeX +primitive to include \Hologo{ConTeXt} documents. + +Using a text editor, create a text document named `hello.md` with the +following content: +``` md +Hello *world*! +`````` +Create also a text document named `document.tex` with the following content: +``` tex +\usemodule[t][markdown] +\starttext +\inputmarkdown{hello.md} +\stoptext +``````` +Next, invoke LuaTeX from the terminal like in the previous example. +A PDF document named `document.pdf` should be produced and contain the text +“Hello *world*!” + +*** + As the next step, try typesetting the example documents distributed along with the Markdown package: ``` sh git clone https://github.com/witiko/markdown cd markdown/examples -context context.tex +context --luatex context.tex `````` A PDF document named `context.pdf` should be produced. Open the text documents `context.tex` and `example.md` in a text editor to see how the example documents are structured. Try changing the documents and typesetting them as follows: ``` sh -context context.tex +context --luatex context.tex `````` to see the effect of your changes. @@ -1674,6 +1693,7 @@ Each part will be shown by example, leaving the implementation details to the % Lua Interface {#luainterface} %--------------- % +% \end{markdown} % \iffalse %</lua> %<*manual-interfaces> @@ -1700,6 +1720,7 @@ module and a command-line interface (CLI). %</manual-interfaces> %<*lua> % \fi +% \begin{markdown} % % The Lua interface provides the conversion from \acro{utf}-\oldstylenums8 % encoded markdown to plain \TeX{}. This interface is used by the plain \TeX{} @@ -1755,8 +1776,11 @@ local walkable_syntax = { "ThematicBreak", "BulletList", "OrderedList", - "Heading", "DisplayHtml", + "Heading", + }, + BlockOrParagraph = { + "Block", "Paragraph", "Plain", }, @@ -1764,11 +1788,8 @@ local walkable_syntax = { "Str", "Space", "Endline", - "UlOrStarLine", - "Strong", - "Emph", - "Link", - "Image", + "EndlineBreak", + "LinkAndEmph", "Code", "AutoLinkUrl", "AutoLinkEmail", @@ -1794,9 +1815,9 @@ local walkable_syntax = { % not be interpreted by the Markdown package; you can treat it as a comment. % % For example. if we'd like to insert `pattern` into the grammar between the -% `Inline -> Emph` and `Inline -> Link` rules, we would call -% \luamref{reader->insert_pattern} with `"Inline after Emph"` (or `"Inline -% before Link"`) and `pattern` as the arguments. +% `Inline -> LinkAndEmph` and `Inline -> Code` rules, we would call +% \luamref{reader->insert_pattern} with `"Inline after LinkAndEmph"` (or `"Inline +% before Code"`) and `pattern` as the arguments. % % The \luamref{reader->add_special_character} method adds a new character with % special meaning to the grammar of markdown. The method receives the character @@ -1824,26 +1845,30 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \input example +\endgroup \bye ``````` Using a text editor, create a text document named `example.lua` with the following content: ``` lua #!/usr/bin/env texlua -local ran_ok, kpse = pcall(require, "kpse") -if ran_ok then kpse.set_program_name("luatex") end +local kpse = require("kpse") +kpse.set_program_name("luatex") local markdown = require("markdown") -local input, convert_safe, convert_unsafe, paragraph +local input, convert_nomath, convert_math, paragraph input = [[$\sqrt{-1}$ *equals* $i$.]] -convert_safe = markdown.new() -convert_unsafe = markdown.new({hybrid = true}) +convert_nomath = markdown.new() +convert_math = markdown.new({texMathDollars = true}) paragraph = [[\par]] print( - convert_safe(input) .. paragraph .. - convert_unsafe(input) + convert_nomath(input) .. paragraph .. + convert_math(input) ) ``````` Next, invoke LuaTeX from the terminal: @@ -1876,16 +1901,16 @@ named `document.tex` with the following content: \input lmfonts \directlua{ local markdown = require("markdown") - local input, convert_safe, convert_unsafe, paragraph + local input, convert_nomath, convert_math, paragraph input = [[$\string\sqrt{-1}$ *equals* $i$.]] - convert_safe = markdown.new() - convert_unsafe = markdown.new({hybrid = true}) + convert_nomath = markdown.new() + convert_math = markdown.new({texMathDollars = true}) paragraph = [[\par]] tex.sprint( - convert_safe(input) .. paragraph .. - convert_unsafe(input) + convert_nomath(input) .. paragraph .. + convert_math(input) ) } \bye @@ -1921,11 +1946,12 @@ following content: ``` tex \input markdown \input lmfonts -\input safe - \begingroup \catcode`\%=12 -\input unsafe +\catcode`\#=12 +\input nomath +\par +\input math \endgroup \bye ``````` @@ -1936,8 +1962,8 @@ $\sqrt{-1}$ *equals* $i$. `````` Next, invoke LuaTeX from the terminal: ``` sh -texlua ⟨CLI pathname⟩ -- example.md safe.tex -texlua ⟨CLI pathname⟩ hybrid=true -- example.md unsafe.tex +texlua ⟨CLI pathname⟩ -- example.md nomath.tex +texlua ⟨CLI pathname⟩ tex_math_dollars=true -- example.md math.tex luatex document.tex `````` where \meta{CLI pathname} corresponds to the location of the Lua CLI script file, @@ -1957,8 +1983,8 @@ following text: Invoking pdfTeX should have the same effect: ``` sh -texlua ⟨CLI pathname⟩ -- example.md safe.tex -texlua ⟨CLI pathname⟩ hybrid=true -- example.md unsafe.tex +texlua ⟨CLI pathname⟩ -- example.md nomath.tex +texlua ⟨CLI pathname⟩ tex_math_dollars=true -- example.md math.tex pdftex document.tex `````` @@ -2331,6 +2357,212 @@ interfaces and all the way up to the \LaTeX{} and \Hologo{ConTeXt} interfaces. % \fi % \begin{markdown} % +%### General Behavior +% +% \end{markdown} +% \par +% \iffalse + +#### Option `eagerCache` + +`eagerCache` (default value: `false`) + +% \fi +% \begin{markdown} +% +% \Optitem[false]{eagerCache}{\opt{true}, \opt{false}} +% +: true + + : Converted markdown documents will be cached in \Opt{cacheDir}. This can be + useful for post-processing the converted documents and for recovering + historical versions of the documents from the cache. However, it also + produces a large number of auxiliary files on the disk and obscures the + output of the Lua command-line interface when it is used for plumbing. + + This behavior will always be used if the \Opt{finalizeCache} option is + enabled. + +: false + + : Converted markdown documents will not be cached. This decreases the number + of auxiliary files that we produce and makes it easier to use the Lua + command-line interface for plumbing. + + This behavior will only be used when the \Opt{finalizeCache} option is + disabled. + +% \end{markdown} +% \iffalse + +##### Lua CLI Example {.unnumbered} + +Using a text editor, create a text document named `hello.md` with the +following content: +``` md +Hello *world*! +`````` +Next, invoke LuaTeX from the terminal with the \Opt{eagerCache} option +disabled: +``` sh +texlua ⟨CLI pathname⟩ eagerCache=false -- hello.md hello.tex +``````` +where \meta{CLI pathname} corresponds to the location of the Lua CLI script file, +such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or +`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows +systems. Use the command `kpsewhich -a markdown-cli.lua` to locate the Lua CLI +script file using [Kpathsea][]. + +A \TeX{} document named `hello.tex` should be produced and contain the +following code: +``` tex +Hello \markdownRendererEmphasis{world}!\relax +``` + +*** + +Invoke LuaTeX from the terminal again, this time with the \Opt{eagerCache} +option enabled: + +``` tex +texlua ⟨CLI pathname⟩ eagerCache=true -- hello.md hello.tex +``` + +A \TeX{} document named `hello.tex` should be produced and contain the +following code: + +``` tex +\input ./⟨hash⟩.md.tex\relax +``` + +Additionally, a \TeX{} document named `⟨hash⟩.md.tex` should be produced and +contain the following code: + +``` tex +Hello \markdownRendererEmphasis{world}!\relax +``` + +%</manual-options> +%<*tex> +% \fi +% \begin{macrocode} +\@@_add_lua_option:nnn + { eagerCache } + { boolean } + { false } +% \end{macrocode} +% \iffalse +%</tex> +%<*lua,lua-cli> +% \fi +% \begin{macrocode} +defaultOptions.eagerCache = false +% \end{macrocode} +% \par +% \iffalse +%</lua,lua-cli> +%<*manual-options> + +#### Option `singletonCache` + +`singletonCache` (default value: `true`) + +% \fi +% \begin{markdown} +% +% \Optitem[true]{singletonCache}{\opt{true}, \opt{false}} +% +: true + + : Conversion functions produced by the function \luamref{new}`(options)` + will be cached in an LRU cache of size 1 keyed by `options`. This is + more time- and space-efficient than always producing a new conversion + function but may expose bugs related to the idempotence of conversion + functions. + + This has been the default behavior since version 3.0.0 of the Markdown + package. + +: false + + : Every call to the function \luamref{new}`(options)` will produce a new + conversion function that will not be cached. This is slower than + caching conversion functions and may expose bugs related to memory + leaks in the creation of conversion functions, see also issue [#226][1]. + + This was the default behavior until version 3.0.0 of the Markdown package. + + [1]: https://github.com/witiko/markdown/pull/226#issuecomment-1599641634 + +% \end{markdown} +% \iffalse + +##### Lua Module Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\input markdown +\begingroup +\catcode`\%=12 +\catcode`\#=12 +\directlua{ + local markdown = require("markdown") + local convert1 = markdown.new({}) + local convert2 = markdown.new({singletonCache=false}) + local convert3 = markdown.new({singletonCache=true}) + local newline = [[^^J^^J]] + tex.print(tostring(convert1) .. ", ") + tex.print(tostring(convert2) .. ", ") + tex.print(tostring(convert3)) +} +\endgroup +\bye +``````` +Then, invoke LuaTeX from the terminal: +``` sh +luatex document.tex +``````` +A PDF document named `document.pdf` should be produced and contain the following text: + +> function: 0x1a4a038, function: 0x1a52b18, function: 0x1a4a038 + +As you can see, the caching causes `convert1` and `convert3` to be the same +conversion function. + +%</manual-options> +%<*tex> +% \fi +% \begin{macrocode} +\@@_add_lua_option:nnn + { singletonCache } + { boolean } + { true } +% \end{macrocode} +% \iffalse +%</tex> +%<*lua,lua-cli> +% \fi +% \begin{macrocode} +defaultOptions.singletonCache = true +% \end{macrocode} +% \iffalse +%</lua,lua-cli> +%<*lua> +% \fi +% \begin{macrocode} +local singletonCache = { + convert = nil, + options = nil, +} +% \end{macrocode} +% \par +% \iffalse +%</lua> +%<*manual-options> +% \fi +% \begin{markdown} +% %### File and Directory Names % % \end{markdown} @@ -2365,11 +2597,15 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown +\begingroup +\catcode`\%=12 +\catcode`\#=12 \directlua{ local markdown = require("markdown") local convert = markdown.new({cacheDir = "cache"}) local input = "Hello *world*!" tex.sprint(convert(input)) } +\endgroup \bye ``````` Create an empty directory named `cache` next to our text document. Then, invoke @@ -2387,7 +2623,11 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown +\begingroup +\catcode`\%=12 +\catcode`\#=12 \input hello +\endgroup \bye ``````` Using a text editor, create a text document named `hello.md` with the @@ -2469,7 +2709,7 @@ Hello *world*! ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the text “Hello *world*!” A directory named `cache` containing several cache files of the @@ -2507,7 +2747,7 @@ defaultOptions.cacheDir = "." % \Valitem[markdown-languages.json]{contentBlocksLanguageMap}{filename} % : The filename of the \acro{JSON} file that maps filename extensions to - programming language names in the iA\,Writer content blocks when the + programming language names in the iA\\,Writer content blocks when the \Opt{contentBlocks} option is enabled. % See Section <#sec:texcontentblockrenderers> for more information. @@ -2621,7 +2861,7 @@ Create also a text document named `document.tex` with the following content: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -2739,11 +2979,15 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown +\begingroup +\catcode`\%=12 +\catcode`\#=12 \directlua{ local markdown = require("markdown") local convert = markdown.new({finalizeCache = true, frozenCacheFileName = "cache.tex"}) local input = "Hello *world*!" tex.sprint(convert(input)) } +\endgroup \bye ``````` Then, invoke LuaTeX from the terminal: @@ -2761,7 +3005,11 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown +\begingroup +\catcode`\%=12 +\catcode`\#=12 \input hello +\endgroup \bye ``````` Using a text editor, create a text document named `hello.md` with the @@ -2891,7 +3139,7 @@ Hello *world*! ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the text “Hello *world*!” A frozen cache will also be produced in the `cache.tex` @@ -2913,9 +3161,9 @@ Hi *world*! \stopmarkdown \stoptext ``````` -Last, invoke pdfTeX without shell access from the terminal: +Last, invoke LuaTeX from the terminal: ``` sh -context frozen-document.tex +context --luatex frozen-document.tex `````` A PDF document named `frozen-document.pdf` should be produced and contain the text “Hello *world*!” Since we used the contents of the frozen cache using @@ -2952,6 +3200,55 @@ defaultOptions.frozenCacheFileName = "frozenCache.tex" % \par % \iffalse +#### Option `autoIdentifiers` + +`autoIdentifiers` (default value: `false`) + +% \fi +% \begin{markdown} +% \Optitem[false]{autoIdentifiers}{\opt{true}, \opt{false}} +% +: true + + : Enable the Pandoc [auto identifiers syntax extension][pandoc-auto-identifiers]: + + ``` md + The following heading received the identifier `sesame-street`: + + # 123 Sesame Street + `````` + + false + + : Disable the Pandoc auto identifiers syntax extension. + +See also the option \Opt{gfmAutoIdentifiers}. + + [pandoc-auto-identifiers]: https://pandoc.org/MANUAL.html#extension-auto_identifiers + +% \end{markdown} +% \iffalse +%</manual-options> +%<*tex> +% \fi +% \begin{macrocode} +\@@_add_lua_option:nnn + { autoIdentifiers } + { boolean } + { false } +% \end{macrocode} +% \iffalse +%</tex> +%<*lua,lua-cli> +% \fi +% \begin{macrocode} +defaultOptions.autoIdentifiers = false +% \end{macrocode} +% \par +% \iffalse +%</lua,lua-cli> +%<*manual-options> + #### Option `blankBeforeBlockquote` `blankBeforeBlockquote` (default value: `false`) @@ -2979,6 +3276,9 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \directlua{ local markdown = require("markdown") local newline = [[^^J^^J]] @@ -2993,6 +3293,7 @@ following content: input = "A paragraph." .. newline .. "> Not a quote." .. newline tex.sprint(convert(input)) } +\endgroup \bye ``````` Then, invoke LuaTeX from the terminal: @@ -3015,8 +3316,12 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \input optionfalse \input optiontrue +\endgroup \bye ``````` Using a text editor, create a text document named `content.md` with the @@ -3093,10 +3398,10 @@ A paragraph. > A quote. \end{markdown} -\begin{markdown*}{blankBeforeBlockquote} +\begin{markdown}[blankBeforeBlockquote] A paragraph. > Not a quote. -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -3136,7 +3441,7 @@ A paragraph. ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -3197,6 +3502,9 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \directlua{ local markdown = require("markdown") local newline = [[^^J^^J]] @@ -3216,6 +3524,7 @@ following content: "Not a fenced code." .. newline .. "```" .. newline tex.sprint(convert(input)) } +\endgroup \bye ``````` Then, invoke LuaTeX from the terminal: @@ -3240,8 +3549,12 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \input optionfalse \input optiontrue +\endgroup \bye ``````` Using a text editor, create a text document named `content.md` with the @@ -3331,12 +3644,12 @@ A fenced code. ``` \end{markdown} -\begin{markdown*}{blankBeforeCodeFence} +\begin{markdown}[blankBeforeCodeFence] A paragraph. ``` Not a fenced code. ``` -\end{markdown*} +\end{markdown} \end{document} ```````` @@ -3383,7 +3696,7 @@ Not a fenced code. ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -3454,13 +3767,13 @@ A fenced div. ::: \end{markdown} -\begin{markdown*}{blankBeforeDivFence} +\begin{markdown}[blankBeforeDivFence] A paragraph. ::: {.identifier} Not a fenced div. ::: -\end{markdown*} +\end{markdown} \end{document} ```````` @@ -3529,6 +3842,9 @@ following content: \input markdown \input lmfonts \def\markdownRendererHeadingOne#1{{\bf #1}\par} +\begingroup +\catcode`\%=12 +\catcode`\#=12 \directlua{ local markdown = require("markdown") local newline = [[^^J^^J]] @@ -3545,6 +3861,7 @@ following content: "Not a heading." .. newline .. "==============" .. newline tex.sprint(convert(input)) } +\endgroup \bye ``````` Then, invoke LuaTeX from the terminal: @@ -3568,8 +3885,12 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \input optionfalse \input optiontrue +\endgroup \bye ``````` Using a text editor, create a text document named `content.md` with the @@ -3652,11 +3973,11 @@ A heading. ========== \end{markdown} -\begin{markdown*}{blankBeforeHeading} +\begin{markdown}[blankBeforeHeading] A paragraph. Not a heading. ============== -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -3699,7 +4020,7 @@ Not a heading. ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -3732,6 +4053,232 @@ defaultOptions.blankBeforeHeading = false %</lua,lua-cli> %<*manual-options> +#### Option `blankBeforeList` + +`blankBeforeList` (default value: `false`) + +% \fi +% \begin{markdown} +% +% \Optitem[false]{blankBeforeList}{\opt{true}, \opt{false}} +% +: true + + : Require a blank line between a paragraph and the following list. + + false + + : Do not require a blank line between a paragraph and the following + list. + +% \end{markdown} +% \iffalse + +##### Lua Module Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\input markdown +\input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 +\directlua{ + local markdown = require("markdown") + local newline = [[^^J^^J]] + local convert, input + + convert = markdown.new() + input = "A paragraph." .. newline .. + "- a list" .. newline + tex.sprint(convert(input)) + + convert = markdown.new({ + blankBeforeList = true}) + input = "A paragraph." .. newline .. + "- not a list" .. newline + tex.sprint(convert(input)) } +\endgroup +\bye +``````` +Then, invoke LuaTeX from the terminal: +``` sh +luatex document.tex +``````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> A paragraph. +> +> - a list +> +> A paragraph. - not a list + +##### Lua CLI Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\input markdown +\input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 +\input optionfalse +\input optiontrue +\endgroup +\bye +``````` +Using a text editor, create a text document named `content.md` with the +following content: +```` md +A paragraph. +- a list? +``````` +Next, invoke LuaTeX from the terminal: +``` sh +texlua ⟨CLI pathname⟩ -- content.md optionfalse.tex +texlua ⟨CLI pathname⟩ blankBeforeList=true -- content.md optiontrue.tex +luatex document.tex +``````` +where \meta{CLI pathname} corresponds to the location of the Lua CLI script file, +such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or +`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows +systems. Use the command `kpsewhich -a markdown-cli.lua` to locate the Lua CLI +script file using [Kpathsea][]. + +A PDF document named `document.pdf` should be produced and contain the +following text: + +> A paragraph. +> +> - a list? +> +> A paragraph. - a list? + +##### Plain \TeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +```` tex +\input markdown + +\markdownBegin +A paragraph. +- a list +\markdownEnd + +\def\markdownOptionBlankBeforeList{true} +\markdownBegin +A paragraph. +- not a list +\markdownEnd + +\bye +```````` +Next, invoke LuaTeX from the terminal: +``` sh +luatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> A paragraph. +> +> - a list +> +> A paragraph. - not a list + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +```` tex +\documentclass{article} +\usepackage{markdown} +\begin{document} + +\begin{markdown} +A paragraph. +- a list +\end{markdown} + +\begin{markdown}[blankBeforeList] +A paragraph. +- not a list +\end{markdown} + +\end{document} +```````` +Next, invoke LuaTeX from the terminal: +``` sh +lualatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> A paragraph. +> +> - a list +> +> A paragraph. - not a list + +##### \Hologo{ConTeXt} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +```` tex +\usemodule[t][markdown] +\starttext + +\startmarkdown +A paragraph. +- a list +\stopmarkdown + +\setupmarkdown[blankBeforeList = yes] +\startmarkdown +A paragraph. +- not a list +\stopmarkdown + +\stoptext +```````` +Next, invoke LuaTeX from the terminal: +``` sh +context document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> A paragraph. +> +> - a list +> +> A paragraph. - not a list + +%</manual-options> +%<*tex> +% \fi +% \begin{macrocode} +\@@_add_lua_option:nnn + { blankBeforeList } + { boolean } + { false } +% \end{macrocode} +% \iffalse +%</tex> +%<*lua,lua-cli> +% \fi +% \begin{macrocode} +defaultOptions.blankBeforeList = false +% \end{macrocode} +% \par +% \iffalse +%</lua,lua-cli> +%<*manual-options> + #### Option `bracketedSpans` `bracketedSpans` (default value: `false`) @@ -3830,12 +4377,12 @@ defaultOptions.bracketedSpans = false #### Option `breakableBlockquotes` -`breakableBlockquotes` (default value: `false`) +`breakableBlockquotes` (default value: `true`) % \fi % \begin{markdown} % -% \Optitem[false]{breakableBlockquotes}{\opt{true}, \opt{false}} +% \Optitem[true]{breakableBlockquotes}{\opt{true}, \opt{false}} % : true @@ -3856,20 +4403,24 @@ following content: \input markdown \input lmfonts \def\markdownRendererHeadingOne#1{{\bf #1}\par} +\begingroup +\catcode`\%=12 +\catcode`\#=12 \directlua{ local markdown = require("markdown") local newline = [[^^J^^J]] local convert, input - convert = markdown.new() + convert = markdown.new({breakableBlockquotes = false}) input = "> A single" .. newline .. newline .. "> block quote." .. newline tex.sprint(convert(input)) - convert = markdown.new({breakableBlockquotes = true}) + convert = markdown.new() input = "> A block quote." .. newline .. newline .. "> Another block quote." .. newline tex.sprint(convert(input)) } +\endgroup \bye ``````` Then, invoke LuaTeX from the terminal: @@ -3892,8 +4443,12 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \input optionfalse \input optiontrue +\endgroup \bye ``````` Using a text editor, create a text document named `content.md` with the @@ -3905,8 +4460,8 @@ following content: `````` Next, invoke LuaTeX from the terminal: ``` sh -texlua ⟨CLI pathname⟩ -- content.md optionfalse.tex -texlua ⟨CLI pathname⟩ breakableBlockquotes=true -- content.md optiontrue.tex +texlua ⟨CLI pathname⟩ breakableBlockquotes=false -- content.md optionfalse.tex +texlua ⟨CLI pathname⟩ -- content.md optiontrue.tex luatex document.tex ``````` where \meta{CLI pathname} corresponds to the location of the Lua CLI script file, @@ -3931,6 +4486,7 @@ following content: ``` tex \input markdown +\def\markdownOptionBreakableBlockquotes{false} \markdownBegin > A single @@ -3968,17 +4524,17 @@ following content: \usepackage{markdown} \begin{document} -\begin{markdown} +\begin{markdown}[breakableBlockquotes = false] > A single > block quote. \end{markdown} -\begin{markdown*}{breakableBlockquotes} +\begin{markdown} > A block quote. > Another block quote. -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -4003,6 +4559,7 @@ following content: \usemodule[t][markdown] \starttext +\setupmarkdown[breakableBlockquotes = no] \startmarkdown > A single @@ -4020,7 +4577,7 @@ following content: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -4038,14 +4595,14 @@ following text: \@@_add_lua_option:nnn { breakableBlockquotes } { boolean } - { false } + { true } % \end{macrocode} % \iffalse %</tex> %<*lua,lua-cli> % \fi % \begin{macrocode} -defaultOptions.breakableBlockquotes = false +defaultOptions.breakableBlockquotes = true % \end{macrocode} % \par % \iffalse @@ -4099,9 +4656,9 @@ following content: The TeXbook [@knuth:tex, p. 123 and 130] is good. \end{markdown} -\begin{markdown*}{citationNbsps = false} +\begin{markdown}[citationNbsps = false] The TeXbook [@knuth:tex, p. 123 and 130] is good. -\end{markdown*} +\end{markdown} \bibliographystyle{plain} \bibliography{document.bib} @@ -4287,6 +4844,9 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \directlua{ local markdown = require("markdown") local convert = markdown.new() @@ -4302,6 +4862,7 @@ following content: "``This is a quote.'' " .. "``This is another quote.''" tex.sprint(convert(input)) } +\endgroup \bye ``````` Then, invoke LuaTeX from the terminal: @@ -4322,9 +4883,13 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \input optionfalse \par \input optiontrue +\endgroup \bye ``````` Using a text editor, create a text document named `content.md` with the @@ -4396,10 +4961,10 @@ following content: ``This is no longer a code span.'' \end{markdown} -\begin{markdown*}{codeSpans=false} +\begin{markdown}[codeSpans=false] ``This is a quote.'' ``This is another quote.'' -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -4437,7 +5002,7 @@ following content: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -4479,9 +5044,9 @@ defaultOptions.codeSpans = true : true : Enable the -% iA\,Writer content blocks syntax extension~[@sotkov17]: +% iA\\,Writer content blocks syntax extension~[@sotkov17]: % \iffalse - iA\,Writer content blocks syntax extension: + iA\\,Writer content blocks syntax extension: % \fi ``` md @@ -4496,7 +5061,7 @@ defaultOptions.codeSpans = true : false : Disable the - iA\,Writer content blocks syntax extension. + iA\\,Writer content blocks syntax extension. % \end{markdown} % \iffalse @@ -4601,7 +5166,7 @@ Create also a text document named `document.tex` with the following content: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -4641,6 +5206,143 @@ defaultOptions.contentBlocks = false %</lua,lua-cli> %<*manual-options> +#### Option `contentLevel` + +`contentLevel` (default value: `block`) + +% \fi +% \begin{markdown} +% +% \Optitem[block]{contentLevel}{\opt{block}, \opt{inline}} +% +: block + + : Treat content as a sequence of blocks. + ``` md + - this is a list + - it contains two items + `````` + +: inline + + : Treat all content as inline content. + ``` md + - this is a text + - not a list + `````` + +% \end{markdown} +% \iffalse + +##### Plain \TeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\input markdown +\def\markdownOptionContentLevel{inline} +\markdownBegin +- this is +- a text +\markdownEnd +\bye +``````` +Next, invoke LuaTeX from the terminal: +``` sh +luatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> \- this is - a text + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage{markdown} +\begin{document} + +\begin{markdown} +- this is +- a list +\end{markdown} + +\begin{markdown}[contentLevel=inline] +- this is +- a text +\end{markdown} + +\end{document} +``````` +Next, invoke LuaTeX from the terminal: +``` sh +lualatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> - this is +> - a list +> +> \- this is - a text + +##### \Hologo{ConTeXt} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\usemodule[t][markdown] +\starttext + +\startmarkdown +- this is +- a list +\stopmarkdown + +\setupmarkdown[contentLevel = inline] +\startmarkdown +- this is +- a text +\stopmarkdown + +\stoptext +```````` +Next, invoke LuaTeX from the terminal: +``` sh +context --luatex document.tex +````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> - this is +> - a list +> +> \- this is - a text + +%</manual-options> +%<*tex> +% \fi +% \begin{macrocode} +\@@_add_lua_option:nnn + { contentLevel } + { string } + { block } +% \end{macrocode} +% \iffalse +%</tex> +%<*lua,lua-cli> +% \fi +% \begin{macrocode} +defaultOptions.contentLevel = "block" +% \end{macrocode} +% \par +% \iffalse +%</lua,lua-cli> +%<*manual-options> + #### Option `debugExtensions` `debugExtensions` (default value: `false`) @@ -4685,7 +5387,7 @@ following content: ``` lua local strike_through = { api_version = 2, - grammar_version = 2, + grammar_version = 4, finalize_grammar = function(reader) local nonspacechar = lpeg.P(1) - lpeg.S("\t ") local doubleslashes = lpeg.P("//") @@ -4699,7 +5401,7 @@ local strike_through = { lpeg.V("Inline"), doubleslashes, doubleslashes ) / function(s) return {"\\st{", s, "}"} end - reader.insert_pattern("Inline after Emph", read_strike_through, + reader.insert_pattern("Inline after LinkAndEmph", read_strike_through, "StrikeThrough") reader.add_special_character("/") end @@ -4737,24 +5439,28 @@ be produced and contain the following text: "Block": [ "Blockquote", "Verbatim", + "FencedCode (built-in fenced_code syntax extension)", "ThematicBreak", "BulletList", "OrderedList", - "Heading", "DisplayHtml", + "Heading" + ], + "BlockOrParagraph": [ + "Block", "Paragraph", "Plain" ], + "EndlineExceptions": [ + "EndlineExceptions (built-in fenced_code syntax extension)" + ], "Inline": [ "Str", "Space", "Endline", - "UlOrStarLine", - "Strong", - "Emph", + "EndlineBreak", + "LinkAndEmph", "StrikeThrough (user-defined \"./strike-through.lua\" syntax extension)", - "Link", - "Image", "Code", "AutoLinkUrl", "AutoLinkEmail", @@ -4893,7 +5599,7 @@ Term 2 with *inline markup* ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -4931,107 +5637,6 @@ defaultOptions.definitionLists = false %</lua,lua-cli> %<*manual-options> -#### Option `eagerCache` - -`eagerCache` (default value: `true`) - -% \fi -% \begin{markdown} -% -% \Optitem[true]{eagerCache}{\opt{true}, \opt{false}} -% -: true - - : Converted markdown documents will be cached in \Opt{cacheDir}. This can be - useful for post-processing the converted documents and for recovering - historical versions of the documents from the cache. However, it also - produces a large number of auxiliary files on the disk and obscures the - output of the Lua command-line interface when it is used for plumbing. - - This behavior will always be used if the \Opt{finalizeCache} option is - enabled. - -: false - - : Converted markdown documents will not be cached. This decreases the number - of auxiliary files that we produce and makes it easier to use the Lua - command-line interface for plumbing. - - This behavior will only be used when the \Opt{finalizeCache} option is - disabled. Recursive nesting of markdown document fragments is undefined - behavior when \Opt{eagerCache} is disabled. - -% \end{markdown} -% \iffalse - -##### Lua Module Example {.unnumbered} - -Using a text editor, create a text document named `hello.md` with the -following content: -``` md -Hello *world*! -`````` -Next, invoke LuaTeX from the terminal with the \Opt{eagerCache} option -disabled: -``` sh -texlua ⟨CLI pathname⟩ eagerCache=false -- hello.md hello.tex -``````` -where \meta{CLI pathname} corresponds to the location of the Lua CLI script file, -such as `~/texmf/scripts/markdown/markdown-cli.lua` on UN\*X systems or -`C:\Users\`\meta{Your username}`\texmf\scripts\markdown\markdown-cli.lua` on Windows -systems. Use the command `kpsewhich -a markdown-cli.lua` to locate the Lua CLI -script file using [Kpathsea][]. - -A \TeX{} document named `hello.tex` should be produced and contain the -following code: -``` tex -Hello \markdownRendererEmphasis{world}!\relax -``` - -*** - -Invoke LuaTeX from the terminal again, this time with the \Opt{eagerCache} -option enabled: - -``` tex -texlua ⟨CLI pathname⟩ eagerCache=true -- hello.md hello.tex -``` - -A \TeX{} document named `hello.tex` should be produced and contain the -following code: - -``` tex -\input ./⟨hash⟩.md.tex\relax -``` - -Additionally, a \TeX{} document named `⟨hash⟩.md.tex` should be produced and -contain the following code: - -``` tex -Hello \markdownRendererEmphasis{world}!\relax -``` - -%</manual-options> -%<*tex> -% \fi -% \begin{macrocode} -\@@_add_lua_option:nnn - { eagerCache } - { boolean } - { true } -% \end{macrocode} -% \iffalse -%</tex> -%<*lua,lua-cli> -% \fi -% \begin{macrocode} -defaultOptions.eagerCache = true -% \end{macrocode} -% \par -% \iffalse -%</lua,lua-cli> -%<*manual-options> - #### Option `expectJekyllData` `expectJekyllData` (default value: `false`) @@ -5175,7 +5780,7 @@ defaultOptions.expectJekyllData = false % ``` lua % local strike_through = { % api_version = 2, -% grammar_version = 2, +% grammar_version = 4, % finalize_grammar = function(reader) % local nonspacechar = lpeg.P(1) - lpeg.S("\t ") % local doubleslashes = lpeg.P("//") @@ -5189,7 +5794,7 @@ defaultOptions.expectJekyllData = false % lpeg.V("Inline"), doubleslashes, doubleslashes % ) / function(s) return {"\\st{", s, "}"} end % -% reader.insert_pattern("Inline after Emph", read_strike_through, +% reader.insert_pattern("Inline after LinkAndEmph", read_strike_through, % "StrikeThrough") % reader.add_special_character("/") % end @@ -5210,7 +5815,7 @@ defaultOptions.expectJekyllData = false % \fi % \begin{macrocode} metadata.user_extension_api_version = 2 -metadata.grammar_version = 2 +metadata.grammar_version = 4 % \end{macrocode} % \iffalse %</lua> @@ -5218,17 +5823,17 @@ metadata.grammar_version = 2 % \fi % \begin{markdown} % -% Any changes to the syntax extension API or grammar will cause the -% corresponding current version to be incremented. After Markdown 3.0.0, -% any changes to the API and the grammar will be either backwards-compatible -% or constitute a breaking change that will cause the major version of the -% Markdown package to increment (to 4.0.0). +% Any changes to the syntax extension API or grammar will cause the +% corresponding current version to be incremented. After Markdown 3.0.0, +% any changes to the API and the grammar will be either backwards-compatible +% or constitute a breaking change that will cause the major version of the +% Markdown package to increment (to 4.0.0). % -% The `finalize_grammar` field is a function that finalizes the grammar of -% markdown using the interface of a Lua \luamref{reader} object, such as -% the \luamref{reader->insert_pattern} and -% \luamref{reader->add_special_character} methods, -% see Section <#lua-user-extensions>. +% The `finalize_grammar` field is a function that finalizes the grammar of +% markdown using the interface of a Lua \luamref{reader} object, such as +% the \luamref{reader->insert_pattern} and +% \luamref{reader->add_special_character} methods, +% see Section <#sec:lua-user-extensions>. % % \end{markdown} % \iffalse @@ -5240,7 +5845,7 @@ following content: ``` lua local strike_through = { api_version = 2, - grammar_version = 2, + grammar_version = 4, finalize_grammar = function(reader) local nonspacechar = lpeg.P(1) - lpeg.S("\t ") local doubleslashes = lpeg.P("//") @@ -5254,7 +5859,7 @@ local strike_through = { lpeg.V("Inline"), doubleslashes, doubleslashes ) / function(s) return {"\\st{", s, "}"} end - reader.insert_pattern("Inline after Emph", read_strike_through, + reader.insert_pattern("Inline after LinkAndEmph", read_strike_through, "StrikeThrough") reader.add_special_character("/") end @@ -5379,7 +5984,7 @@ c) third item ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -5411,12 +6016,12 @@ defaultOptions.fancyLists = false #### Option `fencedCode` -`fencedCode` (default value: `false`) +`fencedCode` (default value: `true`) % \fi % \begin{markdown} % -% \Optitem[false]{fencedCode}{\opt{true}, \opt{false}} +% \Optitem[true]{fencedCode}{\opt{true}, \opt{false}} % : true @@ -5455,7 +6060,7 @@ following content: ```` tex \documentclass{article} \usepackage{minted} -\usepackage[fencedCode]{markdown} +\usepackage{markdown} \begin{document} \begin{markdown} ~~~ js @@ -5489,7 +6094,7 @@ following text: > moveShip(5 * gravity, DOWN); > } > ``` -> +> > ``` html > <pre> > <code> @@ -5507,7 +6112,6 @@ Using a text editor, create a text document named `document.tex` with the following content: ```` tex \usemodule[t][markdown] -\setupmarkdown[fencedCode = yes] \definetyping [js] \definetyping [html] \setuptyping [html] [option=XML] @@ -5534,7 +6138,7 @@ if (a > 3) { ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -5544,7 +6148,7 @@ following text: > moveShip(5 * gravity, DOWN); > } > ``` -> +> > ``` html > <pre> > <code> @@ -5563,14 +6167,14 @@ following text: \@@_add_lua_option:nnn { fencedCode } { boolean } - { false } + { true } % \end{macrocode} % \iffalse %</tex> %<*lua,lua-cli> % \fi % \begin{macrocode} -defaultOptions.fencedCode = false +defaultOptions.fencedCode = true % \end{macrocode} % \par % \iffalse @@ -5873,7 +6477,7 @@ Hello *world*! ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the text “Hello *world*!” A frozen cache will also be produced in the `cache.tex` @@ -5889,9 +6493,9 @@ Hi *world*! \stopmarkdown \stoptext ``````` -Last, invoke pdfTeX without shell access from the terminal: +Last, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A new PDF document named `document.pdf` should be produced and contain the same text “Hello *world*!” Since we used the contents of the frozen cache using @@ -5947,6 +6551,9 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown +\begingroup +\catcode`\%=12 +\catcode`\#=12 \directlua{ local markdown = require("markdown") local firstConvert = markdown.new({finalizeCache = true, frozenCacheCounter = 0}) @@ -5954,6 +6561,7 @@ following content: local secondConvert = markdown.new({finalizeCache = true, frozenCacheCounter = 1}) local secondInput = "*world*!" tex.sprint(firstConvert(firstInput) .. [[ ]] .. secondConvert(secondInput)) } +\endgroup \bye ``````` Then, invoke LuaTeX from the terminal: @@ -5985,91 +6593,49 @@ defaultOptions.frozenCacheCounter = 0 %</lua,lua-cli> %<*manual-options> -#### Option `hardLineBreaks` +#### Option `gfmAutoIdentifiers` -`hardLineBreaks` (default value: `false`) +`gfmAutoIdentifiers` (default value: `false`) % \fi % \begin{markdown} -% -% \Optitem[false]{hardLineBreaks}{\opt{true}, \opt{false}} +% \Optitem[false]{gfmAutoIdentifiers}{\opt{true}, \opt{false}} % : true - : Interpret all newlines within a paragraph as hard line breaks instead - of spaces. + : Enable the Pandoc [GitHub-flavored auto identifiers syntax extension][pandoc-gfm-auto-identifiers]: -: false - - : Interpret all newlines within a paragraph as spaces. - -% \end{markdown} -% \iffalse - -##### \LaTeX{} Example {.unnumbered} + ``` md + The following heading received the identifier `123-sesame-street`: -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\documentclass{article} -\usepackage{markdown} -\begin{document} + # 123 Sesame Street + `````` -\begin{markdown} -'Twas brillig, and the slithy toves -Did gyre and gimble in the wabe; -All mimsy were the borogoves, -And the mome raths outgrabe. -\end{markdown} + false -\begin{markdown*}{hardLineBreaks} -'Twas brillig, and the slithy toves -Did gyre and gimble in the wabe; -All mimsy were the borogoves, -And the mome raths outgrabe. -\end{markdown*} + : Disable the Pandoc GitHub-flavored auto identifiers syntax extension. -\end{document} -``````` -Next, invoke LuaTeX from the terminal: -``` sh -lualatex document.tex -`````` -A PDF document named `document.pdf` should be produced and contain the -following text: +See also the option \Opt{autoIdentifiers}. -> 'Twas brillig, and the slithy toves -> Did gyre and gimble in the wabe; -> All mimsy were the borogoves, -> And the mome raths outgrabe. -> -> 'Twas brillig, and the slithy toves -> Did gyre and gimble in the wabe; -> All mimsy were the borogoves, -> And the mome raths outgrabe. + [pandoc-gfm-auto-identifiers]: https://pandoc.org/MANUAL.html#extension-gfm_auto_identifiers +% \end{markdown} +% \iffalse %</manual-options> %<*tex> % \fi % \begin{macrocode} \@@_add_lua_option:nnn - { hardLineBreaks } + { gfmAutoIdentifiers } { boolean } { false } % \end{macrocode} -% \begin{markdown} -% -% The hardLineBreaks option has been deprecated and will be removed in -% Markdown 3.0.0. From then on, all line breaks within a paragraph will -% be interpreted as soft line breaks. -% -% \end{markdown} % \iffalse %</tex> %<*lua,lua-cli> % \fi % \begin{macrocode} -defaultOptions.hardLineBreaks = false +defaultOptions.gfmAutoIdentifiers = false % \end{macrocode} % \par % \iffalse @@ -6119,11 +6685,11 @@ following content: #. Parish \end{markdown} -\begin{markdown*}{hashEnumerators} +\begin{markdown}[hashEnumerators] #. Bird #. McHale #. Parish -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -6170,7 +6736,7 @@ following content: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -6258,12 +6824,12 @@ defaultOptions.headerAttributes = false #### Option `html` -`html` (default value: `false`) +`html` (default value: `true`) % \fi % \begin{markdown} % -% \Optitem[false]{html}{\opt{true}, \opt{false}} +% \Optitem[true]{html}{\opt{true}, \opt{false}} % : true @@ -6288,9 +6854,12 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \directlua{ local markdown = require("markdown") - local convert = markdown.new() + local convert = markdown.new({html = false}) local newline = [[^^J^^J]] local input = "<div>*There is no block tag support.*</div>" .. newline .. @@ -6301,13 +6870,14 @@ following content: \par \directlua{ local markdown = require("markdown") - local convert = markdown.new({html = true}) + local convert = markdown.new() local input = "<div>*There is block tag support.*</div>" .. newline .. "*There is <inline tag="tag"></inline> support.*" .. newline .. "_There is <!-- comment --> support._" .. newline .. "_There is <? HTML instruction ?> support._" tex.sprint(convert(input)) } +\endgroup \bye ``````` Then, invoke LuaTeX from the terminal: @@ -6331,9 +6901,13 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \input optionfalse \par \input optiontrue +\endgroup \bye ``````` Using a text editor, create a text document named `content.md` with the @@ -6348,8 +6922,8 @@ _Is there <? HTML instruction ?> support?_ ```````` Next, invoke LuaTeX from the terminal: ``` sh -texlua ⟨CLI pathname⟩ -- content.md optionfalse.tex -texlua ⟨CLI pathname⟩ html=true -- content.md optiontrue.tex +texlua ⟨CLI pathname⟩ html=false -- content.md optionfalse.tex +texlua ⟨CLI pathname⟩ -- content.md optiontrue.tex luatex document.tex ``````` where \meta{CLI pathname} corresponds to the location of the Lua CLI script file, @@ -6376,6 +6950,7 @@ following content: \input markdown \input lmfonts +\def\markdownOptionHtml{false} \markdownBegin <div> *There is no block tag support.* @@ -6420,7 +6995,7 @@ following content: \usepackage{markdown} \begin{document} -\begin{markdown} +\begin{markdown}[html = false] <div> *There is no block tag support.* </div> @@ -6429,14 +7004,14 @@ _There is no <!-- comment --> support._ _There is no <? HTML instruction ?> support._ \end{markdown} -\begin{markdown*}{html} +\begin{markdown} <div> *There is block tag support.* </div> *There is <inline tag="tag"></inline> support.* _There is <!-- comment --> support._ _There is <? HTML instruction ?> support._ -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -6462,6 +7037,7 @@ following content: \usemodule[t][markdown] \starttext +\setupmarkdown[html = no] \startmarkdown <div> *There is no block tag support.* @@ -6485,7 +7061,7 @@ _There is <? HTML instruction ?> support._ ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -6504,14 +7080,14 @@ following text: \@@_add_lua_option:nnn { html } { boolean } - { false } + { true } % \end{macrocode} % \iffalse %</tex> %<*lua,lua-cli> % \fi % \begin{macrocode} -defaultOptions.html = false +defaultOptions.html = true % \end{macrocode} % \par % \iffalse @@ -6552,6 +7128,9 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \directlua{ local markdown = require("markdown") local input, convert_safe, convert_unsafe, paragraph @@ -6566,6 +7145,7 @@ following content: convert_unsafe(input) ) } +\endgroup \bye ``````` Then, invoke LuaTeX from the terminal: @@ -6588,10 +7168,11 @@ following content: ``` tex \input markdown \input lmfonts -\input optionfalse - \begingroup \catcode`\%=12 +\catcode`\#=12 +\input optionfalse +\par \input optiontrue \endgroup \bye @@ -6667,9 +7248,9 @@ following content: $\sqrt{-1}$ *equals* $i$. \end{markdown} -\begin{markdown*}{hybrid} +\begin{markdown}[hybrid] $\sqrt{-1}$ *equals* $i$. -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -6707,7 +7288,7 @@ $\sqrt{-1}$ *equals* $i$. ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -6906,7 +7487,7 @@ move down to type the note.] ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -6918,18 +7499,8 @@ following text: %</manual-options> %<*tex> % \fi -% \begin{markdown} -% -% The inlineFootnotes option has been deprecated and will be removed in -% Markdown 3.0.0. -% -% \end{markdown} % \begin{macrocode} \@@_add_lua_option:nnn - { inlineFootnotes } - { boolean } - { false } -\@@_add_lua_option:nnn { inlineNotes } { boolean } { false } @@ -6939,7 +7510,6 @@ following text: %<*lua,lua-cli> % \fi % \begin{macrocode} -defaultOptions.inlineFootnotes = false defaultOptions.inlineNotes = false % \end{macrocode} % \par @@ -7086,7 +7656,7 @@ age: 99 ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -7315,7 +7885,7 @@ following content: ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -7346,6 +7916,77 @@ defaultOptions.lineBlocks = false %</lua,lua-cli> %<*manual-options> +#### Option `mark` + +`mark` (default value: `false`) + +% \fi +% \begin{markdown} +% +% \Optitem[false]{mark}{\opt{true}, \opt{false}} +% +: true + + : Enable the Pandoc [mark syntax extension][pandoc-mark]: + + ``` md + This ==is highlighted text.== + `````` + +: false + + : Disable the Pandoc mark syntax extension. + + [pandoc-mark]: https://pandoc.org/MANUAL.html#extension-mark + +% \end{markdown} +% \iffalse + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage[mark]{markdown} +\begin{document} +\begin{markdown} + +This ==is highlighted text.== + +\end{markdown} +\end{document} +``````` +Next, invoke LuaTeX from the terminal: +``` sh +lualatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> This <mark>is highlighted text.</mark> + +%</manual-options> +%<*tex> +% \fi +% \begin{macrocode} +\@@_add_lua_option:nnn + { mark } + { boolean } + { false } +% \end{macrocode} +% \iffalse +%</tex> +%<*lua,lua-cli> +% \fi +% \begin{macrocode} +defaultOptions.mark = false +% \end{macrocode} +% \par +% \iffalse +%</lua,lua-cli> +%<*manual-options> + #### Option `notes` `notes` (default value: `false`) @@ -7473,7 +8114,7 @@ isn't indented. ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -7499,18 +8140,8 @@ following text: %</manual-options> %<*tex> % \fi -% \begin{markdown} -% -% The footnotes option has been deprecated and will be removed in -% Markdown 3.0.0. -% -% \end{markdown} % \begin{macrocode} \@@_add_lua_option:nnn - { footnotes } - { boolean } - { false } -\@@_add_lua_option:nnn { notes } { boolean } { false } @@ -7520,7 +8151,6 @@ following text: %<*lua,lua-cli> % \fi % \begin{macrocode} -defaultOptions.footnotes = false defaultOptions.notes = false % \end{macrocode} % \par @@ -7605,7 +8235,7 @@ following content: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -7639,12 +8269,12 @@ defaultOptions.pipeTables = false #### Option `preserveTabs` -`preserveTabs` (default value: `false`) +`preserveTabs` (default value: `true`) % \fi % \begin{markdown} % -% \Optitem[false]{preserveTabs}{\opt{true}, \opt{false}} +% \Optitem[true]{preserveTabs}{\opt{true}, \opt{false}} % : true @@ -7663,14 +8293,14 @@ defaultOptions.pipeTables = false \@@_add_lua_option:nnn { preserveTabs } { boolean } - { false } + { true } % \end{macrocode} % \iffalse %</tex> %<*lua,lua-cli> % \fi % \begin{macrocode} -defaultOptions.preserveTabs = false +defaultOptions.preserveTabs = true % \end{macrocode} % \par % \iffalse @@ -7765,7 +8395,7 @@ following text: %<*lua,lua-cli> % \fi % \begin{macrocode} -defaultOptions.rawAttribute = true +defaultOptions.rawAttribute = false % \end{macrocode} % \par % \iffalse @@ -7971,7 +8601,7 @@ following content: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -8181,7 +8811,7 @@ following content: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -8246,8 +8876,11 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown -\def\markdownRendererEllipsis{. . .} \input lmfonts +\def\markdownRendererEllipsis{. . .} +\begingroup +\catcode`\%=12 +\catcode`\#=12 \directlua{ local markdown = require("markdown") local convert = markdown.new() @@ -8259,6 +8892,7 @@ following content: local convert = markdown.new({smartEllipses = true}) local input = "... and this is a victorian ellipsis." tex.sprint(convert(input)) } +\endgroup \bye ``````` Then, invoke LuaTeX from the terminal: @@ -8278,11 +8912,15 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown -\def\markdownRendererEllipsis{. . .} \input lmfonts +\def\markdownRendererEllipsis{. . .} +\begingroup +\catcode`\%=12 +\catcode`\#=12 \input optionfalse \par \input optiontrue +\endgroup \bye ``````` Using a text editor, create a text document named `content.md` with the @@ -8357,9 +8995,9 @@ following content: These are just three regular dots ... \end{markdown} -\begin{markdown*}{smartEllipses} +\begin{markdown}[smartEllipses] ... and this is a victorian ellipsis. -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -8396,7 +9034,7 @@ These are just three regular dots ... ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -8466,14 +9104,14 @@ The following list respects the numbers specified in the markup: 5. fifth item \end{markdown} -\begin{markdown*}{startNumber=false} +\begin{markdown}[startNumber=false] The following list does not respect the numbers specified in the markup: 3. third item 4. fourth item 5. fifth item -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -8524,7 +9162,7 @@ The following list respects the numbers specified in the markup: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -8656,7 +9294,7 @@ This is ~~a lunar roving vehicle~~ strike-through text. ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -8771,7 +9409,7 @@ following content: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the text “Hello *world*!” @@ -8861,7 +9499,7 @@ H~2~O is a liquid. ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -8953,7 +9591,7 @@ following content: ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -8981,7 +9619,132 @@ defaultOptions.superscripts = false %</lua,lua-cli> %<*manual-options> -#### Option `tableCaptions` +#### Option `tableAttributes` + +`tableAttributes` (default value: `false`) + +% \fi +% \begin{markdown} +% +% \Optitem[false]{tableAttributes}{\opt{true}, \opt{false}} +% +: true + + : Enable the assignment of HTML attributes to +% table captions (see the \Opt{tableCaptions} option). +% \iffalse + [table captions](#table-captions). +% \fi + + ``` md + | Right | Left | Default | Center | + |------:|:-----|---------|:------:| + | 12 | 12 | 12 | 12 | + | 123 | 123 | 123 | 123 | + | 1 | 1 | 1 | 1 | + + : Demonstration of pipe table syntax. {#example-table} + ``` + +: false + + : Disable the assignment of HTML attributes to table captions. + +% \end{markdown} +% \iffalse + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage[ + pipeTables, + tableCaptions, + tableAttributes, + relativeReferences, +]{markdown} +\usepackage{expl3} +\ExplSyntaxOn +\markdownSetup{ + renderers = { + tableAttributeContextBegin = { + \group_begin: + \markdownSetup{ + renderers = { + attributeIdentifier = { + \markdownSetup{ + renderers = { + tableAttributeContextEnd = { + \label{##1} + \group_end: + }, + }, + } + }, + }, + } + }, + tableAttributeContextEnd = { + \group_end: + }, + }, +} +\ExplSyntaxOff +\begin{document} +\begin{markdown} +See Table <#example-table>. + +| Right | Left | Default | Center | +|------:|:-----|---------|:------:| +| 12 | 12 | 12 | 12 | +| 123 | 123 | 123 | 123 | +| 1 | 1 | 1 | 1 | + + : Demonstration of pipe table syntax. {#example-table} +\end{markdown} +\end{document} +``````` +Next, invoke LuaTeX from the terminal: +``` sh +lualatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> See Table 1. +> +> | Right | Left | Default | Center | +> |------:|:-----|---------|:------:| +> | 12 | 12 | 12 | 12 | +> | 123 | 123 | 123 | 123 | +> | 1 | 1 | 1 | 1 | +> +> : Table 1. Demonstration of pipe table syntax. + +%</manual-options> +%<*tex> +% \fi +% \begin{macrocode} +\@@_add_lua_option:nnn + { tableAttributes } + { boolean } + { false } +% \end{macrocode} +% \iffalse +%</tex> +%<*lua,lua-cli> +% \fi +% \begin{macrocode} +defaultOptions.tableAttributes = false +% \end{macrocode} +% \par +% \iffalse +%</lua,lua-cli> +%<*manual-options> + +#### Option `tableCaptions` {#table-captions} `tableCaptions` (default value: `false`) @@ -9077,7 +9840,7 @@ following content: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -9194,7 +9957,7 @@ following content: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -9314,7 +10077,7 @@ Hel% this is a comment ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the text “Hello *world*!” @@ -9376,6 +10139,9 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \directlua{ local markdown = require("markdown") local newline = [[^^J^^J]] @@ -9384,6 +10150,7 @@ following content: [[$E=mc^2$]] .. newline .. newline .. [[$$\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx$$]] tex.sprint(convert(input)) } +\endgroup \bye ``````` Then, invoke LuaTeX from the terminal: @@ -9404,9 +10171,13 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \input optionfalse \par \input optiontrue +\endgroup \bye ``````` Using a text editor, create a text document named `content.md` with the @@ -9432,11 +10203,11 @@ A PDF document named `document.pdf` should be produced and contain the following text: > \$E=mc^2\$ -> +> > \$\$\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx\$\$ > > $E=mc^2$ -> +> > $$\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx$$ ##### Plain \TeX{} Example {.unnumbered} @@ -9513,7 +10284,7 @@ $$\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^ ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -9579,6 +10350,9 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \directlua{ local markdown = require("markdown") local newline = [[^^J^^J]] @@ -9587,6 +10361,7 @@ following content: [[\\(E=mc^2\\)]] .. newline .. newline .. [[\\[\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx\\]]] tex.sprint(convert(input)) } +\endgroup \bye ``````` Then, invoke LuaTeX from the terminal: @@ -9607,9 +10382,13 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \input optionfalse \par \input optiontrue +\endgroup \bye ``````` Using a text editor, create a text document named `content.md` with the @@ -9635,11 +10414,11 @@ A PDF document named `document.pdf` should be produced and contain the following text: > \\\(E=mc^2\\) -> +> > \\\[\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx\\] > > \\(E=mc^2\\) -> +> > \\[\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx\\] ##### Plain \TeX{} Example {.unnumbered} @@ -9716,7 +10495,7 @@ following content: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -9782,6 +10561,9 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \directlua{ local markdown = require("markdown") local newline = [[^^J^^J]] @@ -9790,6 +10572,7 @@ following content: [[\(E=mc^2\)]] .. newline .. newline .. [[\[\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx\]]] tex.sprint(convert(input)) } +\endgroup \bye ``````` Then, invoke LuaTeX from the terminal: @@ -9810,9 +10593,13 @@ following content: ``` tex \input markdown \input lmfonts +\begingroup +\catcode`\%=12 +\catcode`\#=12 \input optionfalse \par \input optiontrue +\endgroup \bye ``````` Using a text editor, create a text document named `content.md` with the @@ -9838,11 +10625,11 @@ A PDF document named `document.pdf` should be produced and contain the following text: > (E=mc^2) -> +> > [\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx] > > \(E=mc^2\) -> +> > \[\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^{-i2\pi \xi x} dx\] ##### Plain \TeX{} Example {.unnumbered} @@ -9919,7 +10706,7 @@ following content: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -10010,13 +10797,13 @@ The following list is loose: - third item \end{markdown} -\begin{markdown*}{tightLists=false} +\begin{markdown}[tightLists=false] The following list is now also loose: - first item - second item - third item -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -10143,9 +10930,9 @@ following content: This is _emphasized text_ and this is a math subscript: $m\_n$. \end{markdown} -\begin{markdown*}{underscores=false} +\begin{markdown}[underscores=false] This is *emphasized text* and this is a math subscript: $m_n$. -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -10182,7 +10969,7 @@ This is *emphasized text* and this is a math subscript: $m_n$. ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -10468,6 +11255,7 @@ end % Plain \TeX{} Interface {#texinterface} %------------------------ % +% \end{markdown} % \iffalse %</tex> %<*manual-interfaces> @@ -10494,7 +11282,7 @@ following content: $\sqrt{-1}$ *equals* $i$. \markdownEnd -\def\markdownOptionHybrid{true} +\def\markdownOptionTexMathDollars{true} \markdownBegin $\sqrt{-1}$ *equals* $i$. \markdownEnd @@ -10522,6 +11310,7 @@ pdftex --shell-escape document.tex %</manual-interfaces> %<*tex> % \fi +% \begin{markdown} % % The plain \TeX{} interface provides macros for the typesetting of markdown % input from within plain \TeX{}, for setting the Lua interface options (see @@ -10605,9 +11394,11 @@ pdftex --shell-escape document.tex % \bye % ``````` % -% The \mref{markdownInput} macro accepts a single parameter with the filename -% of a markdown document and expands to the result of the conversion of the -% input markdown document to plain \TeX{}. +% You can use the \mref{markdownInput} macro to include markdown documents, +% similarly to how you might use the \mref{input} \TeX{} primitive to include +% \TeX{} documents. The \mref{markdownInput} macro accepts a single parameter +% with the filename of a markdown document and expands to the result of the +% conversion of the input markdown document to plain \TeX{}. % % \end{markdown} % \begin{macrocode} @@ -10648,12 +11439,33 @@ pdftex --shell-escape document.tex % Section <#sec:lua-options>), while some of them are specific to the plain % \TeX{} interface. % +% To determine whether plain \TeX{} is the top layer or if there are other +% layers above plain \TeX{}, we take a look on whether the +% \mdef{c_@@_top_layer_tl} token list has already been defined. If not, +% we will assume that plain \TeX{} is the top layer. +% +% \end{markdown} +% \begin{macrocode} +\ExplSyntaxOn +\tl_const:Nn \c_@@_option_layer_plain_tex_tl { plain_tex } +\cs_generate_variant:Nn + \tl_const:Nn + { NV } +\tl_if_exist:NF + \c_@@_top_layer_tl + { + \tl_const:NV + \c_@@_top_layer_tl + \c_@@_option_layer_plain_tex_tl + } +% \end{macrocode} +% \begin{markdown} +% % To enable the enumeration of plain \TeX{} options, we will maintain the % \mdef{g_\@\@_plain_tex_options_seq} sequence. % % \end{markdown} % \begin{macrocode} -\ExplSyntaxOn \seq_new:N \g_@@_plain_tex_options_seq % \end{macrocode} % \begin{markdown} @@ -10666,7 +11478,6 @@ pdftex --shell-escape document.tex % \begin{macrocode} \prop_new:N \g_@@_plain_tex_option_types_prop \prop_new:N \g_@@_default_plain_tex_options_prop -\tl_const:Nn \c_@@_option_layer_plain_tex_tl { plain_tex } \seq_gput_right:NV \g_@@_option_layers_seq \c_@@_option_layer_plain_tex_tl \cs_new:Nn \@@_add_plain_tex_option:nnn @@ -10705,6 +11516,90 @@ following code in your plain \TeX{} document: % \par % \begin{markdown} % +% The plain \TeX{} options may be also be specified via the \mdef{markdownSetup} +% macro. Here, the plain \TeX{} options are represented by a comma-delimited +% list of \meta{key}`=`\meta{value} pairs. For boolean options, the +% `=`\meta{value} part is optional, and \meta{key} will be interpreted as +% \meta{key}`=true` if the `=`\meta{value} part has been omitted. +% The \mref{markdownSetup} macro receives the options to set up as its only +% argument. +% +% \end{markdown} +% \begin{macrocode} +\cs_new:Nn + \@@_setup:n + { + \keys_set:nn + { markdown/options } + { #1 } + } +\cs_gset_eq:NN + \markdownSetup + \@@_setup:n +% \end{macrocode} +% \iffalse +%</tex> +%<*manual-options> + +Alternatively, you can also set plain \TeX{} options using the `\markdownSetup` +\TeX{} macro. For example, to set the \Opt{taskLists} Lua option to `true`, +you would include the following code in your plain \TeX{} document: + +``` tex +\markdownSetup{taskLists = true} +``` + +%</manual-options> +%<*tex> +% \fi +% \par +% \begin{markdown} +% +% The +% \mdef{markdownIfOption}`{`\meta{name}`}{`\meta{iftrue}`}{`\meta{iffalse}`}` +% macro is provided for testing, whether the value of +% `\markdownOption`\meta{name} is `true`. If the value is `true`, then +% \meta{iftrue} is expanded, otherwise \meta{iffalse} is expanded. +% +% \end{markdown} +% \begin{macrocode} +\prg_new_conditional:Nnn + \@@_if_option:n + { TF, T, F } + { + \@@_get_option_type:nN + { #1 } + \l_tmpa_tl + \str_if_eq:NNF + \l_tmpa_tl + \c_@@_option_type_boolean_tl + { + \msg_error:nnxx + { markdown } + { expected-boolean-option } + { #1 } + { \l_tmpa_tl } + } + \@@_get_option_value:nN + { #1 } + \l_tmpa_tl + \str_if_eq:NNTF + \l_tmpa_tl + \c_@@_option_value_true_tl + { \prg_return_true: } + { \prg_return_false: } + } +\msg_new:nnn + { markdown } + { expected-boolean-option } + { + Option~#1~has~type~#2,~ + but~a~boolean~was~expected. + } +\let\markdownIfOption=\@@_if_option:nTF +% \end{macrocode} +% \begin{markdown} +% %#### Finalizing and Freezing the Cache % The \mdef{markdownOptionFinalizeCache} option corresponds to the Lua % interface \Opt{finalizeCache} option, which creates an output file @@ -10777,11 +11672,9 @@ For more information, see the examples for the \Opt{finalizeCache} option. % \fi % \begin{markdown} % -% The \mdef{markdownOptionHelperScriptFileName} macro sets the filename of the -% helper Lua script file that is created during the conversion from markdown to -% plain \TeX{} in \TeX{} engines without the `\directlua` primitive. It -% defaults to `\jobname.markdown.lua`, where `\jobname` is the base name -% of the document being typeset. +% The \mdef{markdownOptionInputTempFileName} macro sets the filename of the +% temporary input file that is created during the buffering of markdown text +% from a \TeX{} source. It defaults to `\jobname.markdown.in`. % % The expansion of this macro must not contain quotation marks (`"`) or % backslash symbols (`\`). Mind that \TeX{} engines tend to @@ -10790,140 +11683,311 @@ For more information, see the examples for the \Opt{finalizeCache} option. % \end{markdown} % \begin{macrocode} \@@_add_plain_tex_option:nnn - { helperScriptFileName } + { inputTempFileName } { path } - { \jobname.markdown.lua } + { \jobname.markdown.in } % \end{macrocode} % \par % \begin{markdown} % -% The \Opt{helperScriptFileName} macro has been deprecated and -% will be removed in Markdown 3.0.0. To control the filename of the helper Lua -% script file, use the `\g_luabridge_helper_script_filename_str` macro from the -% \pkg{lt3luabridge} package. +% The \mdef{markdownOptionOutputDir} macro sets the path to the directory that +% will contain the auxiliary cache files produced by the Lua implementation and +% also the auxiliary files produced by the plain \TeX{} implementation. The +% option defaults to `.` or, since \TeX{} Live 2024, to the value of the +% `-output-directory` option of your \TeX{} engine. % -% \end{markdown} -% \begin{macrocode} -\str_new:N - \g_luabridge_helper_script_filename_str -\tl_gset:Nn - \g_luabridge_helper_script_filename_str - { \markdownOptionHelperScriptFileName } -% \end{macrocode} -% \begin{markdown} +% The path must be set to the same value as the `-output-directory` option of +% your \TeX{} engine for the package to function correctly. We need this macro +% to make the Lua implementation aware where it should store the helper files. +% The same limitations apply here as in the case of the +% \Opt{inputTempFileName} macro. % -% The \mdef{markdownOptionInputTempFileName} macro sets the filename of the -% temporary input file that is created during the buffering of markdown text -% from a \TeX{} source. It defaults to `\jobname.markdown.in`. The same -% limitations as in the case of the \Opt{helperScriptFileName} -% macro apply here. +% The \mref{markdownOptionOutputDir} macro has been deprecated and will be +% removed in the next major version of the Markdown package. <!-- After the +% macro has been removed, we should remove support for TeX Live 2023 and +% earlier, where the automatic detection does not work. --> % % \end{markdown} % \begin{macrocode} -\@@_add_plain_tex_option:nnn - { inputTempFileName } - { path } - { \jobname.markdown.in } +\cs_generate_variant:Nn + \@@_add_plain_tex_option:nnn + { nnV } % \end{macrocode} -% \par % \begin{markdown} % -% The \mdef{markdownOptionOutputTempFileName} macro sets the filename of the -% temporary output file that is created during the conversion from markdown to -% plain \TeX{} in \mref{markdownMode} other than `2` It defaults to -% `\jobname.markdown.out`. The same limitations apply here as in the case -% of the \Opt{helperScriptFileName} macro. +% Use the \pkg{lt3luabridge} library to determine the default value of the +% \mref{markdownOptionOutputDir} macro by using the environmental variable +% `TEXMF_OUTPUT_DIRECTORY` that is available since TeX~Live 2024. % % \end{markdown} % \begin{macrocode} -\@@_add_plain_tex_option:nnn - { outputTempFileName } +\ExplSyntaxOff +\input lt3luabridge.tex +\ExplSyntaxOn +\bool_if:nTF + { + \cs_if_exist_p:N + \luabridge_tl_set:Nn && + ( + \int_compare_p:nNn + { \g_luabridge_method_int } + = + { \c_luabridge_method_directlua_int } || + \sys_if_shell_unrestricted_p: + ) + } + { + \luabridge_tl_set:Nn + \l_tmpa_tl + { print(os.getenv("TEXMF_OUTPUT_DIRECTORY") or ".") } + } + { + \tl_set:Nn + \l_tmpa_tl + { . } + } +\@@_add_plain_tex_option:nnV + { outputDir } { path } - { \jobname.markdown.out } + \l_tmpa_tl % \end{macrocode} -% \par +% \iffalse +%</tex> +%<*manual-options> + +The plain \TeX{} interface provides the following commands that you can use to +specify the location of temporary files produced during the conversion from +Markdown to \TeX{}: + +- `\markdownOptionInputTempFileName`, +- `\markdownOptionOutputDir`, +- `\markdownOptionCacheDir`, and +- `\markdownOptionFrozenCacheFileName`. + +The `\markdownOptionCacheDir` and `\markdownOptionFrozenCacheFileName` commands +correspond to the `cacheDir` and `frozenCacheFileName` Lua options. + +Using a text editor, create a folder named `output-directory` and a text +document named `document.tex` with the following content: +``` tex +\input lmfonts +\input markdown +\def\markdownOptionInputTempFileName{temporary-input.md} +\def\markdownOptionOutputDir{output-directory} +\def\markdownOptionCacheDir{output-directory/cache-directory} +\def\markdownOptionEagerCache{true} +\def\markdownOptionFinalizeCache{true} +\def\markdownOptionFrozenCacheFileName{output-directory/cache-directory/frozen-cache.tex} +\markdownBegin +Hello *world*! +\markdownEnd +\bye +``````` +Next, invoke LuaTeX from the terminal: +``` sh +luatex --output-directory output-directory document.tex +`````` +A text document named `temporary-input.md` should be produced in the folder +named `output-directory` and contain the following text: + +> Hello \*world\*! + +A folder named `output-directory/cache-directory` should also be produced and +contain fragments of the converted markdown document. LuaTeX does not need +other temporary files to perform the conversion from markdown to \TeX{}. To +produce the remaining temporary files, invoke pdfTeX from the terminal: +``` sh +pdftex --output-directory output-directory --shell-escape document.tex +`````` +Text document named `temporary-output.md` should be produced in the folder +named `output-directory`. The document will contain the input markdown +document converted to \TeX{}. + +% \fi % \begin{markdown} -% -% The \Opt{outputTempFileName} macro has been deprecated and -% will be removed in Markdown 3.0.0. -% + +#### No default token renderer prototypes {#plain} + +The Markdown package provides default definitions for token renderer prototypes +using the `witiko/markdown/defaults` +% theme (see Section~<sec:#themes>). +% \iffalse +theme. +% \fi +Although these default definitions provide a useful starting point for authors, +they use extra resources, especially with higher-level \TeX{} formats such as +\LaTeX{} and \Hologo{ConTeXt}. Furthermore, the default definitions may change +at any time, which may pose a problem for maintainers of Markdown themes and +templates who may require a stable output. + +The \mdef{markdownOptionPlain} macro specifies whether higher-level \TeX{} +formats should only use the plain \TeX{} default definitions or whether they +should also use the format-specific default definitions. Whereas plain \TeX{} +default definitions only provide definitions for simple elements such as +emphasis, strong emphasis, and paragraph separators, format-specific default +definitions add support for more complex elements such as lists, tables, and +citations. On the flip side, plain \TeX{} default definitions load no extra +resources and are rather stable, whereas format-specific default definitions +load extra resources and are subject to a more rapid change. + +Here is how you would enable the macro in a \LaTeX{} document: + +``` tex +\usepackage[plain]{markdown} +``````` + +Here is how you would enable the macro in a \Hologo{ConTeXt} document: + +``` tex +\def\markdownOptionPlain{true} +\usemodule[t][markdown] +``````` + +The macro must be set before or during the loading of the package. Setting the +macro after loading the package has no effect. + % \end{markdown} +% \iffalse +%</manual-options> +%<*tex> +% \fi % \begin{macrocode} -\str_new:N - \g_luabridge_standard_output_filename_str -\tl_gset:Nn - \g_luabridge_standard_output_filename_str - { \markdownOptionOutputTempFileName } +\@@_add_plain_tex_option:nnn + { plain } + { boolean } + { false } % \end{macrocode} +% \iffalse +%</tex> +%<*manual-options> +% \fi % \begin{markdown} -% -% The \mdef{markdownOptionErrorTempFileName} macro sets the filename of the -% temporary output file that is created when a Lua error is encountered during -% the conversion from markdown to plain \TeX{} in \mref{markdownMode} other than -% `2`. It defaults to `\jobname.markdown.err`. The same limitations -% apply here as in the case of the \Opt{helperScriptFileName} -% macro. -% + +The \mdef{markdownOptionNoDefaults} macro specifies whether we should prevent +the loading of default definitions or not. This is useful in contexts, where +we want to have total control over how all elements are rendered. + +Here is how you would enable the macro in a \LaTeX{} document: + +``` tex +\usepackage[noDefaults]{markdown} +``````` + +Here is how you would enable the macro in a \Hologo{ConTeXt} document: + +``` tex +\def\markdownOptionNoDefaults{true} +\usemodule[t][markdown] +``````` + +The macro must be set before or during the loading of the package. Setting the +macro after loading the package has no effect. + % \end{markdown} +% \iffalse +%</manual-options> +%<*tex> +% \fi % \begin{macrocode} \@@_add_plain_tex_option:nnn - { errorTempFileName } - { path } - { \jobname.markdown.err } + { noDefaults } + { boolean } + { false } % \end{macrocode} -% \par % \begin{markdown} % -% The \Opt{errorTempFileName} macro has been deprecated and -% will be removed in Markdown 3.0.0. To control the filename of the temporary -% file for Lua errors, use the `\g_luabridge_error_output_filename_str` macro -% from the \pkg{lt3luabridge} package. +%#### Miscellaneous Options +% +% The \mdef{markdownOptionStripPercentSigns} macro controls whether a percent +% sign (`\%`) at the beginning of a line will be discarded when buffering +% Markdown input (see Section <#sec:buffering>) or not. Notably, this +% enables the use of markdown when writing \TeX{} package documentation using +% the \pkg{Doc} \LaTeX{}~package~[@mittelbach17] or similar. The recognized +% values of the macro are `true` (discard) and `false` (retain). It defaults +% to `false`. % % \end{markdown} % \begin{macrocode} -\str_new:N - \g_luabridge_error_output_filename_str -\tl_gset:Nn - \g_luabridge_error_output_filename_str - { \markdownOptionErrorTempFileName } +\seq_gput_right:Nn + \g_@@_plain_tex_options_seq + { stripPercentSigns } +\prop_gput:Nnn + \g_@@_plain_tex_option_types_prop + { stripPercentSigns } + { boolean } +\prop_gput:Nnx + \g_@@_default_plain_tex_options_prop + { stripPercentSigns } + { false } % \end{macrocode} +% \iffalse +%</tex> +%<*manual-options> + +#### Package Documentation + +The \mdef{markdownOptionStripPercentSigns} macro controls whether a percent +sign (`\%`) at the beginning of a line will be discarded when reading Markdown +input from a \TeX{} document. This enables the use of markdown when writing +\TeX{} package documentation using the [Doc \LaTeX{} package][doc] by Frank +Mittelbach. The recognized values of the macro are `true` (discard) and `false` +(retain). It defaults to `false`. + + [doc]: https://ctan.org/pkg/doc (doc – Format LaTeX documentation) + +Using a text editor, create a text document named `document.dtx` with the +following content: + + ``` tex + % \iffalse + \documentclass{ltxdoc} + \usepackage[stripPercentSigns]{markdown} + \begin{document} + \DocInput{document.dtx} + \end{document} + % \fi + % + % \begin{markdown} + % Hello *world*! + % \end{markdown} + ``````` + +Next, invoke LuaTeX from the terminal: +``` sh +lualatex document.dtx +`````` +A PDF document named `document.pdf` should be produced and contain the text +“Hello *world*!” + +%</manual-options> +%<*tex> +% \fi % \begin{markdown} % -% The \mdef{markdownOptionOutputDir} macro sets the path to the directory that -% will contain the auxiliary cache files produced by the Lua implementation and -% also the auxiliary files produced by the plain \TeX{} implementation. The -% option defaults to `.`. -% -% The path must be set to the same value as the `-output-directory` option of -% your \TeX{} engine for the package to function correctly. We need this macro -% to make the Lua implementation aware where it should store the helper files. -% The same limitations apply here as in the case of the -% \Opt{helperScriptFileName} macro. +%#### Generating Plain \TeX{} Option Macros and Key-Values % -% \end{markdown} -% \begin{macrocode} -\@@_add_plain_tex_option:nnn - { outputDir } - { path } - { . } -% \end{macrocode} -% \begin{markdown} +% We define the command \mdef{@@_define_option_commands_and_keyvals:} that +% defines plain \TeX{} macros and the key-value interface +% of the \mref{markdownSetup} macro for the above plain \TeX{} options. % -% Here, we automatically define plain \TeX{} macros for the above plain \TeX{} -% options. +% The command also defines macros and key-values that map +% directly to the options recognized by the Lua interface, such as +% \mdef{markdownOptionHybrid} for the \Opt{hybrid} Lua option (see Section +% <#sec:lua-options>), which are not processed by the plain \TeX{} +% implementation, only passed along to Lua. % -% Furthemore, we also define macros that map directly to the options recognized -% by the Lua interface, such as \mdef{markdownOptionHybrid} for the -% \Opt{hybrid} Lua option (see Section <#sec:lua-options>), which are not -% processed by the plain \TeX{} implementation, only passed along to Lua. +% Furthermore, the command also defines options and key-values +% for subsequently loaded layers that correspond to higher-level \TeX{} formats +% such as \LaTeX{} and \Hologo{ConTeXt}. % % For the macros that correspond to the non-boolean options recognized by the % Lua interface, the same limitations apply here in the case of the -% \Opt{helperScriptFileName} macro. +% \Opt{inputTempFileName} macro. % % \end{markdown} % \begin{macrocode} -\cs_new:Nn \@@_plain_tex_define_option_commands: +\cs_new:Nn + \@@_define_option_commands_and_keyvals: { \seq_map_inline:Nn \g_@@_option_layers_seq @@ -10931,19 +11995,53 @@ For more information, see the examples for the \Opt{finalizeCache} option. \seq_map_inline:cn { g_@@_ ##1 _options_seq } { - \@@_plain_tex_define_option_command:n + \@@_define_option_command:n { ####1 } +% \end{macrocode} +% \begin{markdown} +% +% To make it easier to copy-and-paste options from Pandoc [@macfarlane22] such +% as `fancy_lists`, `header_attributes`, and `pipe_tables`, we accept +% snake\\\_case in addition to camelCase variants of options. As a bonus, +% studies [@sharif10] also show that snake\\\_case is faster to read than +% camelCase. +% +% \end{markdown} +% \begin{macrocode} + \@@_with_various_cases:nn + { ####1 } + { + \@@_define_option_keyval:nnn + { ##1 } + { ####1 } + { ########1 } + } } } } -\cs_new:Nn \@@_plain_tex_define_option_command:n +\cs_new:Nn + \@@_define_option_command:n { - \@@_get_default_option_value:nN - { #1 } - \l_tmpa_tl - \@@_set_option_value:nV +% \end{macrocode} +% \begin{markdown} +% +% Do not override options defined before loading the package. +% +% \end{markdown} +% \begin{macrocode} + \@@_option_tl_to_csname:nN { #1 } \l_tmpa_tl + \cs_if_exist:cF + { \l_tmpa_tl } + { + \@@_get_default_option_value:nN + { #1 } + \l_tmpa_tl + \@@_set_option_value:nV + { #1 } + \l_tmpa_tl + } } \cs_new:Nn \@@_set_option_value:nn @@ -11000,140 +12098,750 @@ For more information, see the examples for the \Opt{finalizeCache} option. } } } -\@@_plain_tex_define_option_commands: +\cs_new:Nn + \@@_define_option_keyval:nnn + { + \prop_get:cnN + { g_@@_ #1 _option_types_prop } + { #2 } + \l_tmpa_tl + \str_if_eq:VVTF + \l_tmpa_tl + \c_@@_option_type_boolean_tl + { + \keys_define:nn + { markdown/options } + { +% \end{macrocode} +% \begin{markdown} +% +% For boolean options, we also accept `yes` as an alias for +% `true` and `no` as an alias for `false`. +% +% \end{markdown} +% \begin{macrocode} + #3 .code:n = { + \tl_set:Nx + \l_tmpa_tl + { + \str_case:nnF + { ##1 } + { + { yes } { true } + { no } { false } + } + { ##1 } + } + \@@_set_option_value:nV + { #2 } + \l_tmpa_tl + }, + #3 .default:n = { true }, + } + } + { + \keys_define:nn + { markdown/options } + { + #3 .code:n = { + \@@_set_option_value:nn + { #2 } + { ##1 } + }, + } + } +% \end{macrocode} +% \begin{markdown} +% +% For options of type `clist`, we assume that \meta{key} is a regular English +% noun in plural (such as `extensions`) and we also define the +% \meta{singular key}`=`\meta{value} interface, where \meta{singular key} is +% \meta{key} after stripping the trailing -s (such as `extension`). Rather +% than setting the option to \meta{value}, this interface appends \meta{value} +% to the current value as the rightmost item in the list. +% +% \end{markdown} +% \begin{macrocode} + \str_if_eq:VVT + \l_tmpa_tl + \c_@@_option_type_clist_tl + { + \tl_set:Nn + \l_tmpa_tl + { #3 } + \tl_reverse:N + \l_tmpa_tl + \str_if_eq:enF + { + \tl_head:V + \l_tmpa_tl + } + { s } + { + \msg_error:nnn + { markdown } + { malformed-name-for-clist-option } + { #3 } + } + \tl_set:Nx + \l_tmpa_tl + { + \tl_tail:V + \l_tmpa_tl + } + \tl_reverse:N + \l_tmpa_tl + \tl_put_right:Nn + \l_tmpa_tl + { + .code:n = { + \@@_get_option_value:nN + { #2 } + \l_tmpa_tl + \clist_set:NV + \l_tmpa_clist + { \l_tmpa_tl, { ##1 } } + \@@_set_option_value:nV + { #2 } + \l_tmpa_clist + } + } + \keys_define:nV + { markdown/options } + \l_tmpa_tl + } + } +\cs_generate_variant:Nn + \clist_set:Nn + { NV } +\cs_generate_variant:Nn + \keys_define:nn + { nV } +\cs_generate_variant:Nn + \@@_set_option_value:nn + { nV } +\prg_generate_conditional_variant:Nnn + \str_if_eq:nn + { en } + { F } +\msg_new:nnn + { markdown } + { malformed-name-for-clist-option } + { + Clist~option~name~#1~does~not~end~with~-s. + } % \end{macrocode} +% \begin{markdown} +% +% If plain \TeX{} is the top layer, we use the +% \mref{@@_define_option_commands_and_keyvals:} macro to define plain \TeX{} +% option macros and key-values immediately. Otherwise, we +% postpone the definition until the upper layers have been loaded. % +% \end{markdown} +% \begin{macrocode} +\str_if_eq:VVT + \c_@@_top_layer_tl + \c_@@_option_layer_plain_tex_tl + { + \@@_define_option_commands_and_keyvals: + } +\ExplSyntaxOff +% \end{macrocode} % \iffalse %</tex> %<*manual-options> +% \fi +% \begin{markdown} -The plain \TeX{} interface provides the following commands that you can use to -specify the location of temporary files produced during the conversion from -Markdown to \TeX{}: +### Themes {#themes} -- `\markdownOptionHelperScriptFileName`, -- `\markdownOptionInputTempFileName`, -- `\markdownOptionOutputTempFileName`, -- `\markdownOptionErrorTempFileName`, -- `\markdownOptionOutputDir`, -- `\markdownOptionCacheDir`, and -- `\markdownOptionFrozenCacheFileName`. +User-defined themes for the Markdown package provide a domain-specific +interpretation of Markdown tokens. Themes allow the authors to achieve +a specific look and other high-level goals without low-level programming. -The `\markdownOptionCacheDir` and `\markdownOptionFrozenCacheFileName` commands -correspond to the `cacheDir` and `frozenCacheFileName` Lua options. +% The key-values `theme`=\meta{theme name} and `import`=\meta{theme name} load +% a \TeX{} document (further referred to as *a theme*) named +% `markdowntheme`\meta{munged theme name}`.tex`, where the *munged theme name* +% is the *theme name* after the substitution of all forward slashes (`/`) for +% an underscore (`_`). The theme name is *qualified* and contains no +% underscores. A theme name is qualified if and only if it contains at least +% one forward slash. Themes are inspired by the Beamer \LaTeX{} package, which +% provides similar functionality with its `\usetheme` macro [@tantau21, Section +% 15.1]. +% +% Theme names must be qualified to minimize naming conflicts between different +% themes with a similar purpose. The preferred format of a theme name is +% \meta{theme author}`/`\meta{theme purpose}`/`\meta{private naming +% scheme}, where the *private naming scheme* may contain additional forward +% slashes. For example, a theme by a user `witiko` for the MU theme of the +% Beamer document class may have the name `witiko/beamer/MU`. +% +% Theme names are munged to allow structure inside theme names without +% dictating where the themes should be located inside the \TeX{} directory +% structure. For example, loading a theme named `witiko/beamer/MU` would +% load a \TeX{} document package named `markdownthemewitiko_beamer_MU.tex`. +% +% \end{markdown} +% \iffalse +%</manual-options> +%<*tex> +% \fi +% \begin{macrocode} +\ExplSyntaxOn +\keys_define:nn + { markdown/options } + { + theme .code:n = { + \@@_set_theme:n + { #1 } + }, + import .code:n = { + \tl_set:Nn + \l_tmpa_tl + { #1 } +% \end{macrocode} +% \begin{markdown} +% +% To ensure that keys containing forward slashes get passed correctly, we +% replace all forward slashes in the input with backslash tokens with category +% code letter and then undo the replacement. This means that if any unbraced +% backslash tokens with category code letter exist in the input, they will be +% replaced with forward slashes. However, this should be extremely rare. +% +% \end{markdown} +% \begin{macrocode} + \tl_replace_all:NnV + \l_tmpa_tl + { / } + \c_backslash_str + \keys_set:nV + { markdown/options/import } + \l_tmpa_tl + }, + } +% \end{macrocode} +% \begin{markdown} +% +% To keep track of the current theme when themes are nested, we will +% maintain the \mdef{g_\@\@_themes_seq} stack of theme names. +% For convenience, the name of the current theme is also available in the +% \mdef{g_@@_current_theme_tl} macro. +% +% \end{markdown} +% \begin{macrocode} +\seq_new:N + \g_@@_themes_seq +\tl_new:N + \g_@@_current_theme_tl +\tl_gset:Nn + \g_@@_current_theme_tl + { } +\seq_gput_right:NV + \g_@@_themes_seq + \g_@@_current_theme_tl +\cs_new:Nn + \@@_set_theme:n + { +% \end{macrocode} +% \begin{markdown} +% +% First, we validate the theme name. +% +% \end{markdown} +% \begin{macrocode} + \str_if_in:nnF + { #1 } + { / } + { + \msg_error:nnn + { markdown } + { unqualified-theme-name } + { #1 } + } + \str_if_in:nnT + { #1 } + { _ } + { + \msg_error:nnn + { markdown } + { underscores-in-theme-name } + { #1 } + } +% \end{macrocode} +% \begin{markdown} +% +% Next, we munge the theme name. +% +% \end{markdown} +% \begin{macrocode} + \str_set:Nn + \l_tmpa_str + { #1 } + \str_replace_all:Nnn + \l_tmpa_str + { / } + { _ } +% \end{macrocode} +% \begin{markdown} +% +% Finally, we load the theme. +% +% \end{markdown} +% \begin{macrocode} + \tl_gset:Nn + \g_@@_current_theme_tl + { #1 / } + \seq_gput_right:NV + \g_@@_themes_seq + \g_@@_current_theme_tl + \@@_load_theme:nV + { #1 } + \l_tmpa_str + \seq_gpop_right:NN + \g_@@_themes_seq + \l_tmpa_tl + \seq_get_right:NN + \g_@@_themes_seq + \l_tmpa_tl + \tl_gset:NV + \g_@@_current_theme_tl + \l_tmpa_tl + } +\msg_new:nnnn + { markdown } + { unqualified-theme-name } + { Won't~load~theme~with~unqualified~name~#1 } + { Theme~names~must~contain~at~least~one~forward~slash } +\msg_new:nnnn + { markdown } + { underscores-in-theme-name } + { Won't~load~theme~with~an~underscore~in~its~name~#1 } + { Theme~names~must~not~contain~underscores~in~their~names } +\cs_generate_variant:Nn + \tl_replace_all:Nnn + { NnV } +\ExplSyntaxOff +% \end{macrocode} +% \iffalse +%</tex> +%<*manual-options> +% \fi +% \par +% \begin{markdown} -Using a text editor, create a folder named `output-directory` and a text -document named `document.tex` with the following content: +Built-in plain \TeX{} themes provided with the Markdown package include: + +\pkg{witiko/tilde} + +: A theme that makes tilde (`~`) always typeset the non-breaking space even + when the \Opt{hybrid} Lua option is disabled. +% ``` tex +% \input markdown +% \markdownSetup{import=witiko/tilde} +% \markdownBegin +% Bartel~Leendert van~der~Waerden +% \markdownEnd +% \bye +% ``````` +% Typesetting the above document produces the following text: +% “Bartel~Leendert van~der~Waerden”. +% +% \end{markdown} +% \iffalse + +##### Plain \TeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: ``` tex -\input lmfonts \input markdown -\def\markdownOptionHelperScriptFileName{helper-script.lua} -\def\markdownOptionInputTempFileName{temporary-input.md} -\def\markdownOptionOutputTempFileName{temporary-output.tex} -\def\markdownOptionErrorTempFileName{error-output.txt} -\def\markdownOptionOutputDir{output-directory} -\def\markdownOptionCacheDir{output-directory/cache-directory} -\markdownOptionFinalizeCachetrue -\def\markdownOptionFrozenCacheFileName{output-directory/cache-directory/frozen-cache.tex} +\markdownSetup{import=witiko/tilde} \markdownBegin -Hello *world*! +Bartel~Leendert van~der~Waerden \markdownEnd \bye ``````` Next, invoke LuaTeX from the terminal: ``` sh -luatex --output-directory output-directory document.tex +luatex document.tex `````` -A text document named `temporary-input.md` should be produced in the folder -named `output-directory` and contain the following text: - -> Hello \*world\*! +A PDF document named `document.pdf` should be produced and contain the +following text, where the middot (`·`) denotes a non-breaking space: -A folder named `output-directory/cache-directory` should also be produced and -contain fragments of the converted markdown document. LuaTeX does not need -other temporary files to perform the conversion from markdown to \TeX{}. To -produce the remaining temporary files, invoke pdfTeX from the terminal: -``` sh -pdftex --output-directory output-directory --shell-escape document.tex -`````` -Text documents named `helper-script.lua`, and `temporary-output.md` should be -produced in the folder named `output-directory`. The document named -`helper-script.lua` will contain Lua code that was executed to convert markdown -to plain \TeX{}. The document named `temporary-output.tex` will contain the -input markdown document converted to \TeX{}. +> Bartel·Leendert van·der·Waerden -No document named `error-output.txt` should be produced in the folder named -`output-directory`. This document would only be produced if an error had occured -while executing the Lua code. If this happens, please [file a -bug](https://github.com/witiko/markdown/issues). +% \fi +% \par +% \begin{markdown} -#### Package Documentation +\pkg{witiko/markdown/defaults} -The \mdef{markdownOptionStripPercentSigns} macro controls whether a percent -sign (`\%`) at the beginning of a line will be discarded when reading Markdown -input from a \TeX{} document. This enables the use of markdown when writing -\TeX{} package documentation using the [Doc \LaTeX{} package][doc] by Frank -Mittelbach. The recognized values of the macro are `true` (discard) and `false` -(retain). It defaults to `false`. +: A plain \TeX{} theme with the default definitions of token renderer + prototypes for plain \TeX{}. This theme is loaded automatically together + with the package and explicitly loading it has no effect. - [doc]: https://ctan.org/pkg/doc (doc – Format LaTeX documentation) +% Please, see Section <#sec:themes-implementation> for implementation +% details of the built-in plain \TeX{} themes. -Using a text editor, create a text document named `document.dtx` with the -following content: +### Snippets {#snippets} - ``` tex - % \iffalse - \documentclass{ltxdoc} - \usepackage[stripPercentSigns]{markdown} - \begin{document} - \DocInput{document.dtx} - \end{document} - % \fi - % - % \begin{markdown} - % Hello *world*! - % \end{markdown} - ``````` +% \end{markdown} +% \iffalse -Next, invoke LuaTeX from the terminal: -``` sh -lualatex document.dtx -`````` -A PDF document named `document.pdf` should be produced and contain the text -“Hello *world*!” +User-defined themes provide global control over high-level goals. +However, it is often desirable to change only some local aspects of a document. +Snippets provide syntactic sugar for defining and invoking various +options locally. %</manual-options> %<*tex> % \fi +% \par % \begin{markdown} % -%#### Miscellaneous Options +% We may set up options as *snippets* using the +% \mdef{markdownSetupSnippet} macro and invoke them later. The +% \mref{markdownSetupSnippet} macro receives two arguments: the name +% of the snippet and the options to store. % -% The \mdef{markdownOptionStripPercentSigns} macro controls whether a percent -% sign (`\%`) at the beginning of a line will be discarded when buffering -% Markdown input (see Section <#sec:buffering>) or not. Notably, this -% enables the use of markdown when writing \TeX{} package documentation using -% the \pkg{Doc} \LaTeX{}~package~[@mittelbach17] or similar. The recognized -% values of the macro are `true` (discard) and `false` (retain). It defaults -% to `false`. +% \end{markdown} +% \begin{macrocode} +\ExplSyntaxOn +\prop_new:N + \g_@@_snippets_prop +\cs_new:Nn + \@@_setup_snippet:nn + { + \tl_if_empty:nT + { #1 } + { + \msg_error:nnn + { markdown } + { empty-snippet-name } + { #1 } + } + \tl_set:NV + \l_tmpa_tl + \g_@@_current_theme_tl + \tl_put_right:Nn + \l_tmpa_tl + { #1 } + \@@_if_snippet_exists:nT + { #1 } + { + \msg_warning:nnV + { markdown } + { redefined-snippet } + \l_tmpa_tl + } + \prop_gput:NVn + \g_@@_snippets_prop + \l_tmpa_tl + { #2 } + } +\cs_gset_eq:NN + \markdownSetupSnippet + \@@_setup_snippet:nn +\msg_new:nnnn + { markdown } + { empty-snippet-name } + { Empty~snippet~name~#1 } + { Pick~a~non-empty~name~for~your~snippet } +\msg_new:nnn + { markdown } + { redefined-snippet } + { Redefined~snippet~#1 } +% \end{macrocode} +% \begin{markdown} +% +% To decide whether a snippet exists, we can use the +% \mdef{markdownIfSnippetExists} macro. % % \end{markdown} % \begin{macrocode} -\seq_gput_right:Nn - \g_@@_plain_tex_options_seq - { stripPercentSigns } -\prop_gput:Nnn - \g_@@_plain_tex_option_types_prop - { stripPercentSigns } - { boolean } -\prop_gput:Nnx - \g_@@_default_plain_tex_options_prop - { stripPercentSigns } - { false } +\prg_new_conditional:Nnn + \@@_if_snippet_exists:n + { TF, T, F } + { + \tl_set:NV + \l_tmpa_tl + \g_@@_current_theme_tl + \tl_put_right:Nn + \l_tmpa_tl + { #1 } + \prop_get:NVNTF + \g_@@_snippets_prop + \l_tmpa_tl + \l_tmpb_tl + { \prg_return_true: } + { \prg_return_false: } + } +\cs_gset_eq:NN + \markdownIfSnippetExists + \@@_if_snippet_exists:nTF +% \end{macrocode} +% \begin{markdown} +% +% The option with key `snippet` invokes a snippet named \meta{value}. +% +% \end{markdown} +% \begin{macrocode} +\keys_define:nn + { markdown/options } + { + snippet .code:n = { + \tl_set:NV + \l_tmpa_tl + \g_@@_current_theme_tl + \tl_put_right:Nn + \l_tmpa_tl + { #1 } + \@@_if_snippet_exists:nTF + { #1 } + { + \prop_get:NVN + \g_@@_snippets_prop + \l_tmpa_tl + \l_tmpb_tl + \@@_setup:V + \l_tmpb_tl + } + { + \msg_error:nnV + { markdown } + { undefined-snippet } + \l_tmpa_tl + } + } + } +\msg_new:nnn + { markdown } + { undefined-snippet } + { Can't~invoke~undefined~snippet~#1 } +\cs_generate_variant:Nn + \@@_setup:n + { V } \ExplSyntaxOff % \end{macrocode} % \iffalse %</tex> +%<*manual-options> +% \fi +% \par +% \markdownBegin + +Here is how we can use snippets to store options and invoke them later +in \LaTeX{}: + +``` tex +\markdownSetupSnippet{romanNumerals}{ + renderers = { + olItemWithNumber = {% + \item[\romannumeral#1\relax.]% + }, + }, +} +\begin{markdown} + +The following ordered list will be preceded by arabic numerals: + +1. wahid +2. aithnayn + +\end{markdown} +\begin{markdown}[snippet=romanNumerals] + +The following ordered list will be preceded by roman numerals: + +3. tres +4. quattuor + +\end{markdown} +``````` + +If the `romanNumerals` snippet were defined in the `jdoe/lists` theme, +we could import the `jdoe/lists` theme and use the qualified name +`jdoe/lists/romanNumerals` to invoke the snippet: + +``` tex +\markdownSetup{import=jdoe/lists} +\begin{markdown}[snippet=jdoe/lists/romanNumerals] + +The following ordered list will be preceded by roman numerals: + +3. tres +4. quattuor + +\end{markdown} +``````` + +Alternatively, we can use the extended variant of the `import` \LaTeX{} +option that allows us to import the `romanNumerals` snippet to the +current namespace for easier access: + +``` tex +\markdownSetup{ + import = { + jdoe/lists = romanNumerals, + }, +} +\begin{markdown}[snippet=romanNumerals] + +The following ordered list will be preceded by roman numerals: + +3. tres +4. quattuor + +\end{markdown} +``````` + +Furthermore, we can also specify the name of the snippet in the current +namespace, which can be different from the name of the snippet in the +`jdoe/lists` theme. For example, we can make the snippet +`jdoe/lists/romanNumerals` available under the name `roman`. + +``` tex +\markdownSetup{ + import = { + jdoe/lists = romanNumerals as roman, + }, +} +\begin{markdown}[snippet=roman] + +The following ordered list will be preceded by roman numerals: + +3. tres +4. quattuor + +\end{markdown} +``````` + +Several themes and/or snippets can be loaded at once using the extended +variant of the `import` \LaTeX{} option: + +``` tex +\markdownSetup{ + import = { + jdoe/longpackagename/lists = { + arabic as arabic1, + roman, + alphabetic, + }, + jdoe/anotherlongpackagename/lists = { + arabic as arabic2, + }, + jdoe/yetanotherlongpackagename, + }, +} +``````` + +% \markdownEnd +% \iffalse +%</manual-options> +%<*tex> +% \fi +% \begin{macrocode} +\ExplSyntaxOn +\tl_new:N + \l_@@_import_current_theme_tl +\keys_define:nn + { markdown/options/import } + { +% \end{macrocode} +% \begin{markdown} +% +% If a theme name is given without a list of snippets to import, +% we assume that an empty list was given. +% +% \end{markdown} +% \begin{macrocode} + unknown .default:n = {}, + unknown .code:n = { +% \end{macrocode} +% \begin{markdown} +% +% To ensure that keys containing forward slashes get passed correctly, we +% replace all forward slashes in the input with backslash tokens with category +% code letter and then undo the replacement. This means that if any unbraced +% backslash tokens with category code letter exist in the input, they will be +% replaced with forward slashes. However, this should be extremely rare. +% +% \end{markdown} +% \begin{macrocode} + \tl_set_eq:NN + \l_@@_import_current_theme_tl + \l_keys_key_str + \tl_replace_all:NVn + \l_@@_import_current_theme_tl + \c_backslash_str + { / } +% \end{macrocode} +% \begin{markdown} +% +% Here, we import the snippets. +% +% \end{markdown} +% \begin{macrocode} + \clist_map_inline:nn + { #1 } + { + \regex_extract_once:nnNTF + { ^(.*?)\s+as\s+(.*?)$ } + { ##1 } + \l_tmpa_seq + { + \seq_pop:NN + \l_tmpa_seq + \l_tmpa_tl + \seq_pop:NN + \l_tmpa_seq + \l_tmpa_tl + \seq_pop:NN + \l_tmpa_seq + \l_tmpb_tl + } + { + \tl_set:Nn + \l_tmpa_tl + { ##1 } + \tl_set:Nn + \l_tmpb_tl + { ##1 } + } + \tl_put_left:Nn + \l_tmpa_tl + { / } + \tl_put_left:NV + \l_tmpa_tl + \l_@@_import_current_theme_tl + \@@_setup_snippet:Vx + \l_tmpb_tl + { snippet = { \l_tmpa_tl } } + } +% \end{macrocode} +% \begin{markdown} +% +% Here, we load the theme. +% +% \end{markdown} +% \begin{macrocode} + \@@_set_theme:V + \l_@@_import_current_theme_tl + }, + } +\cs_generate_variant:Nn + \tl_replace_all:Nnn + { NVn } +\cs_generate_variant:Nn + \@@_set_theme:n + { V } +\cs_generate_variant:Nn + \@@_setup_snippet:nn + { Vx } +% \end{macrocode} +% \iffalse +%</tex> %<*manual-tokens> ## Markdown Tokens @@ -11200,19 +12908,25 @@ In this section, I will describe the individual token renderers. % \begin{markdown} #### Attribute Renderers -The following macros are only produced, when the \Opt{headerAttributes} option -is enabled. +The following macros are only produced, when at least one of the following +options for markdown attributes on different elements is enabled: + +- \Opt{autoIdentifiers} +- \Opt{fencedCodeAttributes} +- \Opt{gfmAutoIdentifiers} +- \Opt{headerAttributes} +- \Opt{inlineCodeAttributes} +- \Opt{linkAttributes} \mdef{markdownRendererAttributeIdentifier} represents the \meta{identifier} of a markdown element (`id="`\meta{identifier}`"` in HTML and `#`\meta{identifier} -in Markdown's \Opt{headerAttributes} syntax extension). The macro receives a -single attribute that corresponds to the \meta{identifier}. +in markdown attributes). The macro receives a single attribute that corresponds +to the \meta{identifier}. \mdef{markdownRendererAttributeClassName} represents the \meta{class name} of a markdown element (`class="`\meta{class name} ...`"` in HTML and -`.`\meta{class name} in Markdown's \Opt{headerAttributes} syntax extension). -The macro receives a single attribute that corresponds to the \meta{class -name}. +`.`\meta{class name} in markdown attributes). The macro receives a single +attribute that corresponds to the \meta{class name}. \mdef{markdownRendererAttributeKeyValue} represents a HTML attribute in the form \meta{key}`=`\meta{value} that is neither an identifier nor a class name. @@ -11468,7 +13182,7 @@ A quote from William Shakespeare's King Lear: ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -11512,8 +13226,8 @@ enabled. The \mdef{markdownRendererBracketedSpanAttributeContextBegin} and \mdef{markdownRendererBracketedSpanAttributeContextEnd} macros represent the -beginning and the end of an inline bracketed span in which the attributes of -the span apply. The macros receive no arguments. +beginning and the end of a context in which the attributes of +an inline bracketed span apply. The macros receive no arguments. % \end{markdown} % @@ -11834,7 +13548,7 @@ following content: \usepackage[tightLists]{markdown} \begin{document} -\begin{markdown*}{ +\begin{markdown}[ renderers = { interblockSeparator = {}, ulBeginTight = { (}, @@ -11847,15 +13561,15 @@ following content: ulItemEnd = {}, ulEndTight = {).}, }, -} +] This is a tight list - the first item - the second item - the third item -\end{markdown*} +\end{markdown} -\begin{markdown*}{ +\begin{markdown}[ renderers = { interblockSeparator = {% :\par @@ -11866,7 +13580,7 @@ This is a tight list ulItemEnd = {.}, ulEnd = {\end{itemize}}, }, -} +] This is a loose list - This is the first item @@ -11874,7 +13588,7 @@ This is a loose list - This is the second item - This is the third item -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -11946,7 +13660,7 @@ This is a loose list ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -11987,6 +13701,194 @@ following text: % % \begin{markdown} +#### Citation Renderers +The \mdef{markdownRendererCite} macro represents a string of one or more +parenthetical citations. This macro will only be produced, when the +\Opt{citations} option is enabled. The macro receives the parameter +`{`\meta{number of citations}`}` followed by \meta{suppress author} +`{`\meta{prenote}`}{`\meta{postnote}`}{`\meta{name}`}` repeated +\meta{number of citations} times. The \meta{suppress author} parameter is +either the token `-`, when the author's name is to be suppressed, or `+` +otherwise. + +% \end{markdown} +% +% \iffalse + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage[citations]{markdown} +\newcount\citationsCounter +\newcount\citationsTotal +\makeatletter +\def\citations#1#2#3#4{% + a parenthesized citation \emph{#4} + \advance\citationsCounter by 1\relax + \ifx\relax#2\relax + \ifx\relax#3\relax\else + with a postfix \emph{#3}% + \fi + \else + with a prefix \emph{#2}% + \ifx\relax#3\relax\else + \ and a postfix \emph{#3}% + \fi + \fi + \ifnum\citationsCounter>\citationsTotal\relax + .% + \expandafter\@gobble + \else + , and + \fi\citations} +\makeatother +\markdownSetup{ + renderers = { + cite = {% + \citationsCounter=1% + \citationsTotal=#1% + This is + \expandafter\citations + }, + }, +} +\begin{document} +\begin{markdown} +[see @abrahams90, pp. 12; @eijkhout91, pp. 34] +\end{markdown} +\end{document} +``````` +Next, invoke LuaTeX from the terminal: +``` sh +lualatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> This is a parenthesized citation *abrahams90* with a prefix see +> and a postfix *pp. 12*, and a citation *eijkhout91* with a +> postfix *pp. 34*. + +%</manual-tokens> +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererCite{% + \markdownRendererCitePrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { cite } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { cite } + { 1 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +%</tex> +%<*manual-tokens> +% \fi +% +% \begin{markdown} + +The \mdef{markdownRendererTextCite} macro represents a string of one or more +text citations. This macro will only be produced, when the +\Opt{citations} option is enabled. The macro receives parameters in the same +format as the \mref{markdownRendererCite} macro. + +% \end{markdown} +% +% \iffalse + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage[citations]{markdown} +\newcount\citationsCounter +\newcount\citationsTotal +\makeatletter +\def\citations#1#2#3#4{% + a text citation \emph{#4} + \advance\citationsCounter by 1\relax + \ifx\relax#2\relax + \ifx\relax#3\relax\else + with a postfix \emph{#3}% + \fi + \else + with a prefix \emph{#2}% + \ifx\relax#3\relax\else + \ and a postfix \emph{#3}% + \fi + \fi + \ifnum\citationsCounter>\citationsTotal\relax + .% + \expandafter\@gobble + \else + , and + \fi\citations} +\makeatother +\markdownSetup{ + renderers = { + textCite = {% + \citationsCounter=1% + \citationsTotal=#1% + This is + \expandafter\citations + }, + }, +} +\begin{document} +\begin{markdown} +@abrahams90 [pp. 12; also @eijkhout91] +\end{markdown} +\end{document} +``````` +Next, invoke LuaTeX from the terminal: +``` sh +lualatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> This is a text citation *abrahams90* with a postfix *pp. 12*, +> and a citation *eijkhout91* with a prefix *also*. + +%</manual-tokens> +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererTextCite{% + \markdownRendererTextCitePrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { textCite } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { textCite } + { 1 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +%</tex> +%<*manual-tokens> +% \fi +% +% \begin{markdown} + #### Code Block Renderers The \mdef{markdownRendererInputVerbatim} macro represents a code block. The macro receives a single argument that corresponds to the @@ -12023,8 +13925,10 @@ filename of a file contaning the code block contents. The \mdef{markdownRendererInputFencedCode} macro represents a fenced code block. This macro will only be produced, when the \Opt{fencedCode} option is -enabled. The macro receives two arguments that correspond to the filename of -a file contaning the code block contents and to the code fence infostring. +enabled. The macro receives three arguments that correspond to the filename of +a file contaning the code block contents, the fully escaped code fence infostring +that can be directly typeset, and the raw code fence infostring that can be used +outside typesetting. % \end{markdown} % @@ -12125,7 +14029,7 @@ following text except for the filename, which may differ: \prop_gput:Nnn \g_@@_renderer_arities_prop { inputFencedCode } - { 2 } + { 3 } \ExplSyntaxOff % \end{macrocode} % \par @@ -12203,9 +14107,9 @@ following content: $\sqrt{-1}$ *equals* $i$ \end{markdown} -\begin{markdown*}{hybrid} +\begin{markdown}[hybrid] $\sqrt{-1}$ *equals* $i$ -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -12248,7 +14152,7 @@ $\sqrt{-1}$ *equals* $i$ ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -12293,8 +14197,8 @@ option is enabled. The \mdef{markdownRendererCodeSpanAttributeContextBegin} and \mdef{markdownRendererCodeSpanAttributeContextEnd} macros represent the beginning -and the end of an inline code span in which the attributes of the inline code -span apply. The macros receive no arguments. +and the end of a context in which the attributes of an inline code span apply. +The macros receive no arguments. % \end{markdown} % @@ -12370,7 +14274,7 @@ following text: #### Content Block Renderers {#texcontentblockrenderers} -The \mdef{markdownRendererContentBlock} macro represents an iA\,Writer content +The \mdef{markdownRendererContentBlock} macro represents an iA\\,Writer content block. It receives four arguments: the local file or online image filename extension cast to the lower case, the fully escaped \acro{uri} that can be directly typeset, the raw \acro{uri} that can be used outside typesetting, @@ -12406,7 +14310,7 @@ and the title of the content block. % \begin{markdown} The \mdef{markdownRendererContentBlockOnlineImage} macro represents an -iA\,Writer online image content block. The macro receives the same arguments +iA\\,Writer online image content block. The macro receives the same arguments as \mref{markdownRendererContentBlock}. % \end{markdown} @@ -12438,7 +14342,7 @@ as \mref{markdownRendererContentBlock}. % % \begin{markdown} -The \mdef{markdownRendererContentBlockCode} macro represents an iA\,Writer +The \mdef{markdownRendererContentBlockCode} macro represents an iA\\,Writer content block that was recognized as a file in a known programming language by its filename extension $s$. If any `markdown-languages.json` file found by \pkg{kpathsea}^[Filenames other than `markdown-languages.json` may @@ -12593,7 +14497,7 @@ content: `````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -12996,7 +14900,7 @@ following content: \usepackage[definitionLists, tightLists]{markdown} \begin{document} -\begin{markdown*}{ +\begin{markdown}[ renderers = { interblockSeparator = {% :% @@ -13018,7 +14922,7 @@ following content: dlDefinitionBegin = \item, dlEndTight = {\end{description}}, }, -} +] This is a tight definition list Coffee @@ -13030,9 +14934,9 @@ Milk : white cold drink : nutrient-rich : produced on an industrial scale -\end{markdown*} +\end{markdown} -\begin{markdown*}{ +\begin{markdown}[ renderers = { interblockSeparator = {% \def\markdownRendererInterblockSeparator{\par}% @@ -13051,7 +14955,7 @@ Milk dlDefinitionEnd = {}, dlEnd = {.}, }, -} +] This is a loose definition list Coffee @@ -13069,7 +14973,7 @@ Milk : nutrient-rich : produced on an industrial scale -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -13187,7 +15091,7 @@ Milk ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -13311,7 +15215,7 @@ The secret word is ... ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -13356,6 +15260,39 @@ span of text. % \end{markdown} % % \iffalse +%</manual-tokens> +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererEmphasis{% + \markdownRendererEmphasisPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { emphasis } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { emphasis } + { 1 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +%</tex> +%<*manual-tokens> +% \fi +% +% \begin{markdown} + +The \mdef{markdownRendererStrongEmphasis} macro represents a strongly +emphasized span of text. The macro receives a single argument that +corresponds to the emphasized span of text. + +% \end{markdown} +% +% \iffalse ##### Plain \TeX{} Example {.unnumbered} @@ -13433,7 +15370,7 @@ This is **strong emphasis**. ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -13447,39 +15384,6 @@ following text: % \fi % % \begin{macrocode} -\def\markdownRendererEmphasis{% - \markdownRendererEmphasisPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { emphasis } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { emphasis } - { 1 } -\ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -%</tex> -%<*manual-tokens> -% \fi -% -% \begin{markdown} - -The \mdef{markdownRendererStrongEmphasis} macro represents a strongly -emphasized span of text. The macro receives a single argument that -corresponds to the emphasized span of text. - -% \end{markdown} -% -% \iffalse -%</manual-tokens> -%<*tex> -% \fi -% -% \begin{macrocode} \def\markdownRendererStrongEmphasis{% \markdownRendererStrongEmphasisPrototype}% \ExplSyntaxOn @@ -13606,7 +15510,7 @@ enabled. The \mdef{markdownRendererFencedDivAttributeContextBegin} and \mdef{markdownRendererFencedDivAttributeContextEnd} macros represent the beginning -and the end of a div in which the attributes of the div apply. The macros +and the end of a context in which the attributes of a div apply. The macros receive no arguments. % \end{markdown} @@ -13721,12 +15625,12 @@ following text: % \begin{markdown} #### Header Attribute Context Renderers -The following macros are only produced, when the \Opt{headerAttributes} option -is enabled. +The following macros are only produced, when the \Opt{autoIdentifiers}, +\Opt{gfmAutoIdentifiers}, or \Opt{headerAttributes} options are enabled. The \mdef{markdownRendererHeaderAttributeContextBegin} and \mdef{markdownRendererHeaderAttributeContextEnd} macros represent the beginning -and the end of a section in which the attributes of a heading apply. The macros +and the end of a context in which the attributes of a heading apply. The macros receive no arguments. % \end{markdown} @@ -13790,13 +15694,6 @@ following text: %</manual-tokens> %<*tex> % \fi -% \begin{markdown} -% -% These semantics have been deprecated and will be changed in Markdown 3.0.0. -% From then on, header attribute contexts will only span headings, not the -% surrounding sections. -% -% \end{markdown} % \begin{macrocode} \def\markdownRendererHeaderAttributeContextBegin{% \markdownRendererHeaderAttributeContextBeginPrototype}% @@ -14096,7 +15993,7 @@ following content: ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -14129,17 +16026,13 @@ following text: % % \begin{markdown} -#### HTML Comment Renderers +#### Inline HTML Comment Renderer The \mdef{markdownRendererInlineHtmlComment} macro represents the contents of an inline \acro{HTML} comment. This macro will only be produced, when the \Opt{html} option is enabled. The macro receives a single argument that corresponds to the contents of the \acro{HTML} comment. -The \mdef{markdownRendererBlockHtmlCommentBegin} and -\mdef{markdownRendererBlockHtmlCommentEnd} macros represent the beginning -and the end of a block \acro{HTML} comment. The macros receive no arguments. - % \end{markdown} % % \iffalse @@ -14155,8 +16048,6 @@ following content: \markdownSetup{ renderers = { inlineHtmlComment = {\marginnote{#1}}, - blockHtmlCommentBegin = {\begin{quote}}, - blockHtmlCommentEnd = {\end{quote}}, }, } \begin{document} @@ -14164,14 +16055,6 @@ following content: A useful use of inline HTML comments are side notes. <!-- Side notes are displayed in the horizontal margins next to the relevant passages, which makes them *easier for the reader to find* than notes. --> - -We can render block HTML comments as blockquotes: - -<!-- -Here is a block HTML comment with a code example that a programmer might understand: - - foo = bar + baz - 42 ---> \end{markdown} \end{document} ``````` @@ -14184,13 +16067,6 @@ A PDF document named `document.pdf` should be produced and contain the following body text: > A useful use of HTML comments are side notes. -> -> We can render block HTML comments as blockquotes: -> -> > Here is a block HTML comment with a code example that a programmer might -> > understand: -> > -> > foo = bar + baz - 42 The horizontal margins should contain the following text: @@ -14213,28 +16089,6 @@ The horizontal margins should contain the following text: { inlineHtmlComment } { 1 } \ExplSyntaxOff -\def\markdownRendererBlockHtmlCommentBegin{% - \markdownRendererBlockHtmlCommentBeginPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { blockHtmlCommentBegin } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { blockHtmlCommentBegin } - { 0 } -\ExplSyntaxOff -\def\markdownRendererBlockHtmlCommentEnd{% - \markdownRendererBlockHtmlCommentEndPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { blockHtmlCommentEnd } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { blockHtmlCommentEnd } - { 0 } -\ExplSyntaxOff % \end{macrocode} % \par % @@ -14374,7 +16228,7 @@ following content: }^^A {^^A \everyeof={\noexpand}^^A - \edef\filename{\@@input"\jobname.fetched" }^^A + \edef\filename{\@@@@input"\jobname.fetched" }^^A \includegraphics[width=\textwidth]{\filename}^^A }^^A } @@ -14429,7 +16283,7 @@ is enabled. The \mdef{markdownRendererImageAttributeContextBegin} and \mdef{markdownRendererImageAttributeContextEnd} macros represent the beginning -and the end of an image in which the attributes of the image apply. The macros +and the end of a context in which the attributes of an image apply. The macros receive no arguments. % \end{markdown} @@ -14504,9 +16358,10 @@ following text: % % \begin{markdown} -#### Interblock Separator Renderer -The \mdef{markdownRendererInterblockSeparator} macro represents a separator -between two markdown block elements. The macro receives no arguments. +#### Interblock Separator Renderers +The \mdef{markdownRendererInterblockSeparator} macro represents an interblock +separator between two markdown block elements. The macro receives no +arguments. % \end{markdown} % @@ -14524,7 +16379,7 @@ following content: \par } \markdownBegin -Hello *world*! +- Hello *world*! _Foo_ bar! \markdownEnd @@ -14537,7 +16392,7 @@ luatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> Hello *world*! +> - Hello *world*! > > *(The end of a block)* > @@ -14561,7 +16416,7 @@ following content: } \begin{document} \begin{markdown} -Hello *world*! +- Hello *world*! _Foo_ bar! \end{markdown} @@ -14574,7 +16429,7 @@ lualatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> Hello *world*! +> - Hello *world*! > > *(The end of a block)* > @@ -14593,7 +16448,7 @@ following content: } \starttext \startmarkdown -Hello *world*! +- Hello *world*! _Foo_ bar! \stopmarkdown @@ -14601,12 +16456,12 @@ _Foo_ bar! ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: -> Hello *world*! +> - Hello *world*! > > *(The end of a block)* > @@ -14638,7 +16493,82 @@ following text: % % \begin{markdown} -#### Line Block Renderer +Users can use more than one blank line to delimit two block to indicate the +end of a series of blocks that make up a logical paragraph. This produces a +paragraph separator instead of an interblock separator. Between some blocks, +such as markdown paragraphs, a paragraph separator is always produced. + +The \mdef{markdownRendererParagraphSeparator} macro represents a paragraph +separator. The macro receives no arguments. + +% \end{markdown} +% +% \iffalse + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage{markdown} +\markdownSetup{ + renderers = { + paragraphSeparator = {% + \par + \emph{(The end of a paragraph)}% + \par + }, + }, +} +\begin{document} +\begin{markdown} +Hello *world*! + +_Foo_ bar! +\end{markdown} +\end{document} +``````` +Next, invoke LuaTeX from the terminal: +``` sh +lualatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> Hello *world*! +> +> *(The end of a paragraph)* +> +> _Foo_ bar! + +%</manual-tokens> +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererParagraphSeparator{% + \markdownRendererParagraphSeparatorPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { paragraphSeparator } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { paragraphSeparator } + { 0 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +%</tex> +%<*manual-tokens> +% \fi +% +% \begin{markdown} + +#### Line Block Renderers The following macros are only produced, when the \Opt{lineBlocks} option is enabled. @@ -14722,7 +16652,7 @@ following content: ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -14769,7 +16699,114 @@ following text: % % \begin{markdown} -#### Line Break Renderer +#### Line Break Renderers + +The \mdef{markdownRendererSoftLineBreak} macro represents a soft line break. +The macro receives no arguments. + +% \end{markdown} +% +% \iffalse + +##### Plain \TeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\input markdown +\def\markdownRendererSoftLineBreak{% + \par + {\it(A soft line break)}% + \par +} +\markdownInput{example.md} +\bye +``````` +Using a text editor, create a text document named `example.md` with the +following content: + +``` md +Hello world! +_Foo_ bar! +`````` +Next, invoke LuaTeX from the terminal: +``` sh +luatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> Hello *world*! +> +> *(A soft line break)* +> +> _Foo_ bar! + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage{markdown} +\markdownSetup{ + renderers = { + softLineBreak = {% + \par + \emph{(A soft line break)}% + \par + }, + }, +} +\begin{document} +\markdownInput{example.md} +\end{document} +``````` +Using a text editor, create a text document named `example.md` with the +following content: + +``` md +Hello world! +_Foo_ bar! +`````` +Next, invoke LuaTeX from the terminal: +``` sh +lualatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> Hello *world*! +> +> *(A soft line break)* +> +> _Foo_ bar! + +%</manual-tokens> +%<*tex> +% \fi +% \begin{macrocode} +\def\markdownRendererSoftLineBreak{% + \markdownRendererSoftLineBreakPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { softLineBreak } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { softLineBreak } + { 0 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +%</tex> +%<*manual-tokens> +% \fi +% +% \begin{markdown} + The \mdef{markdownRendererHardLineBreak} macro represents a hard line break. The macro receives no arguments. @@ -14856,51 +16893,10 @@ following text: %</manual-tokens> %<*tex> % \fi -% \begin{markdown} -% -% The \mdef{markdownRendererLineBreak} and -% \mdef{markdownRendererLineBreakPrototype} macros have been deprecated -% and will be removed in Markdown 3.0.0. -% -% \end{markdown} % \begin{macrocode} +\def\markdownRendererHardLineBreak{% + \markdownRendererHardLineBreakPrototype}% \ExplSyntaxOn -\cs_new:Npn - \markdownRendererHardLineBreak - { - \cs_if_exist:NTF - \markdownRendererLineBreak - { - \markdownWarning - { - Line~break~renderer~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererLineBreak - } - { - \cs_if_exist:NTF - \markdownRendererLineBreakPrototype - { - \markdownWarning - { - Line~break~renderer~prototype~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererLineBreakPrototype - } - { - \markdownRendererHardLineBreakPrototype - } - } - } -\seq_gput_right:Nn - \g_@@_renderers_seq - { lineBreak } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { lineBreak } - { 0 } \seq_gput_right:Nn \g_@@_renderers_seq { hardLineBreak } @@ -15009,7 +17005,7 @@ Please visit [the link][ctan]. ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -15049,7 +17045,7 @@ is enabled. The \mdef{markdownRendererLinkAttributeContextBegin} and \mdef{markdownRendererLinkAttributeContextEnd} macros represent the beginning -and the end of a hyperlink in which the attributes of the hyperlink apply. +and the end of a context in which the attributes of a hyperlink apply. The macros receive no arguments. % \end{markdown} @@ -15124,6 +17120,73 @@ following text: % % \begin{markdown} +#### Marked Text Renderer +The following macro is only produced, when the \Opt{mark} option is enabled. + +The \mdef{markdownRendererMark} macro represents a span of marked or +highlighted text. The macro receives a single argument that corresponds to +the marked text. + +% \end{markdown} +% +% \iffalse + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage[mark]{markdown} +\usepackage{soul} +\markdownSetup{ + renderers = { + mark = {\hl{#1}}, + }, +} +\begin{document} +\begin{markdown} + +This ==is highlighted text.== + +\end{markdown} +\end{document} +``````` +Next, invoke LuaTeX from the terminal: +``` sh +lualatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> This <mark>is highlighted text.</mark> + +%</manual-tokens> +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererMark{% + \markdownRendererMarkPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { mark } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { mark } + { 1 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +%</tex> +%<*manual-tokens> +% \fi +% +% \begin{markdown} + #### Markdown Document Renderers The \mdef{markdownRendererDocumentBegin} and \mdef{markdownRendererDocumentEnd} macros represent the beginning and the end of a *markdown* document. The macros @@ -15450,7 +17513,7 @@ This is some text[^1] and this is some other text[^2]. ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -15461,51 +17524,10 @@ following text: %</manual-tokens> %<*tex> % \fi -% \begin{markdown} -% -% The \mdef{markdownRendererFootnote} and -% \mdef{markdownRendererFootnotePrototype} macros have been deprecated -% and will be removed in Markdown 3.0.0. -% -% \end{markdown} % \begin{macrocode} +\def\markdownRendererNote{% + \markdownRendererNotePrototype}% \ExplSyntaxOn -\cs_new:Npn - \markdownRendererNote - { - \cs_if_exist:NTF - \markdownRendererFootnote - { - \markdownWarning - { - Footnote~renderer~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererFootnote - } - { - \cs_if_exist:NTF - \markdownRendererFootnotePrototype - { - \markdownWarning - { - Footnote~renderer~prototype~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererFootnotePrototype - } - { - \markdownRendererNotePrototype - } - } - } -\seq_gput_right:Nn - \g_@@_renderers_seq - { footnote } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { footnote } - { 1 } \seq_gput_right:Nn \g_@@_renderers_seq { note } @@ -16074,7 +18096,7 @@ following content: \usepackage[tightLists, startNumber]{markdown} \begin{document} -\begin{markdown*}{ +\begin{markdown}[ renderers = { interblockSeparator = {}, olBeginTight = { (}, @@ -16092,15 +18114,15 @@ following content: olItemEnd = {}, olEndTight = {).}, }, -} +] This is a tight list 1. item 2. item 3. item -\end{markdown*} +\end{markdown} -\begin{markdown*}{ +\begin{markdown}[ renderers = { interblockSeparator = {% :\par @@ -16122,7 +18144,7 @@ This is a tight list olItemEnd = {.}, olEnd = {\end{enumerate}}, }, -} +] This is a loose list 1. item @@ -16130,7 +18152,7 @@ This is a loose list 2. item 3. item -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -16223,7 +18245,7 @@ This is a loose list ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -16264,103 +18286,6 @@ following text: % % \begin{markdown} -#### Parenthesized Citations Renderer -The \mdef{markdownRendererCite} macro represents a string of one or more -parenthetical citations. This macro will only be produced, when the -\Opt{citations} option is enabled. The macro receives the parameter -`{`\meta{number of citations}`}` followed by \meta{suppress author} -`{`\meta{prenote}`}{`\meta{postnote}`}{`\meta{name}`}` repeated -\meta{number of citations} times. The \meta{suppress author} parameter is -either the token `-`, when the author's name is to be suppressed, or `+` -otherwise. - -% \end{markdown} -% -% \iffalse - -##### \LaTeX{} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\documentclass{article} -\usepackage[citations]{markdown} -\newcount\citationsCounter -\newcount\citationsTotal -\makeatletter -\def\citations#1#2#3#4{% - a parenthesized citation \emph{#4} - \advance\citationsCounter by 1\relax - \ifx\relax#2\relax - \ifx\relax#3\relax\else - with a postfix \emph{#3}% - \fi - \else - with a prefix \emph{#2}% - \ifx\relax#3\relax\else - \ and a postfix \emph{#3}% - \fi - \fi - \ifnum\citationsCounter>\citationsTotal\relax - .% - \expandafter\@gobble - \else - , and - \fi\citations} -\makeatother -\markdownSetup{ - renderers = { - cite = {% - \citationsCounter=1% - \citationsTotal=#1% - This is - \expandafter\citations - }, - }, -} -\begin{document} -\begin{markdown} -[see @abrahams90, pp. 12; @eijkhout91, pp. 34] -\end{markdown} -\end{document} -``````` -Next, invoke LuaTeX from the terminal: -``` sh -lualatex document.tex -`````` -A PDF document named `document.pdf` should be produced and contain the -following text: - -> This is a parenthesized citation *abrahams90* with a prefix see -> and a postfix *pp. 12*, and a citation *eijkhout91* with a -> postfix *pp. 34*. - -%</manual-tokens> -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererCite{% - \markdownRendererCitePrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { cite } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { cite } - { 1 } -\ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -%</tex> -%<*manual-tokens> -% \fi -% -% \begin{markdown} - #### Raw Content Renderers The \mdef{markdownRendererInputRawInline} macro represents an inline raw span. The macro receives two arguments: the filename of a file contaning the inline @@ -16648,7 +18573,7 @@ Bartel~Leendert van~der~Waerden ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text, where the middot (`·`) denotes a non-breaking space: @@ -16868,7 +18793,7 @@ This is ~~a lunar roving vehicle~~ strike-through text. ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -16976,7 +18901,7 @@ H~2~O is a liquid. ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -17083,7 +19008,7 @@ following content: ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -17116,6 +19041,126 @@ following text: % % \begin{markdown} +#### Table Attribute Context Renderers +The following macros are only produced, when the \Opt{tableCaptions} and +\Opt{tableAttributes} options are enabled. + +The \mdef{markdownRendererTableAttributeContextBegin} and +\mdef{markdownRendererTableAttributeContextEnd} macros represent the +beginning and the end of a context in which the attributes of a table +apply. The macros receive no arguments. + +% \end{markdown} +% +% \iffalse + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage[ + pipeTables, + tableCaptions, + tableAttributes, + relativeReferences, +]{markdown} +\usepackage{expl3} +\ExplSyntaxOn +\markdownSetup{ + renderers = { + tableAttributeContextBegin = { + \group_begin: + \markdownSetup{ + renderers = { + attributeIdentifier = { + \markdownSetup{ + renderers = { + tableAttributeContextEnd = { + \label{##1} + \group_end: + }, + }, + } + }, + }, + } + }, + tableAttributeContextEnd = { + \group_end: + }, + }, +} +\ExplSyntaxOff +\begin{document} +\begin{markdown} +See Table <#example-table>. + +| Right | Left | Default | Center | +|------:|:-----|---------|:------:| +| 12 | 12 | 12 | 12 | +| 123 | 123 | 123 | 123 | +| 1 | 1 | 1 | 1 | + + : Demonstration of pipe table syntax. {#example-table} +\end{markdown} +\end{document} +``````` +Next, invoke LuaTeX from the terminal: +``` sh +lualatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> See Table 1. +> +> | Right | Left | Default | Center | +> |------:|:-----|---------|:------:| +> | 12 | 12 | 12 | 12 | +> | 123 | 123 | 123 | 123 | +> | 1 | 1 | 1 | 1 | +> +> : Table 1. Demonstration of pipe table syntax. + +%</manual-tokens> +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererTableAttributeContextBegin{% + \markdownRendererTableAttributeContextBeginPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { tableAttributeContextBegin } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { tableAttributeContextBegin } + { 0 } +\ExplSyntaxOff +\def\markdownRendererTableAttributeContextEnd{% + \markdownRendererTableAttributeContextEndPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { tableAttributeContextEnd } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { tableAttributeContextEnd } + { 0 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +%</tex> +%<*manual-tokens> +% \fi +% +% \begin{markdown} + #### Table Renderer The \mdef{markdownRendererTable} macro represents a table. This macro will only be produced, when the \Opt{pipeTables} option is enabled. The macro receives the @@ -17243,10 +19288,10 @@ following text: % % \begin{markdown} -#### Tex Math Renderers +#### \TeX{} Math Renderers The \mdef{markdownRendererInlineMath} and \mdef{markdownRendererDisplayMath} macros represent inline and display \TeX{} math. -Both macros receive a single argument that corresponds to the tex math content. +Both macros receive a single argument that corresponds to the \TeX{} math content. These macros will only be produced, when the \Opt{texMathDollars}, \Opt{texMathSingleBackslash}, or \Opt{texMathDoubleBackslash} option are enabled. @@ -17329,7 +19374,7 @@ $$\hat{f} \left ( \xi \right )= \int_{-\infty}^{\infty} f\left ( x \right ) e^ ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -17375,98 +19420,6 @@ following text: % % \begin{markdown} -#### Text Citations Renderer -The \mdef{markdownRendererTextCite} macro represents a string of one or more -text citations. This macro will only be produced, when the -\Opt{citations} option is enabled. The macro receives parameters in the same -format as the \mref{markdownRendererCite} macro. - -% \end{markdown} -% -% \iffalse - -##### \LaTeX{} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\documentclass{article} -\usepackage[citations]{markdown} -\newcount\citationsCounter -\newcount\citationsTotal -\makeatletter -\def\citations#1#2#3#4{% - a text citation \emph{#4} - \advance\citationsCounter by 1\relax - \ifx\relax#2\relax - \ifx\relax#3\relax\else - with a postfix \emph{#3}% - \fi - \else - with a prefix \emph{#2}% - \ifx\relax#3\relax\else - \ and a postfix \emph{#3}% - \fi - \fi - \ifnum\citationsCounter>\citationsTotal\relax - .% - \expandafter\@gobble - \else - , and - \fi\citations} -\makeatother -\markdownSetup{ - renderers = { - textCite = {% - \citationsCounter=1% - \citationsTotal=#1% - This is - \expandafter\citations - }, - }, -} -\begin{document} -\begin{markdown} -@abrahams90 [pp. 12; also @eijkhout91] -\end{markdown} -\end{document} -``````` -Next, invoke LuaTeX from the terminal: -``` sh -lualatex document.tex -`````` -A PDF document named `document.pdf` should be produced and contain the -following text: - -> This is a text citation *abrahams90* with a postfix *pp. 12*, -> and a citation *eijkhout91* with a prefix *also*. - -%</manual-tokens> -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererTextCite{% - \markdownRendererTextCitePrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { textCite } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { textCite } - { 1 } -\ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -%</tex> -%<*manual-tokens> -% \fi -% -% \begin{markdown} - #### Thematic Break Renderer The \mdef{markdownRendererThematicBreak} macro represents a thematic break. The macro receives no arguments. @@ -17558,7 +19511,7 @@ This is the second page. ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -17572,51 +19525,10 @@ following text: %</manual-tokens> %<*tex> % \fi -% \begin{markdown} -% -% The \mdef{markdownRendererHorizontalRule} and -% \mdef{markdownRendererHorizontalRulePrototype} macros have been deprecated -% and will be removed in Markdown 3.0.0. -% -% \end{markdown} % \begin{macrocode} +\def\markdownRendererThematicBreak{% + \markdownRendererThematicBreakPrototype}% \ExplSyntaxOn -\cs_new:Npn - \markdownRendererThematicBreak - { - \cs_if_exist:NTF - \markdownRendererHorizontalRule - { - \markdownWarning - { - Horizontal~rule~renderer~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererHorizontalRule - } - { - \cs_if_exist:NTF - \markdownRendererHorizontalRulePrototype - { - \markdownWarning - { - Horizontal~rule~renderer~prototype~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererHorizontalRulePrototype - } - { - \markdownRendererThematicBreakPrototype - } - } - } -\seq_gput_right:Nn - \g_@@_renderers_seq - { horizontalRule } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { horizontalRule } - { 0 } \seq_gput_right:Nn \g_@@_renderers_seq { thematicBreak } @@ -17695,7 +19607,7 @@ following content: ```````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex ````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -18182,15 +20094,300 @@ age: 99 ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: > Jane Doe is 99 years old. +%</manual-tokens> +%<*tex> % \fi +% \begin{markdown} +% +%#### Generating Plain \TeX{} Token Renderer Macros and Key-Values {#plain-tex-renderers} +% +% We define the command \mdef{@@_define_renderers:} that defines plain \TeX{} +% macros for token renderers. Futhermore, the `\markdownSetup` macro also accepts +% the `renderers` key, whose value must be a list of key-values, where the keys +% correspond to the markdown token renderer macros and the values are new +% definitions of these token renderers. +% +% \end{markdown} +% \begin{macrocode} +\ExplSyntaxOn +\cs_new:Nn \@@_define_renderers: + { + \seq_map_function:NN + \g_@@_renderers_seq + \@@_define_renderer:n + } +\cs_new:Nn \@@_define_renderer:n + { + \@@_renderer_tl_to_csname:nN + { #1 } + \l_tmpa_tl + \prop_get:NnN + \g_@@_renderer_arities_prop + { #1 } + \l_tmpb_tl + \@@_define_renderer:ncV + { #1 } + { \l_tmpa_tl } + \l_tmpb_tl + } +\cs_new:Nn \@@_renderer_tl_to_csname:nN + { + \tl_set:Nn + \l_tmpa_tl + { \str_uppercase:n { #1 } } + \tl_set:Nx + #2 + { + markdownRenderer + \tl_head:f { \l_tmpa_tl } + \tl_tail:n { #1 } + } + } +\tl_new:N + \l_@@_renderer_definition_tl +\cs_new:Nn \@@_define_renderer:nNn + { + \keys_define:nn + { markdown/options/renderers } + { + #1 .code:n = { + \tl_set:Nn + \l_@@_renderer_definition_tl + { ##1 } + \regex_replace_all:nnN + { \cP\#0 } + { #1 } + \l_@@_renderer_definition_tl + \cs_generate_from_arg_count:NNnV + #2 + \cs_set:Npn + { #3 } + \l_@@_renderer_definition_tl + }, + } + } +\cs_generate_variant:Nn + \@@_define_renderer:nNn + { ncV } +\cs_generate_variant:Nn + \cs_generate_from_arg_count:NNnn + { NNnV } +\keys_define:nn + { markdown/options } + { + renderers .code:n = { + \keys_set:nn + { markdown/options/renderers } + { #1 } + }, + } +\ExplSyntaxOff +% \end{macrocode} +% \par +% \begin{markdown} +% +% The following example code showcases a possible configuration of the +% \mref{markdownRendererLink} and \mref{markdownRendererEmphasis} token +% renderer macros. +% ``` tex +% \markdownSetup{ +% renderers = { +% link = {#4}, \% Render links as the link title. +% emphasis = {{\it #1}}, \% Render emphasized text using italics. +% } +% } +% ``````` +% +% In addition to exact token renderer names, we also support wildcards +% and enumerations that match multiple token renderer names: +% ``` tex +% \markdownSetup{ +% renderers = { +% heading* = {{\bf #1}}, \% Render headings using the bold face. +% jekyllData(String|Number) = { \% Render YAML string and numbers +% {\it #2}\% \% using italics. +% }, +% } +% } +% ``````` +% +% Wildcards and enumerations can be combined: +% ``` tex +% \markdownSetup{ +% renderers = { +% *lItem(|End) = {"}, \% Quote ordered/bullet list items. +% } +% } +% ``````` +% +% To determine the current token renderer, you can use the parameter `#0`: +% ``` tex +% \markdownSetup{ +% renderers = { +% heading* = {#0: #1}, \% Render headings as the renderer name +% } \% followed by the heading text. +% } +% ``````` +% +% \end{markdown} +% \begin{macrocode} +\ExplSyntaxOn +\prop_new:N + \g_@@_glob_cache_prop +\tl_new:N + \l_@@_current_glob_tl +\cs_new:Nn + \@@_glob_seq:nnN + { + \tl_set:Nn + \l_@@_current_glob_tl + { ^ #1 $ } + \prop_get:NeNTF + \g_@@_glob_cache_prop + { #2 / \l_@@_current_glob_tl } + \l_tmpa_clist + { + \seq_set_from_clist:NN + #3 + \l_tmpa_clist + } + { + \seq_clear:N + #3 + \regex_replace_all:nnN + { \* } + { .* } + \l_@@_current_glob_tl + \regex_set:NV + \l_tmpa_regex + \l_@@_current_glob_tl + \seq_map_inline:cn + { #2 } + { + \regex_match:NnT + \l_tmpa_regex + { ##1 } + { + \seq_put_right:Nn + #3 + { ##1 } + } + } + \clist_set_from_seq:NN + \l_tmpa_clist + #3 + \prop_gput:NeV + \g_@@_glob_cache_prop + { #2 / \l_@@_current_glob_tl } + \l_tmpa_clist + } + } +% TODO: Remove in TeX Live 2023. +\prg_generate_conditional_variant:Nnn + \prop_get:NnN + { NeN } + { TF } +\cs_generate_variant:Nn + \regex_set:Nn + { NV } +\cs_generate_variant:Nn + \prop_gput:Nnn + { NeV } +\seq_new:N + \l_@@_renderer_glob_results_seq +\keys_define:nn + { markdown/options/renderers } + { + unknown .code:n = { + \@@_glob_seq:VnN + \l_keys_key_str + { g_@@_renderers_seq } + \l_@@_renderer_glob_results_seq + \seq_if_empty:NTF + \l_@@_renderer_glob_results_seq + { + \msg_error:nnV + { markdown } + { undefined-renderer } + \l_keys_key_str + } + { + \tl_set:Nn + \l_@@_renderer_definition_tl + { #1 } + \seq_map_inline:Nn + \l_@@_renderer_glob_results_seq + { + \@@_renderer_tl_to_csname:nN + { ##1 } + \l_tmpa_tl + \prop_get:NnN + \g_@@_renderer_arities_prop + { ##1 } + \l_tmpb_tl + \int_set:Nn + \l_tmpa_int + \l_tmpb_tl + \tl_set:NV + \l_tmpb_tl + \l_@@_renderer_definition_tl + \regex_replace_all:nnN + { \cP\#0 } + { ##1 } + \l_tmpb_tl + \cs_generate_from_arg_count:cNVV + { \l_tmpa_tl } + \cs_set:Npn + \l_tmpa_int + \l_tmpb_tl + } + } + }, + } +\msg_new:nnn + { markdown } + { undefined-renderer } + { + Renderer~#1~is~undefined. + } +\cs_generate_variant:Nn + \@@_glob_seq:nnN + { VnN } +\cs_generate_variant:Nn + \cs_generate_from_arg_count:NNnn + { cNVV } +\cs_generate_variant:Nn + \msg_error:nnn + { nnV } +% \end{macrocode} +% \begin{markdown} +% +% If plain \TeX{} is the top layer, we use the \mref{@@_define_renderers:} +% macro to define plain \TeX{} token renderer macros and key-values +% immediately. Otherwise, we postpone the definition until the upper layers +% have been loaded. % +% \end{markdown} +% \begin{macrocode} +\str_if_eq:VVT + \c_@@_top_layer_tl + \c_@@_option_layer_plain_tex_tl + { + \@@_define_renderers: + } +\ExplSyntaxOff +% \end{macrocode} +% \iffalse +%</tex> +%<*manual-tokens> +% \fi % \begin{markdown} ### Token Renderer Prototypes {#texrendererprototypes} @@ -18250,13 +20447,13 @@ following content: ~ \end{markdown} -\begin{markdown*}{ +\begin{markdown}[ renderers = { tilde = {User-defined token renderers take precedence.}, }, -} +] ~ -\end{markdown*} +\end{markdown} \end{document} ``````` Next, invoke LuaTeX from the terminal: @@ -18294,7 +20491,7 @@ following content: ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -18416,7 +20613,7 @@ age: 99 ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -18435,49 +20632,89 @@ following text: % \end{macrocode} % \begin{markdown} % -% The following \TeX{} macros provide definitions for the token renderers (see -% Section <#sec:texrenderersuser>) that have not been redefined by the -% user. These macros are intended to be redefined by macro package authors -% who wish to provide sensible default token renderers. They are also redefined -% by the \LaTeX{} and \Hologo{ConTeXt} implementations (see sections -% <#sec:lateximplementation> and <#sec:contextimplementation>). +% The `jekyllDataRenderers` key can be used as a syntactic sugar for setting +% the `markdown/jekyllData` key--values without using the expl3 language. % % \end{markdown} % \begin{macrocode} \ExplSyntaxOn -\cs_new:Nn \@@_plaintex_define_renderer_prototypes: +\@@_with_various_cases:nn + { jekyllDataRenderers } { - \seq_map_function:NN - \g_@@_renderers_seq - \@@_plaintex_define_renderer_prototype:n - \let\markdownRendererBlockHtmlCommentBeginPrototype=\iffalse - \let\markdownRendererBlockHtmlCommentBegin=\iffalse - \let\markdownRendererBlockHtmlCommentEndPrototype=\fi - \let\markdownRendererBlockHtmlCommentEnd=\fi + \keys_define:nn + { markdown/options } + { + #1 .code:n = { + \tl_set:Nn + \l_tmpa_tl + { ##1 } % \end{macrocode} % \begin{markdown} % -% The \mref{markdownRendererFootnote} and -% \mref{markdownRendererFootnotePrototype} macros have been deprecated -% and will be removed in Markdown 3.0.0. +% To ensure that keys containing forward slashes get passed correctly, we +% replace all forward slashes in the input with backslash tokens with category +% code letter and then undo the replacement. This means that if any unbraced +% backslash tokens with category code letter exist in the input, they will be +% replaced with forward slashes. However, this should be extremely rare. % % \end{markdown} % \begin{macrocode} - \cs_undefine:N \markdownRendererFootnote - \cs_undefine:N \markdownRendererFootnotePrototype + \tl_replace_all:NnV + \l_tmpa_tl + { / } + \c_backslash_str + \keys_set:nV + { markdown/options/jekyll-data-renderers } + \l_tmpa_tl + }, + } + } +\keys_define:nn + { markdown/options/jekyll-data-renderers } + { + unknown .code:n = { + \tl_set_eq:NN + \l_tmpa_tl + \l_keys_key_str + \tl_replace_all:NVn + \l_tmpa_tl + \c_backslash_str + { / } + \tl_put_right:Nn + \l_tmpa_tl + { + .code:n = { #1 } + } + \keys_define:nV + { markdown/jekyllData } + \l_tmpa_tl + } + } +\cs_generate_variant:Nn + \keys_define:nn + { nV } +\ExplSyntaxOff % \end{macrocode} % \begin{markdown} % -% The \mref{markdownRendererHorizontalRule} and -% \mref{markdownRendererHorizontalRulePrototype} macros have been deprecated -% and will be removed in Markdown 3.0.0. +%#### Generating Plain \TeX{} Token Renderer Prototype Macros and Key-Values {#plain-tex-renderer-prototypes} +% +% We define the command \mdef{@@_define_renderer_prototypes:} that defines plain \TeX{} +% macros for token renderer prototypes. Futhermore, the `\markdownSetup` macro also accepts +% the `rendererPrototype` key, whose value must be a list of key-values, where the keys +% correspond to the markdown token renderer prototype macros and the values are new +% definitions of these token renderer prototypes. % % \end{markdown} % \begin{macrocode} - \cs_undefine:N \markdownRendererHorizontalRule - \cs_undefine:N \markdownRendererHorizontalRulePrototype +\ExplSyntaxOn +\cs_new:Nn \@@_define_renderer_prototypes: + { + \seq_map_function:NN + \g_@@_renderers_seq + \@@_define_renderer_prototype:n } -\cs_new:Nn \@@_plaintex_define_renderer_prototype:n +\cs_new:Nn \@@_define_renderer_prototype:n { \@@_renderer_prototype_tl_to_csname:nN { #1 } @@ -18486,7 +20723,8 @@ following text: \g_@@_renderer_arities_prop { #1 } \l_tmpb_tl - \@@_plaintex_define_renderer_prototype:cV + \@@_define_renderer_prototype:ncV + { #1 } { \l_tmpa_tl } \l_tmpb_tl } @@ -18504,23 +20742,191 @@ following text: Prototype } } -\cs_new:Nn \@@_plaintex_define_renderer_prototype:Nn +\tl_new:N + \l_@@_renderer_prototype_definition_tl +\cs_new:Nn \@@_define_renderer_prototype:nNn { - \cs_generate_from_arg_count:NNnn - #1 - \cs_set:Npn - { #2 } - { } + \keys_define:nn + { markdown/options/renderer-prototypes } + { + #1 .code:n = { + \tl_set:Nn + \l_@@_renderer_prototype_definition_tl + { ##1 } + \regex_replace_all:nnN + { \cP\#0 } + { #1 } + \l_@@_renderer_prototype_definition_tl + \cs_generate_from_arg_count:NNnV + #2 + \cs_set:Npn + { #3 } + \l_@@_renderer_prototype_definition_tl + }, + } +% \end{macrocode} +% \begin{markdown} +% +% Unless the token renderer prototype macro has already been defined, +% we provide an empty definition. +% +% \end{markdown} +% \begin{macrocode} + \cs_if_free:NT + #2 + { + \cs_generate_from_arg_count:NNnn + #2 + \cs_set:Npn + { #3 } + { } + } } \cs_generate_variant:Nn - \@@_plaintex_define_renderer_prototype:Nn - { cV } -\@@_plaintex_define_renderer_prototypes: + \@@_define_renderer_prototype:nNn + { ncV } \ExplSyntaxOff % \end{macrocode} % \par % \begin{markdown} % +% The following example code showcases a possible configuration of the +% `\markdownRendererImagePrototype` and `\markdownRendererCodeSpanPrototype` +% token renderer prototype macros. +% ``` tex +% \markdownSetup{ +% rendererPrototypes = { +% image = {\pdfximage{#2}}, \% Embed PDF images in the document. +% codeSpan = {{\tt #1}}, \% Render inline code using monospace. +% } +% } +% ``````` +% +% In addition to exact token renderer names, we also support wildcards +% and enumerations that match multiple token renderer prototype names: +% ``` tex +% \markdownSetup{ +% rendererPrototypes = { +% heading* = {{\bf #1}}, \% Render headings using the bold face. +% jekyllData(String|Number) = { \% Render YAML string and numbers +% {\it #2}\% \% using italics. +% }, +% } +% } +% ``````` +% +% Wildcards and enumerations can be combined: +% ``` tex +% \markdownSetup{ +% rendererPrototypes = { +% *lItem(|End) = {"}, \% Quote ordered/bullet list items. +% } +% } +% ``````` +% +% To determine the current token renderer prototype, you can use the +% parameter `#0`: +% ``` tex +% \markdownSetup{ +% rendererPrototypes = { +% heading* = {#0: #1}, \% Render headings as the renderer prototype +% } \% name followed by the heading text. +% } +% ``````` +% +% \end{markdown} +% \begin{macrocode} +\ExplSyntaxOn +\seq_new:N + \l_@@_renderer_prototype_glob_results_seq +\keys_define:nn + { markdown/options/renderer-prototypes } + { + unknown .code:n = { + \@@_glob_seq:VnN + \l_keys_key_str + { g_@@_renderers_seq } + \l_@@_renderer_prototype_glob_results_seq + \seq_if_empty:NTF + \l_@@_renderer_prototype_glob_results_seq + { + \msg_error:nnV + { markdown } + { undefined-renderer-prototype } + \l_keys_key_str + } + { + \tl_set:Nn + \l_@@_renderer_prototype_definition_tl + { #1 } + \seq_map_inline:Nn + \l_@@_renderer_prototype_glob_results_seq + { + \@@_renderer_prototype_tl_to_csname:nN + { ##1 } + \l_tmpa_tl + \prop_get:NnN + \g_@@_renderer_arities_prop + { ##1 } + \l_tmpb_tl + \int_set:Nn + \l_tmpa_int + \l_tmpb_tl + \tl_set:NV + \l_tmpb_tl + \l_@@_renderer_prototype_definition_tl + \regex_replace_all:nnN + { \cP\#0 } + { ##1 } + \l_tmpb_tl + \cs_generate_from_arg_count:cNVV + { \l_tmpa_tl } + \cs_set:Npn + \l_tmpa_int + \l_tmpb_tl + } + } + }, + } +\msg_new:nnn + { markdown } + { undefined-renderer-prototype } + { + Renderer~prototype~#1~is~undefined. + } +\@@_with_various_cases:nn + { rendererPrototypes } + { + \keys_define:nn + { markdown/options } + { + #1 .code:n = { + \keys_set:nn + { markdown/options/renderer-prototypes } + { ##1 } + }, + } + } +% \end{macrocode} +% \begin{markdown} +% +% If plain \TeX{} is the top layer, we use the \mref{@@_define_renderer_prototypes:} +% macro to define plain \TeX{} token renderer prototype macros and key-values +% immediately. Otherwise, we postpone the definition until the upper layers +% have been loaded. +% +% \end{markdown} +% \begin{macrocode} +\str_if_eq:VVT + \c_@@_top_layer_tl + \c_@@_option_layer_plain_tex_tl + { + \@@_define_renderer_prototypes: + } +\ExplSyntaxOff +% \end{macrocode} +% \begin{markdown} +% %### Logging Facilities % The \mdef{markdownInfo}, \mdef{markdownWarning}, and \mdef{markdownError} % macros perform logging for the Markdown package. Their first argument @@ -18529,6 +20935,10 @@ following text: % text. You may redefine these macros to redirect and process the info, % warning, and error messages. % +% The \mref{markdownInfo}, \mref{markdownWarning}, and \mref{markdownError} +% macros have been deprecated and will be removed in the next major version of +% the Markdown package. +% %### Miscellanea % The \mdef{markdownMakeOther} macro is used by the package, when a \TeX{} % engine that does not support direct Lua access is starting to buffer a text. @@ -18572,72 +20982,26 @@ following text: |endgroup % \end{macrocode} % \begin{markdown} -% The macro is exposed in the interface, so that the user can create their own -% markdown environments. Due to the way the arguments are passed to Lua (see -% Section <#sec:direct-lua>), the first argument may not contain the -% string `]]` (regardless of the category code of the bracket symbol (`]`)). -% -% The \mdef{markdownMode} macro specifies how the plain \TeX{} implementation -% interfaces with the Lua interface. The valid values and their meaning are -% as follows: -% -% - `0` – Shell escape via the 18 output file stream -% - `1` – Shell escape via the Lua `os.execute` method -% - `2` – Direct Lua access -% - `3` – The \pkg{lt3luabridge} Lua package -% -% By defining the macro, the user can coerce the package to use a specific mode. -% If the user does not define the macro prior to loading the plain \TeX{} -% implementation, the correct value will be automatically detected. The outcome -% of changing the value of \mref{markdownMode} after the implementation has been -% loaded is undefined. -% -% The \mref{markdownMode} macro has been deprecated and will be removed in -% Markdown 3.0.0. The code that corresponds to \mref{markdownMode} value of `3` -% will be the only implementation. +% The macro is exposed in the interface, so that users can create their own +% markdown environments. Due to the way the arguments are passed to Lua, the +% first argument may not contain the string `]]` (regardless of the category +% code of the bracket symbol). % +% The `code` key, which can be used to immediately expand and execute code. % \end{markdown} % \begin{macrocode} \ExplSyntaxOn -\cs_if_exist:NF - \markdownMode +\keys_define:nn + { markdown/options } { - \file_if_exist:nTF - { lt3luabridge.tex } - { - \cs_new:Npn - \markdownMode - { 3 } - } - { - \cs_if_exist:NTF - \directlua - { - \cs_new:Npn - \markdownMode - { 2 } - } - { - \cs_new:Npn - \markdownMode - { 0 } - } - } + code .code:n = { #1 }, } \ExplSyntaxOff % \end{macrocode} -% \par % \begin{markdown} -% -% The \mdef{markdownLuaRegisterIBCallback} and -% \mdef{markdownLuaUnregisterIBCallback} macros have been deprecated and will -% be removed in Markdown 3.0.0: +% This can be especially useful in snippets. % % \end{markdown} -% \begin{macrocode} -\def\markdownLuaRegisterIBCallback#1{\relax}% -\def\markdownLuaUnregisterIBCallback#1{\relax}% -% \end{macrocode} % \iffalse %</tex> % \fi @@ -18674,9 +21038,9 @@ following content: $\sqrt{-1}$ *equals* $i$ \end{markdown} -\begin{markdown*}{hybrid} +\begin{markdown}[texMathDollars] $\sqrt{-1}$ *equals* $i$ -\end{markdown*} +\end{markdown} \end{document} ``````` @@ -18710,15 +21074,26 @@ pdflatex --shell-escape document.tex % rest of the interface is inherited from the plain \TeX{} interface (see % Section <#sec:texinterface>). % -% The \LaTeX{} implementation redefines the plain \TeX{} logging macros (see -% Section <#sec:tex-interface-logging>) to use the \LaTeX{} `\PackageInfo`, -% `\PackageWarning`, and `\PackageError` macros. +% To determine whether \LaTeX{} is the top layer or if there are other +% layers above \LaTeX{}, we take a look on whether the +% \mref{c_@@_top_layer_tl} token list has already been defined. If not, +% we will assume that \LaTeX{} is the top layer. % % \end{markdown} % \begin{macrocode} -\newcommand\markdownInfo[1]{\PackageInfo{markdown}{#1}}% -\newcommand\markdownWarning[1]{\PackageWarning{markdown}{#1}}% -\newcommand\markdownError[2]{\PackageError{markdown}{#1}{#2.}}% +\ExplSyntaxOn +\tl_const:Nn \c_@@_option_layer_latex_tl { latex } +\cs_generate_variant:Nn + \tl_const:Nn + { NV } +\tl_if_exist:NF + \c_@@_top_layer_tl + { + \tl_const:NV + \c_@@_top_layer_tl + \c_@@_option_layer_latex_tl + } +\ExplSyntaxOff \input markdown/markdown % \end{macrocode} % \begin{markdown} @@ -18733,12 +21108,12 @@ pdflatex --shell-escape document.tex % where \meta{options} are the \LaTeX{} interface options (see Section % <#sec:latex-options>). Note that \meta{options} inside the `\usepackage` % macro may not set the `markdownRenderers` (see Section -% <#sec:latex-renderers>) and `markdownRendererPrototypes` (see Section -% <#sec:latex-renderer-prototypes>) keys. Furthermore, although the +% <#sec:plain-tex-renderers>) and `markdownRendererPrototypes` (see Section +% <#sec:plain-tex-renderer-prototypes>) keys. Furthermore, although the % base variant of the `import` key that loads a single \LaTeX{} theme % (see Section <#sec:latexthemes>) can be used, the extended variant % that can load multiple themes and import snippets from them (see -% Section <#sec:latexsnippets>). This limitation is due to the way +% Section <#sec:snippets>) cannot. This limitation is due to the way % \Hologo{LaTeX2e} parses package options. % % \end{markdown} @@ -18749,11 +21124,14 @@ pdflatex --shell-escape document.tex % The interface exposes the \envmdef{markdown} and \envmdef{markdown*} % \LaTeX{} environments, and redefines the \mref{markdownInput} command. % -% The \envmref{markdown} and \envmref{markdown*} \LaTeX{} environments are used to -% typeset markdown document fragments. The starred version of the -% \envmref{markdown} environment accepts \LaTeX{} interface options (see -% Section <#sec:latex-options>) as its only argument. These options will -% only influence this markdown document fragment. +% The \envmref{markdown} and \envmref{markdown*} \LaTeX{} environments are used +% to typeset markdown document fragments. Both \LaTeX{} environments accept +% \LaTeX{} interface options (see ection <#sec:latex-options>) as the only +% argument. This argument is optional for the \envmref{markdown} environment +% and mandatory for the \envmref{markdown*} environment. +% +% The \envmref{markdown*} environment has been deprecated and will be removed +% in the next major version of the Markdown package. % % \end{markdown} % \begin{macrocode} @@ -18763,7 +21141,7 @@ pdflatex --shell-escape document.tex % \markdownBegin % % You may prepend your own code to the \mdef{markdown} macro and append your own -% code to the \mdef{endmarkdown} macro to produce special effects before and after +% code to the \mref{markdownEnd} macro to produce special effects before and after % the \envmref{markdown} \LaTeX{} environment (and likewise for the starred % version). % @@ -18778,7 +21156,7 @@ pdflatex --shell-escape document.tex % \usepackage{markdown} \usepackage{markdown} % \begin{document} \begin{document} % \% ... \% ... -% \begin{markdown} \begin{markdown*}{smartEllipses} +% \begin{markdown}[smartEllipses] \begin{markdown*}{smartEllipses} % _Hello_ **world** ... _Hello_ **world** ... % \end{markdown} \end{markdown*} % \% ... \% ... @@ -18812,9 +21190,6 @@ pdflatex --shell-escape document.tex % part is optional, and \meta{key} will be interpreted as \meta{key}`=true` % if the `=`\meta{value} part has been omitted. % -% Except for the `plain` option described in Section <#sec:latexplain>, and -% the \LaTeX{} themes described in Section <#sec:latexthemes>, and the -% \LaTeX{} snippets described in Section <#sec:latex-setup-snippets>, % \LaTeX{} options map directly to the options recognized by the plain % \TeX{} interface (see Section <#sec:tex-options>) and to the markdown token % renderers and their prototypes recognized by the plain \TeX{} interface (see @@ -18822,75 +21197,36 @@ pdflatex --shell-escape document.tex % % The \LaTeX{} options may be specified when loading the \LaTeX{} package, when % using the \envmref{markdown*} \LaTeX{} environment or the \mref{markdownInput} -% macro (see Section <#sec:latexinterface>), or via the \mdef{markdownSetup} -% macro. The \mref{markdownSetup} macro receives the options to set up as its only -% argument: -% -% \markdownEnd -% \begin{macrocode} -\ExplSyntaxOn -\cs_new:Nn - \@@_setup:n - { - \keys_set:nn - { markdown/latex-options } - { #1 } - } -\let\markdownSetup=\@@_setup:n -\ExplSyntaxOff -% \end{macrocode} -% \begin{markdown} +% macro (see Section <#sec:latexinterface>), or via the \mref{markdownSetup} +% macro. % -%#### \LaTeX{} snippets {#latex-setup-snippets} +%#### Finalizing and Freezing the Cache % -% We may also set up \LaTeX{} options as *snippets* using the -% \mdef{markdownSetupSnippet} macro and invoke them later. The -% \mref{markdownSetupSnippet} macro receives two arguments: the name -% of the snippet and the options to store: +% To ensure compatibility with the `minted` package [@poore17, Section +% 5.1], which supports the `finalizecache` and `frozencache` package options +% with similar semantics to the \Opt{finalizeCache} and \Opt{frozenCache} plain +% \TeX{} options, the Markdown package also recognizes these as aliases +% and accepts them as document class options. By passing `finalizecache` and +% `frozencache` as document class options, you may conveniently control the +% behavior of both packages at once: % -% \end{markdown} -% \begin{macrocode} -\ExplSyntaxOn -\cs_new:Nn - \@@_latex_setup_snippet:nn - { - \markdownIfSnippetExists - { #1 } - { - \markdownWarning - {Redefined~snippet~\markdownLaTeXThemeName#1} - \csname markdownLaTeXSetupSnippet% - \markdownLaTeXThemeName#1\endcsname={#2} - } - { - \newtoks\next - \next={#2} - \expandafter\let\csname markdownLaTeXSetupSnippet% - \markdownLaTeXThemeName#1\endcsname=\next - } - } -\let\markdownSetupSnippet=\@@_latex_setup_snippet:nn -\ExplSyntaxOff -% \end{macrocode} -% \begin{markdown} +% ``` tex +% \documentclass[frozencache]{article} +% \usepackage{markdown,minted} +% \begin{document} +% % ... +% \end{document} +% ``````` % -% To decide whether a snippet exists, we can use the -% \mdef{markdownIfSnippetExists} macro: +% We hope that other packages will support the `finalizecache` and +% `frozencache` package options in the future, so that they can become a +% standard interface for preparing \LaTeX{} document sources for distribution. % -% \end{markdown} +% \markdownEnd % \begin{macrocode} -\newcommand\markdownIfSnippetExists[3]{% - \@ifundefined - {markdownLaTeXSetupSnippet\markdownLaTeXThemeName#1}% - {#3}{#2}}% +\DeclareOption{finalizecache}{\markdownSetup{finalizeCache}} +\DeclareOption{frozencache}{\markdownSetup{frozenCache}} % \end{macrocode} -% \begin{markdown} -% -% See Section <#sec:latexthemes> for information on interactions between -% snippets and \LaTeX{} themes. See Section <#sec:latexsnippets> -% for information about invoking the set-up snippets. -% -% \end{markdown} % \iffalse %</latex> %<*manual-options> @@ -18914,133 +21250,95 @@ following code in our \LaTeX{} document: ``` We can also set all plain \TeX{} options directly from \LaTeX{}. For example, -to set the `\markdownOptionHelperScriptFileName` plain \TeX{} option to +to set the `\markdownOptionInputTempFileName` plain \TeX{} option to `helper-script.lua`, we would inclde the following code in our \LaTeX{} document: ``` tex \markdownSetup{ - helperScriptFileName = helper-script.lua, + inputTempFileName = temporary-input.md, } ``` %</manual-options> %<*latex> % \fi -% \par % \begin{markdown} % -% To enable the enumeration of \LaTeX{} options, we will maintain the -% \mdef{g_\@\@_latex_options_seq} sequence. +%#### Generating Plain \TeX{} Option, Token Renderer, and Token Renderer Prototype Macros and Key-Values +% +% If \LaTeX{} is the top layer, we use the +% \mref{@@_define_option_commands_and_keyvals:}, \mref{@@_define_renderers:}, +% and \mref{@@_define_renderer_prototypes:} macro to define plain \TeX{} +% option, token renderer, and token renderer prototype macros and key-values +% immediately. Otherwise, we postpone the definition until the upper layers +% have been loaded. % % \end{markdown} % \begin{macrocode} \ExplSyntaxOn -\seq_new:N \g_@@_latex_options_seq +\str_if_eq:VVT + \c_@@_top_layer_tl + \c_@@_option_layer_latex_tl + { + \@@_define_option_commands_and_keyvals: + \@@_define_renderers: + \@@_define_renderer_prototypes: + } +\ExplSyntaxOff % \end{macrocode} +% \par % \begin{markdown} % -% To enable the reflection of default \LaTeX{} options and their types, we -% will maintain the \mdef{g_\@\@_default_latex_options_prop} and -% \mdef{g_\@\@_latex_option_types_prop} property lists, respectively. +% The following example \LaTeX{} code showcases a possible configuration of +% plain \TeX{} interface options \Opt{hybrid}, \Opt{smartEllipses}, and +% \Opt{cacheDir}. +% ``` tex +% \markdownSetup{ +% hybrid, +% smartEllipses, +% cacheDir = /tmp, +% } +% ``````` % % \end{markdown} -% \begin{macrocode} -\prop_new:N \g_@@_latex_option_types_prop -\prop_new:N \g_@@_default_latex_options_prop -\tl_const:Nn \c_@@_option_layer_latex_tl { latex } -\seq_gput_right:NV \g_@@_option_layers_seq \c_@@_option_layer_latex_tl -\cs_new:Nn - \@@_add_latex_option:nnn - { - \@@_add_option:Vnnn - \c_@@_option_layer_latex_tl - { #1 } - { #2 } - { #3 } - } -% \end{macrocode} % \iffalse %</latex> %<*manual-options> % \fi % \begin{markdown} -#### No default token renderer prototypes {#latexplain} - -Default token renderer prototypes require \LaTeX{} packages that may clash with -other packages used in a document. Additionally, if we redefine token -renderers and renderer prototypes ourselves, the default definitions will bring -no benefit to us. Using the `plain` package option, we can keep the default -definitions from the plain \TeX{} implementation -% (see Section <#sec:tex-token-renderer-prototypes>) -and prevent the soft \LaTeX{} prerequisites -% in Section <#sec:latex-prerequisites> -from being loaded: The plain option must be set before or when loading the -package. Setting the option after loading the package will have no effect. - -``` tex -\usepackage[plain]{markdown} -``````` +### Themes {#latexthemes} -% \end{markdown} -% \iffalse -%</manual-options> -%<*latex> +% In Section~\ref{sec:themes}, we described the concept of themes. +In \LaTeX{}, we expand on the concept of +% themes\iffalse +[themes](#themes) % \fi -% \begin{macrocode} -\@@_add_latex_option:nnn - { plain } - { boolean } - { false } -\ExplSyntaxOff -% \end{macrocode} -% \iffalse -%</latex> -%<*manual-options> -% \fi -% \begin{markdown} +by allowing a theme to be a full-blown \LaTeX{} package. Specifically, the +key-values `theme`=\meta{theme name} and `import`=\meta{theme name} load a +\LaTeX{} package named `markdowntheme`\meta{munged theme name}`.sty` if it +exists and a \TeX{} document named `markdowntheme`\meta{munged theme +name}`.tex` otherwise. -#### \LaTeX{} themes {#latexthemes} +Having the Markdown package automatically load either the generic `.tex` +*theme file* or the \LaTeX{}-specific `.sty` theme file allows developers +to have a single *theme file*, when the theme is small or the difference +between \TeX{} formats is unimportant, and scale up to separate theme files +native to different \TeX{} formats for large multi-format themes, where +different code is needed for different \TeX{} formats. To enable code reuse, +developers can load the `.tex` theme file from the `.sty` theme file using the +\mdef{markdownLoadPlainTeXTheme} macro. -User-defined \LaTeX{} themes for the Markdown package provide a domain-specific -interpretation of Markdown tokens. Similarly to \LaTeX{} packages, themes -allow the authors to achieve a specific look and other high-level goals -without low-level programming. - -% The \LaTeX{} option `import`=\meta{theme name} loads a \LaTeX{} package -% (further referred to as *a theme*) named `markdowntheme`\meta{munged theme -% name}`.sty`, where the *munged theme name* is the *theme name* after the -% substitution of all forward slashes (`/`) for an underscore (`_`), the theme -% *name* is *qualified* and contains no underscores, and a value is qualified -% if and only if it contains at least one forward slash. Themes are inspired -% by the Beamer \LaTeX{} package, which provides similar functionality with -% its `\usetheme` macro [@tantau21, Section 15.1]. -% -% Theme names must be qualified to minimize naming conflicts between different -% themes intended for a single \LaTeX{} document class or for a single \LaTeX{} -% package. The preferred format of a theme name is \meta{theme author}`/`<!-- -% -->\meta{target \LaTeX{} document class or package}`/`\meta{private naming -% scheme}, where the *private naming scheme* may contain additional forward -% slashes. For example, a theme by a user `witiko` for the MU theme of the -% Beamer document class may have the name `witiko/beamer/MU`. -% -% Theme names are munged, because \LaTeX{} packages are identified only by -% their filenames, not by their pathnames. [@novotny21] Therefore, we can't -% store the qualified theme names directly using directories, but we must -% encode the individual segments of the qualified theme in the filename. For -% example, loading a theme named `witiko/beamer/MU` would load a \LaTeX{} -% package named `markdownthemewitiko_beamer_MU.sty`. -% -% If the \LaTeX{} option with key `theme` is (repeatedly) specified in the -% `\usepackage` macro, the loading of the theme(s) will be postponed in -% first-in-first-out order until after the Markdown \LaTeX{} package has been -% loaded. Otherwise, the theme(s) will be loaded immediately. For example, -% there is a theme named `witiko/dot`, which typesets fenced code blocks with -% the `dot` infostring as images of directed graphs rendered by the Graphviz -% tools. The following code would first load the Markdown package, then the -% `markdownthemewitiko_beamer_MU.sty` \LaTeX{} package, and finally the -% `markdownthemewitiko_dot.sty` \LaTeX{} package: +% If the \LaTeX{} option with keys `theme` or `import` is (repeatedly) +% specified in the `\usepackage` macro, the loading of the theme(s) will be +% postponed in first-in-first-out order until after the Markdown \LaTeX{} +% package has been loaded. Otherwise, the theme(s) will be loaded immediately. +% For example, there is a theme named `witiko/dot`, which typesets fenced code +% blocks with the `dot` infostring as images of directed graphs rendered by the +% Graphviz tools. The following code would first load the Markdown package, +% then the `markdownthemewitiko_beamer_MU.sty` \LaTeX{} package, and finally +% the `markdownthemewitiko_dot.sty` \LaTeX{} package: % \end{markdown} % \iffalse @@ -19066,121 +21364,22 @@ would use the following code in the preamble of your document: % \begin{macrocode} \newif\ifmarkdownLaTeXLoaded \markdownLaTeXLoadedfalse -\AtEndOfPackage{\markdownLaTeXLoadedtrue} -\ExplSyntaxOn -\tl_new:N \markdownLaTeXThemePackageName -\cs_new:Nn - \@@_set_latex_theme:n - { - \str_if_in:nnF - { #1 } - { / } - { - \markdownError - { Won't~load~theme~with~unqualified~name~#1 } - { Theme~names~must~contain~at~least~one~forward~slash } - } - \str_if_in:nnT - { #1 } - { _ } - { - \markdownError - { Won't~load~theme~with~an~underscore~in~its~name~#1 } - { Theme~names~must~not~contain~underscores~in~their~names } - } - \tl_set:Nn \markdownLaTeXThemePackageName { #1 } - \str_replace_all:Nnn - \markdownLaTeXThemePackageName - { / } - { _ } - \edef\markdownLaTeXThemePackageName{ - markdowntheme\markdownLaTeXThemePackageName} - \expandafter\markdownLaTeXThemeLoad\expandafter{ - \markdownLaTeXThemePackageName}{#1/} - } -\keys_define:nn - { markdown/latex-options } - { - import .code:n = { - \tl_set:Nn - \l_tmpa_tl - { #1 } % \end{macrocode} -% \begin{markdown} -% -% To ensure that keys containing forward slashes get passed correctly, we -% replace all forward slashes in the input with backslash tokens with category -% code letter and then undo the replacement. This means that if any unbraced -% backslash tokens with category code letter exist in the input, they will be -% replaced with forward slashes. However, this should be extremely rare. -% -% \end{markdown} -% \begin{macrocode} - \tl_replace_all:NnV - \l_tmpa_tl - { / } - \c_backslash_str - \keys_set:nV - { markdown/latex-options/import } - \l_tmpa_tl - }, - } -\cs_generate_variant:Nn - \tl_replace_all:Nnn - { NnV } -% \end{macrocode} -% \begin{markdown} -% -% The \LaTeX{} option `theme` has been deprecated and will be removed in -% Markdown 3.0.0. -% -% \end{markdown} -% \begin{macrocode} -\keys_define:nn - { markdown/latex-options } - { - theme .code:n = { \@@_set_latex_theme:n { #1 } }, - } -\ExplSyntaxOff -% \end{macrocode} -% \begin{markdown} -% -% The \LaTeX{} themes have a useful synergy with snippets (see Section -% <#sec:latex-setup-snippets>): To make it less likely that different themes -% will set up snippets with the same name, we will prepend \meta{theme -% name}`/` before the snippet name and use the result as the snippet name. -% For example, if the `witiko/dot` theme sets up the `product` snippet, the -% snippet will be available under the name `witiko/dot/product`. -% -% \end{markdown} % \iffalse %</latex> %<*manual-options> % \fi +% \par % \begin{markdown} Due to limitations of \LaTeX{}, themes may not be loaded after the beginning of a \LaTeX{} document. % \end{markdown} -% \iffalse -%</manual-options> -%<*latex> -% \fi -% \begin{macrocode} -\ExplSyntaxOn -\@onlypreamble - \@@_set_latex_theme:n -\ExplSyntaxOff -% \end{macrocode} -% \iffalse -%</latex> -%<*manual-options> -% \fi % \par % \markdownBegin -Example themes provided with the Markdown package include: +Built-in \LaTeX{} themes provided with the Markdown package include: \pkg{witiko/dot} @@ -19311,13 +21510,13 @@ conference article: > <http://ceur-ws.org/Vol-2696/paper_235.pdf> %</manual-options> -%<*latex-themes-witiko-dot> +%<*themes-witiko-dot> % \fi % \begin{macrocode} \ProvidesPackage{markdownthemewitiko_dot}[2021/03/09]% % \end{macrocode} % \iffalse -%</latex-themes-witiko-dot> +%</themes-witiko-dot> %<*manual-options> % \fi % \par @@ -19370,909 +21569,71 @@ lualatex document.tex A PDF document named `document.pdf` should be produced and contain the following image: -> ![img](https://github.com/witiko/markdown/raw/main/markdown.png -> "The banner of the Markdown package") +> ![img](https://github.com/witiko/markdown/raw/main/markdown.png "The banner of the Markdown package") %</manual-options> -%<*latex-themes-witiko-graphicx-http> +%<*themes-witiko-graphicx-http> % \fi % \begin{macrocode} \ProvidesPackage{markdownthemewitiko_graphicx_http}[2021/03/22]% % \end{macrocode} % \iffalse -%</latex-themes-witiko-graphicx-http> -%<*manual-options> -% \fi -% \par -% \markdownBegin - -\pkg{witiko/tilde} - -: A theme that makes tilde (`~`) always typeset the non-breaking space even - when the \Opt{hybrid} Lua option is disabled. -% ``` tex -% \documentclass{article} -% \usepackage[import=witiko/tilde]{markdown} -% \begin{document} -% \begin{markdown} -% Bartel~Leendert van~der~Waerden -% \end{markdown} -% \end{document} -% ``````` -% Typesetting the above document produces the following text: -% “Bartel~Leendert van~der~Waerden”. -% -% \markdownEnd -% \iffalse - -##### \LaTeX{} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\documentclass{article} -\usepackage[import=witiko/tilde]{markdown} -\begin{document} -\begin{markdown} -Bartel~Leendert van~der~Waerden -\end{markdown} -\end{document} -``````` -Next, invoke LuaTeX from the terminal: -``` sh -lualatex document.tex -`````` -A PDF document named `document.pdf` should be produced and contain the -following text, where the middot (`·`) denotes a non-breaking space: - -> Bartel·Leendert van·der·Waerden - -%</manual-options> -%<*latex-themes-witiko-tilde> -% \fi -% \begin{macrocode} -\ProvidesPackage{markdownthemewitiko_tilde}[2021/03/22]% -% \end{macrocode} -% \iffalse -%</latex-themes-witiko-tilde> +%</themes-witiko-graphicx-http> %<*manual-options> % \fi % \par % \begin{markdown} -% -% Please, see Section <#sec:latex-themes-implementation> for implementation -% details of the example themes. -#### \LaTeX{} snippets {#latexsnippets} +\pkg{witiko/markdown/defaults} -% \end{markdown} -% \iffalse +: A \LaTeX{} theme with the default definitions of token renderer prototypes + for plain \TeX{}. This theme is loaded automatically together with the + package and explicitly loading it has no effect. -User-defined \LaTeX{} themes provide global control over high-level goals. -However, it is often desirable to change only some local aspects of a document. -\LaTeX{} snippets provide syntactic sugar for defining and invoking various -options locally. - -% \fi -% \begin{markdown} -% The \LaTeX{} option with key `snippet` invokes a snippet named \meta{value}: % \end{markdown} % \iffalse %</manual-options> %<*latex> % \fi % \begin{macrocode} -\ExplSyntaxOn -\keys_define:nn - { markdown/latex-options } - { - snippet .code:n = { - \markdownIfSnippetExists{#1} - { - \expandafter\markdownSetup\expandafter{ - \the\csname markdownLaTeXSetupSnippet - \markdownLaTeXThemeName#1\endcsname} - }{ - \markdownError - {Can't~invoke~setup~snippet~#1} - {The~setup~snippet~is~undefined} - } - } - } -\ExplSyntaxOff -% \end{macrocode} -% \iffalse -%</latex> -%<*manual-options> -% \fi -% \par -% \markdownBegin - -Here is how we can use snippets to store options and invoke them later: - -``` tex -\markdownSetupSnippet{romanNumerals}{ - renderers = { - olItemWithNumber = {% - \item[\romannumeral#1\relax.]% - }, - }, -} -\begin{markdown} - -The following ordered list will be preceded by arabic numerals: - -1. wahid -2. aithnayn - -\end{markdown} -\begin{markdown*}{snippet=romanNumerals} - -The following ordered list will be preceded by roman numerals: - -3. tres -4. quattuor - -\end{markdown*} -``````` - -If the `romanNumerals` snippet were defined in the `jdoe/lists` theme, -we could import the `jdoe/lists` theme and use the qualified name -`jdoe/lists/romanNumerals` to invoke the snippet: - -``` tex -\markdownSetup{import=jdoe/lists} -\begin{markdown*}{snippet=jdoe/lists/romanNumerals} - -The following ordered list will be preceded by roman numerals: - -3. tres -4. quattuor - -\end{markdown*} -``````` - -Alternatively, we can use the extended variant of the `import` \LaTeX{} -option that allows us to import the `romanNumerals` snippet to the -current namespace for easier access: - -``` tex -\markdownSetup{ - import = { - jdoe/lists = romanNumerals, - }, -} -\begin{markdown*}{snippet=romanNumerals} - -The following ordered list will be preceded by roman numerals: - -3. tres -4. quattuor - -\end{markdown*} -``````` - -Furthermore, we can also specify the name of the snippet in the current -namespace, which can be different from the name of the snippet in the -`jdoe/lists` theme. For example, we can make the snippet -`jdoe/lists/romanNumerals` available under the name `roman`. - -``` tex -\markdownSetup{ - import = { - jdoe/lists = romanNumerals as roman, - }, -} -\begin{markdown*}{snippet=roman} - -The following ordered list will be preceded by roman numerals: - -3. tres -4. quattuor - -\end{markdown*} -``````` - -Several themes and/or snippets can be loaded at once using the extended -variant of the `import` \LaTeX{} option: - -``` tex -\markdownSetup{ - import = { - jdoe/longpackagename/lists = { - arabic as arabic1, - roman, - alphabetic, - }, - jdoe/anotherlongpackagename/lists = { - arabic as arabic2, - }, - jdoe/yetanotherlongpackagename, - }, -} -``````` - -% \markdownEnd -% \iffalse -%</manual-options> -%<*latex> -% \fi -% \begin{macrocode} -\ExplSyntaxOn -\tl_new:N - \l_@@_latex_import_current_theme_tl -\keys_define:nn - { markdown/latex-options/import } - { -% \end{macrocode} -% \begin{markdown} -% -% If a theme name is given without a list of snippets to import, -% we assume that an empty list was given. -% -% \end{markdown} -% \begin{macrocode} - unknown .default:n = {}, - unknown .code:n = { -% \end{macrocode} -% \begin{markdown} -% -% To ensure that keys containing forward slashes get passed correctly, we -% replace all forward slashes in the input with backslash tokens with category -% code letter and then undo the replacement. This means that if any unbraced -% backslash tokens with category code letter exist in the input, they will be -% replaced with forward slashes. However, this should be extremely rare. -% -% \end{markdown} -% \begin{macrocode} - \tl_set_eq:NN - \l_@@_latex_import_current_theme_tl - \l_keys_key_str - \tl_replace_all:NVn - \l_@@_latex_import_current_theme_tl - \c_backslash_str - { / } -% \end{macrocode} -% \begin{markdown} -% -% Here, we load the \LaTeX{} theme. -% -% \end{markdown} -% \begin{macrocode} - \@@_set_latex_theme:V - \l_@@_latex_import_current_theme_tl +\AtEndOfPackage{ + \markdownLaTeXLoadedtrue % \end{macrocode} % \begin{markdown} % -% Here, we import the \LaTeX{} snippets. +% At the end of the \LaTeX{} module, we load the +% `witiko/markdown/defaults` \LaTeX{} theme (see Section <#sec:themes>) with +% the default definitions for token renderer prototypes unless the option +% `noDefaults` has been enabled (see Section <#sec:plain>). % % \end{markdown} % \begin{macrocode} - \clist_map_inline:nn - { #1 } - { - \regex_extract_once:nnNTF - { ^(.*?)\s+as\s+(.*?)$ } - { ##1 } - \l_tmpa_seq - { - \seq_pop:NN - \l_tmpa_seq - \l_tmpa_tl - \seq_pop:NN - \l_tmpa_seq - \l_tmpa_tl - \seq_pop:NN - \l_tmpa_seq - \l_tmpb_tl - } - { - \tl_set:Nn - \l_tmpa_tl - { ##1 } - \tl_set:Nn - \l_tmpb_tl - { ##1 } - } - \tl_put_left:Nn - \l_tmpa_tl - { / } - \tl_put_left:NV - \l_tmpa_tl - \l_@@_latex_import_current_theme_tl - \@@_latex_setup_snippet:Vx - \l_tmpb_tl - { snippet = { \l_tmpa_tl } } - } - }, - } -\cs_generate_variant:Nn - \tl_replace_all:Nnn - { NVn } -\cs_generate_variant:Nn - \@@_set_latex_theme:n - { V } -\cs_generate_variant:Nn - \@@_latex_setup_snippet:nn - { Vx } -\ExplSyntaxOff -% \end{macrocode} -% \begin{markdown} -% -%#### Plain \TeX{} Interface Options -% Here, we automatically define plain \TeX{} macros and the -% \meta{key}`=`\meta{value} interface for the above \LaTeX{} options. -% -% \end{markdown} -% \begin{macrocode} -\ExplSyntaxOn -\cs_new:Nn \@@_latex_define_option_commands_and_keyvals: - { - \seq_map_inline:Nn - \g_@@_latex_options_seq - { - \@@_plain_tex_define_option_command:n - { ##1 } - } -% \end{macrocode} -% \begin{markdown} -% -% Furthermore, we also define the \meta{key}`=`\meta{value} interface -% for all option macros recognized by the Lua and plain \TeX{} interfaces. -% -% \end{markdown} -% \begin{macrocode} - \seq_map_inline:Nn - \g_@@_option_layers_seq - { - \seq_map_inline:cn - { g_@@_ ##1 _options_seq } - { -% \end{macrocode} -% \begin{markdown} -% -% To make it easier to copy-and-paste options from Pandoc [@macfarlane22] such -% as `fancy_lists`, `header_attributes`, and `pipe_tables`, we accept -% snake\\\_case in addition to camelCase variants of options. As a bonus, -% studies [@sharif10] also show that snake\\\_case is faster to read than -% camelCase. -% -% \end{markdown} -% \begin{macrocode} - \@@_with_various_cases:nn - { ####1 } - { - \@@_latex_define_option_keyval:nnn - { ##1 } - { ####1 } - { ########1 } - } - } - } + \markdownIfOption{noDefaults}{}{ + \markdownSetup{theme=witiko/markdown/defaults} } -\cs_new:Nn \@@_latex_define_option_keyval:nnn - { - \prop_get:cnN - { g_@@_ #1 _option_types_prop } - { #2 } - \l_tmpa_tl - \keys_define:nn - { markdown/latex-options } - { - #3 .code:n = { - \@@_set_option_value:nn - { #2 } - { ##1 } - }, - } - \str_if_eq:VVT - \l_tmpa_tl - \c_@@_option_type_boolean_tl - { - \keys_define:nn - { markdown/latex-options } - { - #3 .default:n = { true }, - } - } -% \end{macrocode} -% \begin{markdown} -% -% For options of type `clist`, we assume that \meta{key} is a regular English -% noun in plural (such as `extensions`) and we also define the -% \meta{singular key}`=`\meta{value} interface, where \meta{singular key} is -% \meta{key} after stripping the trailing -s (such as `extension`). Rather -% than setting the option to \meta{value}, this interface appends \meta{value} -% to the current value as the rightmost item in the list. -% -% \end{markdown} -% \begin{macrocode} - \str_if_eq:VVT - \l_tmpa_tl - \c_@@_option_type_clist_tl - { - \tl_set:Nn - \l_tmpa_tl - { #3 } - \tl_reverse:N - \l_tmpa_tl - \str_if_eq:enF - { - \tl_head:V - \l_tmpa_tl - } - { s } - { - \msg_error:nnn - { markdown } - { malformed-name-for-clist-option } - { #3 } - } - \tl_set:Nx - \l_tmpa_tl - { - \tl_tail:V - \l_tmpa_tl - } - \tl_reverse:N - \l_tmpa_tl - \tl_put_right:Nn - \l_tmpa_tl - { - .code:n = { - \@@_get_option_value:nN - { #2 } - \l_tmpa_tl - \clist_set:NV - \l_tmpa_clist - { \l_tmpa_tl, { ##1 } } - \@@_set_option_value:nV - { #2 } - \l_tmpa_clist - } - } - \keys_define:nV - { markdown/latex-options } - \l_tmpa_tl - } - } -\cs_generate_variant:Nn - \clist_set:Nn - { NV } -\cs_generate_variant:Nn - \keys_define:nn - { nV } -\cs_generate_variant:Nn - \@@_set_option_value:nn - { nV } -\prg_generate_conditional_variant:Nnn - \str_if_eq:nn - { en } - { F } -\msg_new:nnn - { markdown } - { malformed-name-for-clist-option } - { - Clist~option~name~#1~does~not~end~with~-s. - } -\@@_latex_define_option_commands_and_keyvals: -\ExplSyntaxOff -% \end{macrocode} -% \par -% \begin{markdown} -% -% The \Opt{finalizeCache} and \Opt{frozenCache} plain -% \TeX{} options are exposed through \LaTeX{} options with keys `finalizeCache` -% and `frozenCache`. -% -% To ensure compatibility with the `minted` package [@poore17, Section -% 5.1], which supports the `finalizecache` and `frozencache` package options -% with similar semantics, the Markdown package also recognizes these as aliases -% and recognizes them as document class options. By passing `finalizecache` and -% `frozencache` as document class options, you may conveniently control the -% behavior of both packages at once: -% -% ``` tex -% \documentclass[frozencache]{article} -% \usepackage{markdown,minted} -% \begin{document} -% % ... -% \end{document} -% ``````` -% -% We hope that other packages will support the `finalizecache` and -% `frozencache` package options in the future, so that they can become a -% standard interface for preparing \LaTeX{} document sources for distribution. -% -% \end{markdown} -% \begin{macrocode} -\DeclareOption{finalizecache}{\markdownSetup{finalizeCache}} -\DeclareOption{frozencache}{\markdownSetup{frozenCache}} -% \end{macrocode} -% \par -% \begin{markdown} -% -% The following example \LaTeX{} code showcases a possible configuration of -% plain \TeX{} interface options \Opt{hybrid}, \Opt{smartEllipses}, and -% \Opt{cacheDir}. -% ``` tex -% \markdownSetup{ -% hybrid, -% smartEllipses, -% cacheDir = /tmp, -% } -% ``````` -% -%#### Plain \TeX{} Markdown Token Renderers {#latex-renderers} -% -% The \LaTeX{} interface recognizes an option with the `renderers` key, -% whose value must be a list of key-values, where the keys correspond -% to the markdown token renderer macros exposed by the plain \TeX{} -% interface (see Section <#sec:texrenderersuser>) and the values are -% new definitions of these token renderers. -% -% \end{markdown} -% \begin{macrocode} -\ExplSyntaxOn -\cs_new:Nn \@@_latex_define_renderers: - { - \seq_map_function:NN - \g_@@_renderers_seq - \@@_latex_define_renderer:n - } -\cs_new:Nn \@@_latex_define_renderer:n - { - \@@_renderer_tl_to_csname:nN - { #1 } - \l_tmpa_tl - \prop_get:NnN - \g_@@_renderer_arities_prop - { #1 } - \l_tmpb_tl - \@@_latex_define_renderer:ncV - { #1 } - { \l_tmpa_tl } - \l_tmpb_tl - } -\cs_new:Nn \@@_renderer_tl_to_csname:nN - { - \tl_set:Nn - \l_tmpa_tl - { \str_uppercase:n { #1 } } - \tl_set:Nx - #2 - { - markdownRenderer - \tl_head:f { \l_tmpa_tl } - \tl_tail:n { #1 } - } - } -\cs_new:Nn \@@_latex_define_renderer:nNn - { - \@@_with_various_cases:nn - { #1 } - { - \keys_define:nn - { markdown/latex-options/renderers } - { - ##1 .code:n = { - \cs_generate_from_arg_count:NNnn - #2 - \cs_set:Npn - { #3 } - { ####1 } - }, - } - } - } -\cs_generate_variant:Nn - \@@_latex_define_renderer:nNn - { ncV } -\ExplSyntaxOff -% \end{macrocode} -% \par -% \begin{markdown} -% -% The following example \LaTeX{} code showcases a possible configuration of the -% \mref{markdownRendererLink} and \mref{markdownRendererEmphasis} markdown token -% renderers. -% ``` tex -% \markdownSetup{ -% renderers = { -% link = {#4}, \% Render links as the link title. -% emphasis = {\emph{#1}}, \% Render emphasized text via `\emph`. -% } -% } -% ``````` -% -% In addition to exact token renderer names, we also support wildcards -% that match multiple token renderer names. -% -% \end{markdown} -% \begin{macrocode} -\ExplSyntaxOn -\tl_new:N - \l_@@_renderer_definition_tl -\keys_define:nn - { markdown/latex-options/renderers } - { - unknown .code:n = { - \regex_match:nVTF - { \* } - \l_keys_key_str - { - \tl_set:Nn - \l_@@_renderer_definition_tl - { #1 } - \tl_set:NV - \l_tmpa_tl - \l_keys_key_str - \regex_replace_all:nnN - { \* } - { .* } - \l_tmpa_tl - \regex_set:NV - \l_tmpa_regex - \l_tmpa_tl - \int_zero:N - \l_tmpa_int - \seq_map_inline:Nn - \g_@@_renderers_seq - { - \@@_with_various_cases:nn - { ##1 } - { - \regex_match:NnT - \l_tmpa_regex - { ####1 } - { - \@@_renderer_tl_to_csname:nN - { ##1 } - \l_tmpa_tl - \prop_get:NnN - \g_@@_renderer_arities_prop - { ##1 } - \l_tmpb_tl - \cs_generate_from_arg_count:cNVV - { \l_tmpa_tl } - \cs_set:Npn - \l_tmpb_tl - \l_@@_renderer_definition_tl - \int_incr:N - \l_tmpa_int - \@@_with_various_cases_break: - } - } - } - \int_compare:nNnT - { \l_tmpa_int } = { 0 } - { - \msg_error:nnV - { markdown } - { nonmatched-renderer-wildcard } - \l_keys_key_str - } - } - { - \msg_error:nnV - { markdown } - { undefined-renderer } - \l_keys_key_str - } - }, - } -\msg_new:nnn - { markdown } - { undefined-renderer } - { - Renderer~#1~is~undefined. - } -\msg_new:nnn - { markdown } - { nonmatched-renderer-wildcard } - { - Wildcard~#1~matches~no~renderers. - } -\cs_generate_variant:Nn - \regex_set:Nn - { NV } -\cs_generate_variant:Nn - \cs_generate_from_arg_count:NNnn - { cNVV } -\cs_generate_variant:Nn - \msg_error:nnn - { nnV } -\prg_generate_conditional_variant:Nnn - \regex_match:nn - { nV } - { TF } -\ExplSyntaxOff -% \end{macrocode} -% \begin{markdown} -% -%#### Plain \TeX{} Markdown Token Renderer Prototypes {#latex-renderer-prototypes} -% -% The \LaTeX{} interface recognizes an option with the -% `rendererPrototypes` key, whose value must be a list of key-values, -% where the keys correspond to the markdown token renderer prototype -% macros exposed by the plain \TeX{} interface (see Section -% <#sec:texrendererprototypes>) and the values are new definitions of -% these token renderer prototypes. -% -% \end{markdown} -% \begin{macrocode} -\ExplSyntaxOn -\cs_new:Nn \@@_latex_define_renderer_prototypes: - { - \seq_map_function:NN - \g_@@_renderers_seq - \@@_latex_define_renderer_prototype:n - } -\cs_new:Nn \@@_latex_define_renderer_prototype:n - { - \@@_renderer_prototype_tl_to_csname:nN - { #1 } - \l_tmpa_tl - \prop_get:NnN - \g_@@_renderer_arities_prop - { #1 } - \l_tmpb_tl - \@@_latex_define_renderer_prototype:ncV - { #1 } - { \l_tmpa_tl } - \l_tmpb_tl - } -\cs_new:Nn \@@_latex_define_renderer_prototype:nNn - { - \@@_with_various_cases:nn - { #1 } - { - \keys_define:nn - { markdown/latex-options/renderer-prototypes } - { - ##1 .code:n = { - \cs_generate_from_arg_count:NNnn - #2 - \cs_set:Npn - { #3 } - { ####1 } - }, - } - } - } -\cs_generate_variant:Nn - \@@_latex_define_renderer_prototype:nNn - { ncV } -\ExplSyntaxOff +} % \end{macrocode} -% \par -% \begin{markdown} -% -% The following example \LaTeX{} code showcases a possible configuration of the -% `\markdownRendererImagePrototype` and `\markdownRendererCodeSpanPrototype` -% markdown token renderer prototypes. -% ``` tex -% \markdownSetup{ -% rendererPrototypes = { -% image = {\includegraphics{#2}}, -% codeSpan = {\texttt{#1}}, \% Render inline code via `\texttt`. -% } -% } -% ``````` -% -% In addition to exact token renderer prototype names, we also support -% wildcards that match multiple token renderer prototype names. -% -% \end{markdown} +% \iffalse +%</latex> +%<*themes-witiko-markdown-defaults-latex> +% \fi % \begin{macrocode} -\ExplSyntaxOn -\tl_new:N - \l_@@_renderer_prototype_definition_tl -\keys_define:nn - { markdown/latex-options/renderer-prototypes } - { - unknown .code:n = { - \regex_match:nVTF - { \* } - \l_keys_key_str - { - \tl_set:Nn - \l_@@_renderer_prototype_definition_tl - { #1 } - \tl_set:NV - \l_tmpa_tl - \l_keys_key_str - \regex_replace_all:nnN - { \* } - { .* } - \l_tmpa_tl - \regex_set:NV - \l_tmpa_regex - \l_tmpa_tl - \int_zero:N - \l_tmpa_int - \seq_map_inline:Nn - \g_@@_renderers_seq - { - \@@_with_various_cases:nn - { ##1 } - { - \regex_match:NnT - \l_tmpa_regex - { ####1 } - { - \@@_renderer_prototype_tl_to_csname:nN - { ##1 } - \l_tmpa_tl - \prop_get:NnN - \g_@@_renderer_arities_prop - { ##1 } - \l_tmpb_tl - \cs_generate_from_arg_count:cNVV - { \l_tmpa_tl } - \cs_set:Npn - \l_tmpb_tl - \l_@@_renderer_prototype_definition_tl - \int_incr:N - \l_tmpa_int - \@@_with_various_cases_break: - } - } - } - \int_compare:nNnT - { \l_tmpa_int } = { 0 } - { - \msg_error:nnV - { markdown } - { nonmatched-renderer-prototype-wildcard } - \l_keys_key_str - } - } - { - \msg_error:nnV - { markdown } - { undefined-renderer-prototype } - \l_keys_key_str - } - }, - } -\msg_new:nnn - { markdown } - { undefined-renderer-prototype } - { - Renderer~prototype~#1~is~undefined. - } -\msg_new:nnn - { markdown } - { nonmatched-renderer-prototype-wildcard } - { - Wildcard~#1~matches~no~renderer~prototypes. - } -\cs_generate_variant:Nn - \regex_set:Nn - { NV } -\cs_generate_variant:Nn - \cs_generate_from_arg_count:NNnn - { cNVV } -\cs_generate_variant:Nn - \msg_error:nnn - { nnV } -\prg_generate_conditional_variant:Nnn - \regex_match:nn - { nV } - { TF } -\ExplSyntaxOff +\ProvidesPackage{markdownthemewitiko_markdown_defaults}[2024/01/03]% % \end{macrocode} -% \begin{markdown} -% % \iffalse -%</latex> +%</themes-witiko-markdown-defaults-latex> %<*context> % \fi +% \par +% \begin{markdown} +% +% Please, see Section <#sec:latex-themes-implementation> for implementation +% details of the built-in \LaTeX{} themes. % % \Hologo{ConTeXt} Interface {#contextinterface} %---------------------------- % +% \end{markdown} % \iffalse %</context> %<*manual-interfaces> @@ -20297,7 +21658,7 @@ following content: $\sqrt{-1}$ *equals* $i$. \stopmarkdown -\setupmarkdown[hybrid = yes] +\setupmarkdown[texmathdollars = yes] \startmarkdown $\sqrt{-1}$ *equals* $i$. \stopmarkdown @@ -20306,7 +21667,7 @@ $\sqrt{-1}$ *equals* $i$. ``````` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +context --luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: @@ -20320,6 +21681,30 @@ following text: %</manual-interfaces> %<*context> % \fi +% \begin{markdown} +% +% To determine whether \Hologo{ConTeXt} is the top layer or if there are other +% layers above \Hologo{ConTeXt}, we take a look on whether the +% \mref{c_@@_top_layer_tl} token list has already been defined. If not, +% we will assume that \Hologo{ConTeXt} is the top layer. +% +% \end{markdown} +% \begin{macrocode} +\ExplSyntaxOn +\tl_const:Nn \c_@@_option_layer_context_tl { context } +\cs_generate_variant:Nn + \tl_const:Nn + { NV } +\tl_if_exist:NF + \c_@@_top_layer_tl + { + \tl_const:NV + \c_@@_top_layer_tl + \c_@@_option_layer_context_tl + } +\ExplSyntaxOff +% \end{macrocode} +% \begin{markdown} % % The \Hologo{ConTeXt} interface provides a start-stop macro pair for the % typesetting of markdown input from within \Hologo{ConTeXt} and facilities for @@ -20331,19 +21716,6 @@ following text: % \begin{macrocode} \writestatus{loading}{ConTeXt User Module / markdown}% \startmodule[markdown] -\unprotect -% \end{macrocode} -% \par -% \begin{markdown} -% -% The \Hologo{ConTeXt} implementation redefines the plain \TeX{} logging macros -% (see Section <#sec:tex-interface-logging>) to use the \Hologo{ConTeXt} -% `\writestatus` macro. -% -% \end{markdown} -% \begin{macrocode} -\def\markdownInfo#1{\writestatus{markdown}{#1.}}% -\def\markdownWarning#1{\writestatus{markdown\space warn}{#1.}}% \def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\_\do\%\do\~}% \input markdown/markdown @@ -20362,7 +21734,7 @@ following text: %### Typesetting Markdown % The interface exposes the \mdef{startmarkdown} and \mdef{stopmarkdown} macro % pair for the typesetting of a markdown document fragment, and defines the -% \mdef{inputmarkdown} command. +% \mdef{inputmarkdown} macro. % % \end{markdown} % \begin{macrocode} @@ -20423,21 +21795,16 @@ following text: % \TeX{} interface (see Section <#sec:tex-options>). % % The \Hologo{ConTeXt} options may be specified when using the -% \mref{inputmarkdown} macro (see Section <#sec:contextinterface>), or via the -% \mdef{setupmarkdown} macro. The \mref{setupmarkdown} macro receives the -% options to set up as its only argument: +% \mref{inputmarkdown} macro (see Section <#sec:contextinterface>), +% via the \mref{markdownSetup} macro, or via the \mdef{setupmarkdown}`[#1]` +% macro, which is an alias for \mref{markdownSetup}`{#1}`. % % \end{markdown} % \begin{macrocode} \ExplSyntaxOn -\cs_new:Nn - \@@_setup:n - { - \keys_set:nn - { markdown/context-options } - { #1 } - } -\long\def\setupmarkdown[#1] +\cs_new:Npn + \setupmarkdown + [ #1 ] { \@@_setup:n { #1 } @@ -20446,51 +21813,14 @@ following text: % \end{macrocode} % \begin{markdown} % -%#### \Hologo{ConTeXt} Interface Options -% We define the \meta{key}`=`\meta{value} interface for all option macros -% recognized by the Lua and plain \TeX{} interfaces. -% -% \end{markdown} -% \begin{macrocode} -\ExplSyntaxOn -\cs_new:Nn \@@_context_define_option_commands_and_keyvals: - { - \seq_map_inline:Nn - \g_@@_option_layers_seq - { - \seq_map_inline:cn - { g_@@_ ##1 _options_seq } - { -% \end{macrocode} -% \begin{markdown} -% -% To make it easier to copy-and-paste options from Pandoc [@macfarlane22] such -% as `fancy_lists`, `header_attributes`, and `pipe_tables`, we accept -% snake\\\_case in addition to camelCase variants of options. As a bonus, -% studies [@sharif10] also show that snake\\\_case is faster to read than -% camelCase. -% -% \end{markdown} -% \begin{macrocode} - \@@_with_various_cases:nn - { ####1 } - { - \@@_context_define_option_keyval:nnn - { ##1 } - { ####1 } - { ########1 } - } - } - } - } -% \end{macrocode} -% \begin{markdown} +%#### Generating Plain \TeX{} Option Macros and Key-Values % -% Furthermore, we also accept caseless variants of options in line with the -% style of \Hologo{ConTeXt}. +% Unlike plain \TeX{}, we also accept caseless variants of options +% in line with the style of \Hologo{ConTeXt}. % % \end{markdown} % \begin{macrocode} +\ExplSyntaxOn \cs_new:Nn \@@_caseless:N { \regex_replace_all:nnN @@ -20502,52 +21832,89 @@ following text: { #1 } } \seq_gput_right:Nn \g_@@_cases_seq { @@_caseless:N } -\cs_new:Nn \@@_context_define_option_keyval:nnn +% \end{macrocode} +% \begin{markdown} +% +% If \Hologo{ConTeXt} is the top layer, we use the +% \mref{@@_define_option_commands_and_keyvals:}, \mref{@@_define_renderers:}, +% and \mref{@@_define_renderer_prototypes:} macro to define plain \TeX{} +% option, token renderer, and token renderer prototype macros and key-values +% immediately. Otherwise, we postpone the definition until the upper layers +% have been loaded. +% +% \end{markdown} +% \begin{macrocode} +\str_if_eq:VVT + \c_@@_top_layer_tl + \c_@@_option_layer_context_tl { - \prop_get:cnN - { g_@@_ #1 _option_types_prop } - { #2 } - \l_tmpa_tl - \keys_define:nn - { markdown/context-options } - { - #3 .code:n = { - \tl_set:Nx - \l_tmpa_tl - { - \str_case:nnF - { ##1 } - { - { yes } { true } - { no } { false } - } - { ##1 } - } - \@@_set_option_value:nV - { #2 } - \l_tmpa_tl - }, - } - \str_if_eq:VVT - \l_tmpa_tl - \c_@@_option_type_boolean_tl - { - \keys_define:nn - { markdown/context-options } - { - #3 .default:n = { true }, - } - } + \@@_define_option_commands_and_keyvals: + \@@_define_renderers: + \@@_define_renderer_prototypes: } -\cs_generate_variant:Nn - \@@_set_option_value:nn - { nV } -\@@_context_define_option_commands_and_keyvals: \ExplSyntaxOff % \end{macrocode} -% \par +% \iffalse +%</context> +%<*manual-options> +% \fi +% \begin{markdown} + +### Themes + +% In Section~\ref{sec:themes}, we described the concept of themes. +In \Hologo{ConTeXt}, we expand on the concept of +% themes\iffalse +[themes](#themes) +% \fi +by allowing a theme to be a full-blown \Hologo{ConTeXt} module. Specifically, +the key-values `theme`=\meta{theme name} and `import`=\meta{theme name} load a +\Hologo{ConTeXt} module named `t-markdowntheme`\meta{munged theme name}`.tex` +if it exists and a \TeX{} document named `markdowntheme`\meta{munged theme +name}`.tex` otherwise. + +Having the Markdown package automatically load either the generic `.tex` +*theme file* or the \Hologo{ConTeXt}-specific `t-*.tex` theme file allows +developers to have a single *theme file*, when the theme is small or the +difference between \TeX{} formats is unimportant, and scale up to separate +theme files native to different \TeX{} formats for large multi-format themes, +where different code is needed for different \TeX{} formats. To enable code +reuse, developers can load the `.tex` theme file from the `t-*.tex` theme file +using the \mref{markdownLoadPlainTeXTheme} macro. + +For example, to load a theme named `witiko/tilde` in your document: + +``` tex +\usemodule[t][markdown] +\setupmarkdown[import=witiko/tilde] +``````` + +Built-in \Hologo{ConTeXt} themes provided with the Markdown package include: + +\pkg{witiko/markdown/defaults} + +: A \Hologo{ConTeXt} theme with the default definitions of token renderer + prototypes for plain \TeX{}. This theme is loaded automatically together + with the package and explicitly loading it has no effect. + +% \end{markdown} +% \iffalse +%</manual-options> +%<*themes-witiko-markdown-defaults-context> +% \fi +% \begin{macrocode} +\startmodule[markdownthemewitiko_markdown_defaults] +\unprotect +% \end{macrocode} +% \iffalse +%</themes-witiko-markdown-defaults-context> +%<*manual-options> +% \fi % \begin{markdown} % +% Please, see Section <#sec:context-themes-implementation> for implementation +% details of the built-in \Hologo{ConTeXt} themes. +% % Implementation {#implementation} %================ % @@ -20564,7 +21931,7 @@ following text: % % \end{markdown} % \iffalse -%</context> +%</manual-options> %<*lua> % \fi % \begin{markdown} @@ -20587,9 +21954,9 @@ following text: % \begin{macrocode} local upper, format, length = string.upper, string.format, string.len -local P, R, S, V, C, Cg, Cb, Cmt, Cc, Ct, B, Cs, any = +local P, R, S, V, C, Cg, Cb, Cmt, Cc, Ct, B, Cs, Cp, any = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.C, lpeg.Cg, lpeg.Cb, - lpeg.Cmt, lpeg.Cc, lpeg.Ct, lpeg.B, lpeg.Cs, lpeg.P(1) + lpeg.Cmt, lpeg.Cc, lpeg.Ct, lpeg.B, lpeg.Cs, lpeg.Cp, lpeg.P(1) % \end{macrocode} % \par % \begin{markdown} @@ -20949,13 +22316,13 @@ local character_entities = { ["Tab"] = 9, ["NewLine"] = 10, ["excl"] = 33, - ["quot"] = 34, ["QUOT"] = 34, + ["quot"] = 34, ["num"] = 35, ["dollar"] = 36, ["percnt"] = 37, - ["amp"] = 38, ["AMP"] = 38, + ["amp"] = 38, ["apos"] = 39, ["lpar"] = 40, ["rpar"] = 41, @@ -20967,31 +22334,36 @@ local character_entities = { ["sol"] = 47, ["colon"] = 58, ["semi"] = 59, - ["lt"] = 60, ["LT"] = 60, + ["lt"] = 60, + ["nvlt"] = {60, 8402}, + ["bne"] = {61, 8421}, ["equals"] = 61, - ["gt"] = 62, ["GT"] = 62, + ["gt"] = 62, + ["nvgt"] = {62, 8402}, ["quest"] = 63, ["commat"] = 64, - ["lsqb"] = 91, ["lbrack"] = 91, + ["lsqb"] = 91, ["bsol"] = 92, - ["rsqb"] = 93, ["rbrack"] = 93, + ["rsqb"] = 93, ["Hat"] = 94, + ["UnderBar"] = 95, ["lowbar"] = 95, - ["grave"] = 96, ["DiacriticalGrave"] = 96, - ["lcub"] = 123, + ["grave"] = 96, + ["fjlig"] = {102, 106}, ["lbrace"] = 123, + ["lcub"] = 123, + ["VerticalLine"] = 124, ["verbar"] = 124, ["vert"] = 124, - ["VerticalLine"] = 124, - ["rcub"] = 125, ["rbrace"] = 125, - ["nbsp"] = 160, + ["rcub"] = 125, ["NonBreakingSpace"] = 160, + ["nbsp"] = 160, ["iexcl"] = 161, ["cent"] = 162, ["pound"] = 163, @@ -21000,36 +22372,35 @@ local character_entities = { ["brvbar"] = 166, ["sect"] = 167, ["Dot"] = 168, - ["die"] = 168, ["DoubleDot"] = 168, + ["die"] = 168, ["uml"] = 168, - ["copy"] = 169, ["COPY"] = 169, + ["copy"] = 169, ["ordf"] = 170, ["laquo"] = 171, ["not"] = 172, ["shy"] = 173, - ["reg"] = 174, - ["circledR"] = 174, ["REG"] = 174, + ["circledR"] = 174, + ["reg"] = 174, ["macr"] = 175, - ["OverBar"] = 175, ["strns"] = 175, ["deg"] = 176, + ["PlusMinus"] = 177, ["plusmn"] = 177, ["pm"] = 177, - ["PlusMinus"] = 177, ["sup2"] = 178, ["sup3"] = 179, - ["acute"] = 180, ["DiacriticalAcute"] = 180, + ["acute"] = 180, ["micro"] = 181, ["para"] = 182, - ["middot"] = 183, - ["centerdot"] = 183, ["CenterDot"] = 183, - ["cedil"] = 184, + ["centerdot"] = 183, + ["middot"] = 183, ["Cedilla"] = 184, + ["cedil"] = 184, ["sup1"] = 185, ["ordm"] = 186, ["raquo"] = 187, @@ -21044,6 +22415,7 @@ local character_entities = { ["Atilde"] = 195, ["Auml"] = 196, ["Aring"] = 197, + ["angst"] = 197, ["AElig"] = 198, ["Ccedil"] = 199, ["Egrave"] = 200, @@ -21093,8 +22465,8 @@ local character_entities = { ["ocirc"] = 244, ["otilde"] = 245, ["ouml"] = 246, - ["divide"] = 247, ["div"] = 247, + ["divide"] = 247, ["oslash"] = 248, ["ugrave"] = 249, ["uacute"] = 250, @@ -21229,20 +22601,19 @@ local character_entities = { ["gacute"] = 501, ["jmath"] = 567, ["circ"] = 710, - ["caron"] = 711, ["Hacek"] = 711, - ["breve"] = 728, + ["caron"] = 711, ["Breve"] = 728, - ["dot"] = 729, + ["breve"] = 728, ["DiacriticalDot"] = 729, + ["dot"] = 729, ["ring"] = 730, ["ogon"] = 731, - ["tilde"] = 732, ["DiacriticalTilde"] = 732, - ["dblac"] = 733, + ["tilde"] = 732, ["DiacriticalDoubleAcute"] = 733, + ["dblac"] = 733, ["DownBreve"] = 785, - ["UnderBar"] = 818, ["Alpha"] = 913, ["Beta"] = 914, ["Gamma"] = 915, @@ -21267,12 +22638,12 @@ local character_entities = { ["Chi"] = 935, ["Psi"] = 936, ["Omega"] = 937, + ["ohm"] = 937, ["alpha"] = 945, ["beta"] = 946, ["gamma"] = 947, ["delta"] = 948, - ["epsiv"] = 949, - ["varepsilon"] = 949, + ["epsi"] = 949, ["epsilon"] = 949, ["zeta"] = 950, ["eta"] = 951, @@ -21286,38 +22657,39 @@ local character_entities = { ["omicron"] = 959, ["pi"] = 960, ["rho"] = 961, + ["sigmaf"] = 962, ["sigmav"] = 962, ["varsigma"] = 962, - ["sigmaf"] = 962, ["sigma"] = 963, ["tau"] = 964, ["upsi"] = 965, ["upsilon"] = 965, ["phi"] = 966, - ["phiv"] = 966, - ["varphi"] = 966, ["chi"] = 967, ["psi"] = 968, ["omega"] = 969, + ["thetasym"] = 977, ["thetav"] = 977, ["vartheta"] = 977, - ["thetasym"] = 977, ["Upsi"] = 978, ["upsih"] = 978, + ["phiv"] = 981, ["straightphi"] = 981, + ["varphi"] = 981, ["piv"] = 982, ["varpi"] = 982, ["Gammad"] = 988, - ["gammad"] = 989, ["digamma"] = 989, + ["gammad"] = 989, ["kappav"] = 1008, ["varkappa"] = 1008, ["rhov"] = 1009, ["varrho"] = 1009, - ["epsi"] = 1013, + ["epsiv"] = 1013, ["straightepsilon"] = 1013, - ["bepsi"] = 1014, + ["varepsilon"] = 1013, ["backepsilon"] = 1014, + ["bepsi"] = 1014, ["IOcy"] = 1025, ["DJcy"] = 1026, ["GJcy"] = 1027, @@ -21416,40 +22788,40 @@ local character_entities = { ["emsp14"] = 8197, ["numsp"] = 8199, ["puncsp"] = 8200, - ["thinsp"] = 8201, ["ThinSpace"] = 8201, - ["hairsp"] = 8202, + ["thinsp"] = 8201, ["VeryThinSpace"] = 8202, - ["ZeroWidthSpace"] = 8203, - ["NegativeVeryThinSpace"] = 8203, - ["NegativeThinSpace"] = 8203, + ["hairsp"] = 8202, ["NegativeMediumSpace"] = 8203, ["NegativeThickSpace"] = 8203, + ["NegativeThinSpace"] = 8203, + ["NegativeVeryThinSpace"] = 8203, + ["ZeroWidthSpace"] = 8203, ["zwnj"] = 8204, ["zwj"] = 8205, ["lrm"] = 8206, ["rlm"] = 8207, - ["hyphen"] = 8208, ["dash"] = 8208, + ["hyphen"] = 8208, ["ndash"] = 8211, ["mdash"] = 8212, ["horbar"] = 8213, ["Verbar"] = 8214, ["Vert"] = 8214, - ["lsquo"] = 8216, ["OpenCurlyQuote"] = 8216, + ["lsquo"] = 8216, + ["CloseCurlyQuote"] = 8217, ["rsquo"] = 8217, ["rsquor"] = 8217, - ["CloseCurlyQuote"] = 8217, ["lsquor"] = 8218, ["sbquo"] = 8218, - ["ldquo"] = 8220, ["OpenCurlyDoubleQuote"] = 8220, + ["ldquo"] = 8220, + ["CloseCurlyDoubleQuote"] = 8221, ["rdquo"] = 8221, ["rdquor"] = 8221, - ["CloseCurlyDoubleQuote"] = 8221, - ["ldquor"] = 8222, ["bdquo"] = 8222, + ["ldquor"] = 8222, ["dagger"] = 8224, ["Dagger"] = 8225, ["ddagger"] = 8225, @@ -21463,10 +22835,11 @@ local character_entities = { ["prime"] = 8242, ["Prime"] = 8243, ["tprime"] = 8244, - ["bprime"] = 8245, ["backprime"] = 8245, + ["bprime"] = 8245, ["lsaquo"] = 8249, ["rsaquo"] = 8250, + ["OverBar"] = 8254, ["oline"] = 8254, ["caret"] = 8257, ["hybull"] = 8259, @@ -21474,6 +22847,7 @@ local character_entities = { ["bsemi"] = 8271, ["qprime"] = 8279, ["MediumSpace"] = 8287, + ["ThickSpace"] = {8287, 8202}, ["NoBreak"] = 8288, ["ApplyFunction"] = 8289, ["af"] = 8289, @@ -21482,34 +22856,34 @@ local character_entities = { ["InvisibleComma"] = 8291, ["ic"] = 8291, ["euro"] = 8364, - ["tdot"] = 8411, ["TripleDot"] = 8411, + ["tdot"] = 8411, ["DotDot"] = 8412, ["Copf"] = 8450, ["complexes"] = 8450, ["incare"] = 8453, ["gscr"] = 8458, - ["hamilt"] = 8459, ["HilbertSpace"] = 8459, ["Hscr"] = 8459, + ["hamilt"] = 8459, ["Hfr"] = 8460, ["Poincareplane"] = 8460, - ["quaternions"] = 8461, ["Hopf"] = 8461, + ["quaternions"] = 8461, ["planckh"] = 8462, - ["planck"] = 8463, ["hbar"] = 8463, - ["plankv"] = 8463, ["hslash"] = 8463, + ["planck"] = 8463, + ["plankv"] = 8463, ["Iscr"] = 8464, ["imagline"] = 8464, - ["image"] = 8465, + ["Ifr"] = 8465, ["Im"] = 8465, + ["image"] = 8465, ["imagpart"] = 8465, - ["Ifr"] = 8465, + ["Laplacetrf"] = 8466, ["Lscr"] = 8466, ["lagran"] = 8466, - ["Laplacetrf"] = 8466, ["ell"] = 8467, ["Nopf"] = 8469, ["naturals"] = 8469, @@ -21519,40 +22893,38 @@ local character_entities = { ["wp"] = 8472, ["Popf"] = 8473, ["primes"] = 8473, - ["rationals"] = 8474, ["Qopf"] = 8474, + ["rationals"] = 8474, ["Rscr"] = 8475, ["realine"] = 8475, - ["real"] = 8476, ["Re"] = 8476, - ["realpart"] = 8476, ["Rfr"] = 8476, - ["reals"] = 8477, + ["real"] = 8476, + ["realpart"] = 8476, ["Ropf"] = 8477, + ["reals"] = 8477, ["rx"] = 8478, - ["trade"] = 8482, ["TRADE"] = 8482, - ["integers"] = 8484, + ["trade"] = 8482, ["Zopf"] = 8484, - ["ohm"] = 8486, + ["integers"] = 8484, ["mho"] = 8487, ["Zfr"] = 8488, ["zeetrf"] = 8488, ["iiota"] = 8489, - ["angst"] = 8491, - ["bernou"] = 8492, ["Bernoullis"] = 8492, ["Bscr"] = 8492, - ["Cfr"] = 8493, + ["bernou"] = 8492, ["Cayleys"] = 8493, + ["Cfr"] = 8493, ["escr"] = 8495, ["Escr"] = 8496, ["expectation"] = 8496, - ["Fscr"] = 8497, ["Fouriertrf"] = 8497, - ["phmmat"] = 8499, + ["Fscr"] = 8497, ["Mellintrf"] = 8499, ["Mscr"] = 8499, + ["phmmat"] = 8499, ["order"] = 8500, ["orderof"] = 8500, ["oscr"] = 8500, @@ -21566,8 +22938,8 @@ local character_entities = { ["DifferentialD"] = 8518, ["dd"] = 8518, ["ExponentialE"] = 8519, - ["exponentiale"] = 8519, ["ee"] = 8519, + ["exponentiale"] = 8519, ["ImaginaryI"] = 8520, ["ii"] = 8520, ["frac13"] = 8531, @@ -21582,46 +22954,47 @@ local character_entities = { ["frac38"] = 8540, ["frac58"] = 8541, ["frac78"] = 8542, + ["LeftArrow"] = 8592, + ["ShortLeftArrow"] = 8592, ["larr"] = 8592, ["leftarrow"] = 8592, - ["LeftArrow"] = 8592, ["slarr"] = 8592, - ["ShortLeftArrow"] = 8592, + ["ShortUpArrow"] = 8593, + ["UpArrow"] = 8593, ["uarr"] = 8593, ["uparrow"] = 8593, - ["UpArrow"] = 8593, - ["ShortUpArrow"] = 8593, + ["RightArrow"] = 8594, + ["ShortRightArrow"] = 8594, ["rarr"] = 8594, ["rightarrow"] = 8594, - ["RightArrow"] = 8594, ["srarr"] = 8594, - ["ShortRightArrow"] = 8594, - ["darr"] = 8595, - ["downarrow"] = 8595, ["DownArrow"] = 8595, ["ShortDownArrow"] = 8595, + ["darr"] = 8595, + ["downarrow"] = 8595, + ["LeftRightArrow"] = 8596, ["harr"] = 8596, ["leftrightarrow"] = 8596, - ["LeftRightArrow"] = 8596, - ["varr"] = 8597, - ["updownarrow"] = 8597, ["UpDownArrow"] = 8597, - ["nwarr"] = 8598, + ["updownarrow"] = 8597, + ["varr"] = 8597, ["UpperLeftArrow"] = 8598, + ["nwarr"] = 8598, ["nwarrow"] = 8598, - ["nearr"] = 8599, ["UpperRightArrow"] = 8599, + ["nearr"] = 8599, ["nearrow"] = 8599, + ["LowerRightArrow"] = 8600, ["searr"] = 8600, ["searrow"] = 8600, - ["LowerRightArrow"] = 8600, + ["LowerLeftArrow"] = 8601, ["swarr"] = 8601, ["swarrow"] = 8601, - ["LowerLeftArrow"] = 8601, ["nlarr"] = 8602, ["nleftarrow"] = 8602, ["nrarr"] = 8603, ["nrightarrow"] = 8603, + ["nrarrw"] = {8605, 824}, ["rarrw"] = 8605, ["rightsquigarrow"] = 8605, ["Larr"] = 8606, @@ -21638,27 +23011,27 @@ local character_entities = { ["mapstoleft"] = 8612, ["UpTeeArrow"] = 8613, ["mapstoup"] = 8613, - ["map"] = 8614, ["RightTeeArrow"] = 8614, + ["map"] = 8614, ["mapsto"] = 8614, ["DownTeeArrow"] = 8615, ["mapstodown"] = 8615, - ["larrhk"] = 8617, ["hookleftarrow"] = 8617, - ["rarrhk"] = 8618, + ["larrhk"] = 8617, ["hookrightarrow"] = 8618, + ["rarrhk"] = 8618, ["larrlp"] = 8619, ["looparrowleft"] = 8619, - ["rarrlp"] = 8620, ["looparrowright"] = 8620, + ["rarrlp"] = 8620, ["harrw"] = 8621, ["leftrightsquigarrow"] = 8621, ["nharr"] = 8622, ["nleftrightarrow"] = 8622, - ["lsh"] = 8624, ["Lsh"] = 8624, - ["rsh"] = 8625, + ["lsh"] = 8624, ["Rsh"] = 8625, + ["rsh"] = 8625, ["ldsh"] = 8626, ["rdsh"] = 8627, ["crarr"] = 8629, @@ -21666,456 +23039,505 @@ local character_entities = { ["curvearrowleft"] = 8630, ["curarr"] = 8631, ["curvearrowright"] = 8631, - ["olarr"] = 8634, ["circlearrowleft"] = 8634, - ["orarr"] = 8635, + ["olarr"] = 8634, ["circlearrowright"] = 8635, - ["lharu"] = 8636, + ["orarr"] = 8635, ["LeftVector"] = 8636, ["leftharpoonup"] = 8636, - ["lhard"] = 8637, - ["leftharpoondown"] = 8637, + ["lharu"] = 8636, ["DownLeftVector"] = 8637, + ["leftharpoondown"] = 8637, + ["lhard"] = 8637, + ["RightUpVector"] = 8638, ["uharr"] = 8638, ["upharpoonright"] = 8638, - ["RightUpVector"] = 8638, + ["LeftUpVector"] = 8639, ["uharl"] = 8639, ["upharpoonleft"] = 8639, - ["LeftUpVector"] = 8639, - ["rharu"] = 8640, ["RightVector"] = 8640, + ["rharu"] = 8640, ["rightharpoonup"] = 8640, + ["DownRightVector"] = 8641, ["rhard"] = 8641, ["rightharpoondown"] = 8641, - ["DownRightVector"] = 8641, - ["dharr"] = 8642, ["RightDownVector"] = 8642, + ["dharr"] = 8642, ["downharpoonright"] = 8642, - ["dharl"] = 8643, ["LeftDownVector"] = 8643, + ["dharl"] = 8643, ["downharpoonleft"] = 8643, - ["rlarr"] = 8644, - ["rightleftarrows"] = 8644, ["RightArrowLeftArrow"] = 8644, - ["udarr"] = 8645, + ["rightleftarrows"] = 8644, + ["rlarr"] = 8644, ["UpArrowDownArrow"] = 8645, - ["lrarr"] = 8646, - ["leftrightarrows"] = 8646, + ["udarr"] = 8645, ["LeftArrowRightArrow"] = 8646, - ["llarr"] = 8647, + ["leftrightarrows"] = 8646, + ["lrarr"] = 8646, ["leftleftarrows"] = 8647, - ["uuarr"] = 8648, + ["llarr"] = 8647, ["upuparrows"] = 8648, - ["rrarr"] = 8649, + ["uuarr"] = 8648, ["rightrightarrows"] = 8649, + ["rrarr"] = 8649, ["ddarr"] = 8650, ["downdownarrows"] = 8650, - ["lrhar"] = 8651, ["ReverseEquilibrium"] = 8651, ["leftrightharpoons"] = 8651, - ["rlhar"] = 8652, - ["rightleftharpoons"] = 8652, + ["lrhar"] = 8651, ["Equilibrium"] = 8652, - ["nlArr"] = 8653, + ["rightleftharpoons"] = 8652, + ["rlhar"] = 8652, ["nLeftarrow"] = 8653, - ["nhArr"] = 8654, + ["nlArr"] = 8653, ["nLeftrightarrow"] = 8654, - ["nrArr"] = 8655, + ["nhArr"] = 8654, ["nRightarrow"] = 8655, - ["lArr"] = 8656, - ["Leftarrow"] = 8656, + ["nrArr"] = 8655, ["DoubleLeftArrow"] = 8656, - ["uArr"] = 8657, - ["Uparrow"] = 8657, + ["Leftarrow"] = 8656, + ["lArr"] = 8656, ["DoubleUpArrow"] = 8657, - ["rArr"] = 8658, - ["Rightarrow"] = 8658, - ["Implies"] = 8658, + ["Uparrow"] = 8657, + ["uArr"] = 8657, ["DoubleRightArrow"] = 8658, - ["dArr"] = 8659, - ["Downarrow"] = 8659, + ["Implies"] = 8658, + ["Rightarrow"] = 8658, + ["rArr"] = 8658, ["DoubleDownArrow"] = 8659, - ["hArr"] = 8660, - ["Leftrightarrow"] = 8660, + ["Downarrow"] = 8659, + ["dArr"] = 8659, ["DoubleLeftRightArrow"] = 8660, + ["Leftrightarrow"] = 8660, + ["hArr"] = 8660, ["iff"] = 8660, - ["vArr"] = 8661, - ["Updownarrow"] = 8661, ["DoubleUpDownArrow"] = 8661, + ["Updownarrow"] = 8661, + ["vArr"] = 8661, ["nwArr"] = 8662, ["neArr"] = 8663, ["seArr"] = 8664, ["swArr"] = 8665, - ["lAarr"] = 8666, ["Lleftarrow"] = 8666, - ["rAarr"] = 8667, + ["lAarr"] = 8666, ["Rrightarrow"] = 8667, + ["rAarr"] = 8667, ["zigrarr"] = 8669, - ["larrb"] = 8676, ["LeftArrowBar"] = 8676, - ["rarrb"] = 8677, + ["larrb"] = 8676, ["RightArrowBar"] = 8677, - ["duarr"] = 8693, + ["rarrb"] = 8677, ["DownArrowUpArrow"] = 8693, + ["duarr"] = 8693, ["loarr"] = 8701, ["roarr"] = 8702, ["hoarr"] = 8703, - ["forall"] = 8704, ["ForAll"] = 8704, + ["forall"] = 8704, ["comp"] = 8705, ["complement"] = 8705, - ["part"] = 8706, ["PartialD"] = 8706, - ["exist"] = 8707, + ["npart"] = {8706, 824}, + ["part"] = 8706, ["Exists"] = 8707, - ["nexist"] = 8708, + ["exist"] = 8707, ["NotExists"] = 8708, + ["nexist"] = 8708, ["nexists"] = 8708, ["empty"] = 8709, ["emptyset"] = 8709, ["emptyv"] = 8709, ["varnothing"] = 8709, - ["nabla"] = 8711, ["Del"] = 8711, - ["isin"] = 8712, - ["isinv"] = 8712, + ["nabla"] = 8711, ["Element"] = 8712, ["in"] = 8712, - ["notin"] = 8713, + ["isin"] = 8712, + ["isinv"] = 8712, ["NotElement"] = 8713, + ["notin"] = 8713, ["notinva"] = 8713, - ["niv"] = 8715, ["ReverseElement"] = 8715, - ["ni"] = 8715, ["SuchThat"] = 8715, + ["ni"] = 8715, + ["niv"] = 8715, + ["NotReverseElement"] = 8716, ["notni"] = 8716, ["notniva"] = 8716, - ["NotReverseElement"] = 8716, - ["prod"] = 8719, ["Product"] = 8719, - ["coprod"] = 8720, + ["prod"] = 8719, ["Coproduct"] = 8720, - ["sum"] = 8721, + ["coprod"] = 8720, ["Sum"] = 8721, + ["sum"] = 8721, ["minus"] = 8722, + ["MinusPlus"] = 8723, ["mnplus"] = 8723, ["mp"] = 8723, - ["MinusPlus"] = 8723, - ["plusdo"] = 8724, ["dotplus"] = 8724, - ["setmn"] = 8726, - ["setminus"] = 8726, + ["plusdo"] = 8724, ["Backslash"] = 8726, - ["ssetmn"] = 8726, + ["setminus"] = 8726, + ["setmn"] = 8726, ["smallsetminus"] = 8726, + ["ssetmn"] = 8726, ["lowast"] = 8727, - ["compfn"] = 8728, ["SmallCircle"] = 8728, - ["radic"] = 8730, + ["compfn"] = 8728, ["Sqrt"] = 8730, + ["radic"] = 8730, + ["Proportional"] = 8733, ["prop"] = 8733, ["propto"] = 8733, - ["Proportional"] = 8733, - ["vprop"] = 8733, ["varpropto"] = 8733, + ["vprop"] = 8733, ["infin"] = 8734, ["angrt"] = 8735, ["ang"] = 8736, ["angle"] = 8736, + ["nang"] = {8736, 8402}, ["angmsd"] = 8737, ["measuredangle"] = 8737, ["angsph"] = 8738, - ["mid"] = 8739, ["VerticalBar"] = 8739, - ["smid"] = 8739, + ["mid"] = 8739, ["shortmid"] = 8739, - ["nmid"] = 8740, + ["smid"] = 8739, ["NotVerticalBar"] = 8740, - ["nsmid"] = 8740, + ["nmid"] = 8740, ["nshortmid"] = 8740, + ["nsmid"] = 8740, + ["DoubleVerticalBar"] = 8741, ["par"] = 8741, ["parallel"] = 8741, - ["DoubleVerticalBar"] = 8741, - ["spar"] = 8741, ["shortparallel"] = 8741, + ["spar"] = 8741, + ["NotDoubleVerticalBar"] = 8742, ["npar"] = 8742, ["nparallel"] = 8742, - ["NotDoubleVerticalBar"] = 8742, - ["nspar"] = 8742, ["nshortparallel"] = 8742, + ["nspar"] = 8742, ["and"] = 8743, ["wedge"] = 8743, ["or"] = 8744, ["vee"] = 8744, ["cap"] = 8745, + ["caps"] = {8745, 65024}, ["cup"] = 8746, - ["int"] = 8747, + ["cups"] = {8746, 65024}, ["Integral"] = 8747, + ["int"] = 8747, ["Int"] = 8748, - ["tint"] = 8749, ["iiint"] = 8749, + ["tint"] = 8749, + ["ContourIntegral"] = 8750, ["conint"] = 8750, ["oint"] = 8750, - ["ContourIntegral"] = 8750, ["Conint"] = 8751, ["DoubleContourIntegral"] = 8751, ["Cconint"] = 8752, ["cwint"] = 8753, - ["cwconint"] = 8754, ["ClockwiseContourIntegral"] = 8754, - ["awconint"] = 8755, + ["cwconint"] = 8754, ["CounterClockwiseContourIntegral"] = 8755, + ["awconint"] = 8755, + ["Therefore"] = 8756, ["there4"] = 8756, ["therefore"] = 8756, - ["Therefore"] = 8756, + ["Because"] = 8757, ["becaus"] = 8757, ["because"] = 8757, - ["Because"] = 8757, ["ratio"] = 8758, ["Colon"] = 8759, ["Proportion"] = 8759, - ["minusd"] = 8760, ["dotminus"] = 8760, + ["minusd"] = 8760, ["mDDot"] = 8762, ["homtht"] = 8763, - ["sim"] = 8764, ["Tilde"] = 8764, - ["thksim"] = 8764, + ["nvsim"] = {8764, 8402}, + ["sim"] = 8764, ["thicksim"] = 8764, - ["bsim"] = 8765, + ["thksim"] = 8764, ["backsim"] = 8765, + ["bsim"] = 8765, + ["race"] = {8765, 817}, ["ac"] = 8766, + ["acE"] = {8766, 819}, ["mstpos"] = 8766, ["acd"] = 8767, - ["wreath"] = 8768, ["VerticalTilde"] = 8768, ["wr"] = 8768, - ["nsim"] = 8769, + ["wreath"] = 8768, ["NotTilde"] = 8769, - ["esim"] = 8770, + ["nsim"] = 8769, ["EqualTilde"] = 8770, + ["NotEqualTilde"] = {8770, 824}, ["eqsim"] = 8770, - ["sime"] = 8771, + ["esim"] = 8770, + ["nesim"] = {8770, 824}, ["TildeEqual"] = 8771, + ["sime"] = 8771, ["simeq"] = 8771, + ["NotTildeEqual"] = 8772, ["nsime"] = 8772, ["nsimeq"] = 8772, - ["NotTildeEqual"] = 8772, - ["cong"] = 8773, ["TildeFullEqual"] = 8773, + ["cong"] = 8773, ["simne"] = 8774, - ["ncong"] = 8775, ["NotTildeFullEqual"] = 8775, - ["asymp"] = 8776, - ["ap"] = 8776, + ["ncong"] = 8775, ["TildeTilde"] = 8776, + ["ap"] = 8776, ["approx"] = 8776, - ["thkap"] = 8776, + ["asymp"] = 8776, ["thickapprox"] = 8776, - ["nap"] = 8777, + ["thkap"] = 8776, ["NotTildeTilde"] = 8777, + ["nap"] = 8777, ["napprox"] = 8777, ["ape"] = 8778, ["approxeq"] = 8778, ["apid"] = 8779, - ["bcong"] = 8780, + ["napid"] = {8779, 824}, ["backcong"] = 8780, - ["asympeq"] = 8781, + ["bcong"] = 8780, ["CupCap"] = 8781, - ["bump"] = 8782, - ["HumpDownHump"] = 8782, + ["asympeq"] = 8781, + ["nvap"] = {8781, 8402}, ["Bumpeq"] = 8782, - ["bumpe"] = 8783, + ["HumpDownHump"] = 8782, + ["NotHumpDownHump"] = {8782, 824}, + ["bump"] = 8782, + ["nbump"] = {8782, 824}, ["HumpEqual"] = 8783, + ["NotHumpEqual"] = {8783, 824}, + ["bumpe"] = 8783, ["bumpeq"] = 8783, - ["esdot"] = 8784, + ["nbumpe"] = {8783, 824}, ["DotEqual"] = 8784, ["doteq"] = 8784, - ["eDot"] = 8785, + ["esdot"] = 8784, + ["nedot"] = {8784, 824}, ["doteqdot"] = 8785, + ["eDot"] = 8785, ["efDot"] = 8786, ["fallingdotseq"] = 8786, ["erDot"] = 8787, ["risingdotseq"] = 8787, + ["Assign"] = 8788, ["colone"] = 8788, ["coloneq"] = 8788, - ["Assign"] = 8788, ["ecolon"] = 8789, ["eqcolon"] = 8789, ["ecir"] = 8790, ["eqcirc"] = 8790, - ["cire"] = 8791, ["circeq"] = 8791, + ["cire"] = 8791, ["wedgeq"] = 8793, ["veeeq"] = 8794, - ["trie"] = 8796, ["triangleq"] = 8796, + ["trie"] = 8796, ["equest"] = 8799, ["questeq"] = 8799, - ["ne"] = 8800, ["NotEqual"] = 8800, - ["equiv"] = 8801, + ["ne"] = 8800, ["Congruent"] = 8801, - ["nequiv"] = 8802, + ["bnequiv"] = {8801, 8421}, + ["equiv"] = 8801, ["NotCongruent"] = 8802, + ["nequiv"] = 8802, ["le"] = 8804, ["leq"] = 8804, - ["ge"] = 8805, + ["nvle"] = {8804, 8402}, ["GreaterEqual"] = 8805, + ["ge"] = 8805, ["geq"] = 8805, - ["lE"] = 8806, + ["nvge"] = {8805, 8402}, ["LessFullEqual"] = 8806, + ["lE"] = 8806, ["leqq"] = 8806, - ["gE"] = 8807, + ["nlE"] = {8806, 824}, + ["nleqq"] = {8806, 824}, ["GreaterFullEqual"] = 8807, + ["NotGreaterFullEqual"] = {8807, 824}, + ["gE"] = 8807, ["geqq"] = 8807, + ["ngE"] = {8807, 824}, + ["ngeqq"] = {8807, 824}, ["lnE"] = 8808, ["lneqq"] = 8808, + ["lvertneqq"] = {8808, 65024}, + ["lvnE"] = {8808, 65024}, ["gnE"] = 8809, ["gneqq"] = 8809, + ["gvertneqq"] = {8809, 65024}, + ["gvnE"] = {8809, 65024}, ["Lt"] = 8810, ["NestedLessLess"] = 8810, + ["NotLessLess"] = {8810, 824}, ["ll"] = 8810, + ["nLt"] = {8810, 8402}, + ["nLtv"] = {8810, 824}, ["Gt"] = 8811, ["NestedGreaterGreater"] = 8811, + ["NotGreaterGreater"] = {8811, 824}, ["gg"] = 8811, - ["twixt"] = 8812, + ["nGt"] = {8811, 8402}, + ["nGtv"] = {8811, 824}, ["between"] = 8812, + ["twixt"] = 8812, ["NotCupCap"] = 8813, - ["nlt"] = 8814, ["NotLess"] = 8814, ["nless"] = 8814, - ["ngt"] = 8815, + ["nlt"] = 8814, ["NotGreater"] = 8815, + ["ngt"] = 8815, ["ngtr"] = 8815, - ["nle"] = 8816, ["NotLessEqual"] = 8816, + ["nle"] = 8816, ["nleq"] = 8816, - ["nge"] = 8817, ["NotGreaterEqual"] = 8817, + ["nge"] = 8817, ["ngeq"] = 8817, - ["lsim"] = 8818, ["LessTilde"] = 8818, ["lesssim"] = 8818, + ["lsim"] = 8818, + ["GreaterTilde"] = 8819, ["gsim"] = 8819, ["gtrsim"] = 8819, - ["GreaterTilde"] = 8819, - ["nlsim"] = 8820, ["NotLessTilde"] = 8820, - ["ngsim"] = 8821, + ["nlsim"] = 8820, ["NotGreaterTilde"] = 8821, - ["lg"] = 8822, - ["lessgtr"] = 8822, + ["ngsim"] = 8821, ["LessGreater"] = 8822, + ["lessgtr"] = 8822, + ["lg"] = 8822, + ["GreaterLess"] = 8823, ["gl"] = 8823, ["gtrless"] = 8823, - ["GreaterLess"] = 8823, - ["ntlg"] = 8824, ["NotLessGreater"] = 8824, - ["ntgl"] = 8825, + ["ntlg"] = 8824, ["NotGreaterLess"] = 8825, - ["pr"] = 8826, + ["ntgl"] = 8825, ["Precedes"] = 8826, + ["pr"] = 8826, ["prec"] = 8826, - ["sc"] = 8827, ["Succeeds"] = 8827, + ["sc"] = 8827, ["succ"] = 8827, - ["prcue"] = 8828, ["PrecedesSlantEqual"] = 8828, + ["prcue"] = 8828, ["preccurlyeq"] = 8828, - ["sccue"] = 8829, ["SucceedsSlantEqual"] = 8829, + ["sccue"] = 8829, ["succcurlyeq"] = 8829, - ["prsim"] = 8830, - ["precsim"] = 8830, ["PrecedesTilde"] = 8830, + ["precsim"] = 8830, + ["prsim"] = 8830, + ["NotSucceedsTilde"] = {8831, 824}, + ["SucceedsTilde"] = 8831, ["scsim"] = 8831, ["succsim"] = 8831, - ["SucceedsTilde"] = 8831, + ["NotPrecedes"] = 8832, ["npr"] = 8832, ["nprec"] = 8832, - ["NotPrecedes"] = 8832, + ["NotSucceeds"] = 8833, ["nsc"] = 8833, ["nsucc"] = 8833, - ["NotSucceeds"] = 8833, + ["NotSubset"] = {8834, 8402}, + ["nsubset"] = {8834, 8402}, ["sub"] = 8834, ["subset"] = 8834, + ["vnsub"] = {8834, 8402}, + ["NotSuperset"] = {8835, 8402}, + ["Superset"] = 8835, + ["nsupset"] = {8835, 8402}, ["sup"] = 8835, ["supset"] = 8835, - ["Superset"] = 8835, + ["vnsup"] = {8835, 8402}, ["nsub"] = 8836, ["nsup"] = 8837, - ["sube"] = 8838, ["SubsetEqual"] = 8838, + ["sube"] = 8838, ["subseteq"] = 8838, + ["SupersetEqual"] = 8839, ["supe"] = 8839, ["supseteq"] = 8839, - ["SupersetEqual"] = 8839, + ["NotSubsetEqual"] = 8840, ["nsube"] = 8840, ["nsubseteq"] = 8840, - ["NotSubsetEqual"] = 8840, + ["NotSupersetEqual"] = 8841, ["nsupe"] = 8841, ["nsupseteq"] = 8841, - ["NotSupersetEqual"] = 8841, ["subne"] = 8842, ["subsetneq"] = 8842, + ["varsubsetneq"] = {8842, 65024}, + ["vsubne"] = {8842, 65024}, ["supne"] = 8843, ["supsetneq"] = 8843, + ["varsupsetneq"] = {8843, 65024}, + ["vsupne"] = {8843, 65024}, ["cupdot"] = 8845, - ["uplus"] = 8846, ["UnionPlus"] = 8846, - ["sqsub"] = 8847, + ["uplus"] = 8846, + ["NotSquareSubset"] = {8847, 824}, ["SquareSubset"] = 8847, + ["sqsub"] = 8847, ["sqsubset"] = 8847, - ["sqsup"] = 8848, + ["NotSquareSuperset"] = {8848, 824}, ["SquareSuperset"] = 8848, + ["sqsup"] = 8848, ["sqsupset"] = 8848, - ["sqsube"] = 8849, ["SquareSubsetEqual"] = 8849, + ["sqsube"] = 8849, ["sqsubseteq"] = 8849, - ["sqsupe"] = 8850, ["SquareSupersetEqual"] = 8850, + ["sqsupe"] = 8850, ["sqsupseteq"] = 8850, - ["sqcap"] = 8851, ["SquareIntersection"] = 8851, - ["sqcup"] = 8852, + ["sqcap"] = 8851, + ["sqcaps"] = {8851, 65024}, ["SquareUnion"] = 8852, - ["oplus"] = 8853, + ["sqcup"] = 8852, + ["sqcups"] = {8852, 65024}, ["CirclePlus"] = 8853, - ["ominus"] = 8854, + ["oplus"] = 8853, ["CircleMinus"] = 8854, - ["otimes"] = 8855, + ["ominus"] = 8854, ["CircleTimes"] = 8855, + ["otimes"] = 8855, ["osol"] = 8856, - ["odot"] = 8857, ["CircleDot"] = 8857, - ["ocir"] = 8858, + ["odot"] = 8857, ["circledcirc"] = 8858, - ["oast"] = 8859, + ["ocir"] = 8858, ["circledast"] = 8859, - ["odash"] = 8861, + ["oast"] = 8859, ["circleddash"] = 8861, - ["plusb"] = 8862, + ["odash"] = 8861, ["boxplus"] = 8862, - ["minusb"] = 8863, + ["plusb"] = 8862, ["boxminus"] = 8863, - ["timesb"] = 8864, + ["minusb"] = 8863, ["boxtimes"] = 8864, - ["sdotb"] = 8865, + ["timesb"] = 8864, ["dotsquare"] = 8865, - ["vdash"] = 8866, + ["sdotb"] = 8865, ["RightTee"] = 8866, - ["dashv"] = 8867, + ["vdash"] = 8866, ["LeftTee"] = 8867, - ["top"] = 8868, + ["dashv"] = 8867, ["DownTee"] = 8868, - ["bottom"] = 8869, + ["top"] = 8868, + ["UpTee"] = 8869, ["bot"] = 8869, + ["bottom"] = 8869, ["perp"] = 8869, - ["UpTee"] = 8869, ["models"] = 8871, - ["vDash"] = 8872, ["DoubleRightTee"] = 8872, + ["vDash"] = 8872, ["Vdash"] = 8873, ["Vvdash"] = 8874, ["VDash"] = 8875, @@ -22124,22 +23546,24 @@ local character_entities = { ["nVdash"] = 8878, ["nVDash"] = 8879, ["prurel"] = 8880, - ["vltri"] = 8882, - ["vartriangleleft"] = 8882, ["LeftTriangle"] = 8882, - ["vrtri"] = 8883, - ["vartriangleright"] = 8883, + ["vartriangleleft"] = 8882, + ["vltri"] = 8882, ["RightTriangle"] = 8883, + ["vartriangleright"] = 8883, + ["vrtri"] = 8883, + ["LeftTriangleEqual"] = 8884, ["ltrie"] = 8884, + ["nvltrie"] = {8884, 8402}, ["trianglelefteq"] = 8884, - ["LeftTriangleEqual"] = 8884, + ["RightTriangleEqual"] = 8885, + ["nvrtrie"] = {8885, 8402}, ["rtrie"] = 8885, ["trianglerighteq"] = 8885, - ["RightTriangleEqual"] = 8885, ["origof"] = 8886, ["imof"] = 8887, - ["mumap"] = 8888, ["multimap"] = 8888, + ["mumap"] = 8888, ["hercon"] = 8889, ["intcal"] = 8890, ["intercal"] = 8890, @@ -22147,39 +23571,39 @@ local character_entities = { ["barvee"] = 8893, ["angrtvb"] = 8894, ["lrtri"] = 8895, - ["xwedge"] = 8896, ["Wedge"] = 8896, ["bigwedge"] = 8896, - ["xvee"] = 8897, + ["xwedge"] = 8896, ["Vee"] = 8897, ["bigvee"] = 8897, - ["xcap"] = 8898, + ["xvee"] = 8897, ["Intersection"] = 8898, ["bigcap"] = 8898, - ["xcup"] = 8899, + ["xcap"] = 8898, ["Union"] = 8899, ["bigcup"] = 8899, + ["xcup"] = 8899, + ["Diamond"] = 8900, ["diam"] = 8900, ["diamond"] = 8900, - ["Diamond"] = 8900, ["sdot"] = 8901, - ["sstarf"] = 8902, ["Star"] = 8902, - ["divonx"] = 8903, + ["sstarf"] = 8902, ["divideontimes"] = 8903, + ["divonx"] = 8903, ["bowtie"] = 8904, ["ltimes"] = 8905, ["rtimes"] = 8906, - ["lthree"] = 8907, ["leftthreetimes"] = 8907, - ["rthree"] = 8908, + ["lthree"] = 8907, ["rightthreetimes"] = 8908, - ["bsime"] = 8909, + ["rthree"] = 8908, ["backsimeq"] = 8909, - ["cuvee"] = 8910, + ["bsime"] = 8909, ["curlyvee"] = 8910, - ["cuwed"] = 8911, + ["cuvee"] = 8910, ["curlywedge"] = 8911, + ["cuwed"] = 8911, ["Sub"] = 8912, ["Subset"] = 8912, ["Sup"] = 8913, @@ -22189,49 +23613,53 @@ local character_entities = { ["fork"] = 8916, ["pitchfork"] = 8916, ["epar"] = 8917, - ["ltdot"] = 8918, ["lessdot"] = 8918, + ["ltdot"] = 8918, ["gtdot"] = 8919, ["gtrdot"] = 8919, ["Ll"] = 8920, + ["nLl"] = {8920, 824}, ["Gg"] = 8921, ["ggg"] = 8921, - ["leg"] = 8922, + ["nGg"] = {8921, 824}, ["LessEqualGreater"] = 8922, + ["leg"] = 8922, + ["lesg"] = {8922, 65024}, ["lesseqgtr"] = 8922, + ["GreaterEqualLess"] = 8923, ["gel"] = 8923, + ["gesl"] = {8923, 65024}, ["gtreqless"] = 8923, - ["GreaterEqualLess"] = 8923, ["cuepr"] = 8926, ["curlyeqprec"] = 8926, ["cuesc"] = 8927, ["curlyeqsucc"] = 8927, - ["nprcue"] = 8928, ["NotPrecedesSlantEqual"] = 8928, - ["nsccue"] = 8929, + ["nprcue"] = 8928, ["NotSucceedsSlantEqual"] = 8929, - ["nsqsube"] = 8930, + ["nsccue"] = 8929, ["NotSquareSubsetEqual"] = 8930, - ["nsqsupe"] = 8931, + ["nsqsube"] = 8930, ["NotSquareSupersetEqual"] = 8931, + ["nsqsupe"] = 8931, ["lnsim"] = 8934, ["gnsim"] = 8935, - ["prnsim"] = 8936, ["precnsim"] = 8936, + ["prnsim"] = 8936, ["scnsim"] = 8937, ["succnsim"] = 8937, + ["NotLeftTriangle"] = 8938, ["nltri"] = 8938, ["ntriangleleft"] = 8938, - ["NotLeftTriangle"] = 8938, + ["NotRightTriangle"] = 8939, ["nrtri"] = 8939, ["ntriangleright"] = 8939, - ["NotRightTriangle"] = 8939, + ["NotLeftTriangleEqual"] = 8940, ["nltrie"] = 8940, ["ntrianglelefteq"] = 8940, - ["NotLeftTriangleEqual"] = 8940, + ["NotRightTriangleEqual"] = 8941, ["nrtrie"] = 8941, ["ntrianglerighteq"] = 8941, - ["NotRightTriangleEqual"] = 8941, ["vellip"] = 8942, ["ctdot"] = 8943, ["utdot"] = 8944, @@ -22240,9 +23668,11 @@ local character_entities = { ["isinsv"] = 8947, ["isins"] = 8948, ["isindot"] = 8949, + ["notindot"] = {8949, 824}, ["notinvc"] = 8950, ["notinvb"] = 8951, ["isinE"] = 8953, + ["notinE"] = {8953, 824}, ["nisd"] = 8954, ["xnis"] = 8955, ["nis"] = 8956, @@ -22252,14 +23682,14 @@ local character_entities = { ["barwedge"] = 8965, ["Barwed"] = 8966, ["doublebarwedge"] = 8966, - ["lceil"] = 8968, ["LeftCeiling"] = 8968, - ["rceil"] = 8969, + ["lceil"] = 8968, ["RightCeiling"] = 8969, - ["lfloor"] = 8970, + ["rceil"] = 8969, ["LeftFloor"] = 8970, - ["rfloor"] = 8971, + ["lfloor"] = 8970, ["RightFloor"] = 8971, + ["rfloor"] = 8971, ["drcrop"] = 8972, ["dlcrop"] = 8973, ["urcrop"] = 8974, @@ -22291,10 +23721,10 @@ local character_entities = { ["lmoustache"] = 9136, ["rmoust"] = 9137, ["rmoustache"] = 9137, - ["tbrk"] = 9140, ["OverBracket"] = 9140, - ["bbrk"] = 9141, + ["tbrk"] = 9140, ["UnderBracket"] = 9141, + ["bbrk"] = 9141, ["bbrktbrk"] = 9142, ["OverParenthesis"] = 9180, ["UnderParenthesis"] = 9181, @@ -22303,10 +23733,10 @@ local character_entities = { ["trpezium"] = 9186, ["elinters"] = 9191, ["blank"] = 9251, - ["oS"] = 9416, ["circledS"] = 9416, - ["boxh"] = 9472, + ["oS"] = 9416, ["HorizontalLine"] = 9472, + ["boxh"] = 9472, ["boxv"] = 9474, ["boxdr"] = 9484, ["boxdl"] = 9488, @@ -22352,50 +23782,50 @@ local character_entities = { ["blk14"] = 9617, ["blk12"] = 9618, ["blk34"] = 9619, + ["Square"] = 9633, ["squ"] = 9633, ["square"] = 9633, - ["Square"] = 9633, - ["squf"] = 9642, - ["squarf"] = 9642, - ["blacksquare"] = 9642, ["FilledVerySmallSquare"] = 9642, + ["blacksquare"] = 9642, + ["squarf"] = 9642, + ["squf"] = 9642, ["EmptyVerySmallSquare"] = 9643, ["rect"] = 9645, ["marker"] = 9646, ["fltns"] = 9649, - ["xutri"] = 9651, ["bigtriangleup"] = 9651, - ["utrif"] = 9652, + ["xutri"] = 9651, ["blacktriangle"] = 9652, - ["utri"] = 9653, + ["utrif"] = 9652, ["triangle"] = 9653, - ["rtrif"] = 9656, + ["utri"] = 9653, ["blacktriangleright"] = 9656, + ["rtrif"] = 9656, ["rtri"] = 9657, ["triangleright"] = 9657, - ["xdtri"] = 9661, ["bigtriangledown"] = 9661, - ["dtrif"] = 9662, + ["xdtri"] = 9661, ["blacktriangledown"] = 9662, + ["dtrif"] = 9662, ["dtri"] = 9663, ["triangledown"] = 9663, - ["ltrif"] = 9666, ["blacktriangleleft"] = 9666, + ["ltrif"] = 9666, ["ltri"] = 9667, ["triangleleft"] = 9667, ["loz"] = 9674, ["lozenge"] = 9674, ["cir"] = 9675, ["tridot"] = 9708, - ["xcirc"] = 9711, ["bigcirc"] = 9711, + ["xcirc"] = 9711, ["ultri"] = 9720, ["urtri"] = 9721, ["lltri"] = 9722, ["EmptySmallSquare"] = 9723, ["FilledSmallSquare"] = 9724, - ["starf"] = 9733, ["bigstar"] = 9733, + ["starf"] = 9733, ["star"] = 9734, ["phone"] = 9742, ["female"] = 9792, @@ -22406,8 +23836,8 @@ local character_entities = { ["clubsuit"] = 9827, ["hearts"] = 9829, ["heartsuit"] = 9829, - ["diams"] = 9830, ["diamondsuit"] = 9830, + ["diams"] = 9830, ["sung"] = 9834, ["flat"] = 9837, ["natur"] = 9838, @@ -22422,51 +23852,53 @@ local character_entities = { ["VerticalSeparator"] = 10072, ["lbbrk"] = 10098, ["rbbrk"] = 10099, - ["lobrk"] = 10214, + ["bsolhsub"] = 10184, + ["suphsol"] = 10185, ["LeftDoubleBracket"] = 10214, - ["robrk"] = 10215, + ["lobrk"] = 10214, ["RightDoubleBracket"] = 10215, - ["lang"] = 10216, + ["robrk"] = 10215, ["LeftAngleBracket"] = 10216, + ["lang"] = 10216, ["langle"] = 10216, - ["rang"] = 10217, ["RightAngleBracket"] = 10217, + ["rang"] = 10217, ["rangle"] = 10217, ["Lang"] = 10218, ["Rang"] = 10219, ["loang"] = 10220, ["roang"] = 10221, - ["xlarr"] = 10229, - ["longleftarrow"] = 10229, ["LongLeftArrow"] = 10229, - ["xrarr"] = 10230, - ["longrightarrow"] = 10230, + ["longleftarrow"] = 10229, + ["xlarr"] = 10229, ["LongRightArrow"] = 10230, - ["xharr"] = 10231, - ["longleftrightarrow"] = 10231, + ["longrightarrow"] = 10230, + ["xrarr"] = 10230, ["LongLeftRightArrow"] = 10231, - ["xlArr"] = 10232, - ["Longleftarrow"] = 10232, + ["longleftrightarrow"] = 10231, + ["xharr"] = 10231, ["DoubleLongLeftArrow"] = 10232, - ["xrArr"] = 10233, - ["Longrightarrow"] = 10233, + ["Longleftarrow"] = 10232, + ["xlArr"] = 10232, ["DoubleLongRightArrow"] = 10233, - ["xhArr"] = 10234, - ["Longleftrightarrow"] = 10234, + ["Longrightarrow"] = 10233, + ["xrArr"] = 10233, ["DoubleLongLeftRightArrow"] = 10234, - ["xmap"] = 10236, + ["Longleftrightarrow"] = 10234, + ["xhArr"] = 10234, ["longmapsto"] = 10236, + ["xmap"] = 10236, ["dzigrarr"] = 10239, ["nvlArr"] = 10498, ["nvrArr"] = 10499, ["nvHarr"] = 10500, ["Map"] = 10501, ["lbarr"] = 10508, - ["rbarr"] = 10509, ["bkarow"] = 10509, + ["rbarr"] = 10509, ["lBarr"] = 10510, - ["rBarr"] = 10511, ["dbkarow"] = 10511, + ["rBarr"] = 10511, ["RBarr"] = 10512, ["drbkarow"] = 10512, ["DDotrahd"] = 10513, @@ -22483,16 +23915,17 @@ local character_entities = { ["rarrbfs"] = 10528, ["nwarhk"] = 10531, ["nearhk"] = 10532, - ["searhk"] = 10533, ["hksearow"] = 10533, - ["swarhk"] = 10534, + ["searhk"] = 10533, ["hkswarow"] = 10534, + ["swarhk"] = 10534, ["nwnear"] = 10535, ["nesear"] = 10536, ["toea"] = 10536, ["seswar"] = 10537, ["tosa"] = 10537, ["swnwar"] = 10538, + ["nrarrc"] = {10547, 824}, ["rarrc"] = 10547, ["cudarrr"] = 10549, ["ldca"] = 10550, @@ -22538,10 +23971,10 @@ local character_entities = { ["llhard"] = 10603, ["rharul"] = 10604, ["lrhard"] = 10605, - ["udhar"] = 10606, ["UpEquilibrium"] = 10606, - ["duhar"] = 10607, + ["udhar"] = 10606, ["ReverseUpEquilibrium"] = 10607, + ["duhar"] = 10607, ["RoundImplies"] = 10608, ["erarr"] = 10609, ["simrarr"] = 10610, @@ -22608,30 +24041,31 @@ local character_entities = { ["trisb"] = 10701, ["rtriltri"] = 10702, ["LeftTriangleBar"] = 10703, + ["NotLeftTriangleBar"] = {10703, 824}, + ["NotRightTriangleBar"] = {10704, 824}, ["RightTriangleBar"] = 10704, - ["race"] = 10714, ["iinfin"] = 10716, ["infintie"] = 10717, ["nvinfin"] = 10718, ["eparsl"] = 10723, ["smeparsl"] = 10724, ["eqvparsl"] = 10725, - ["lozf"] = 10731, ["blacklozenge"] = 10731, + ["lozf"] = 10731, ["RuleDelayed"] = 10740, ["dsol"] = 10742, - ["xodot"] = 10752, ["bigodot"] = 10752, - ["xoplus"] = 10753, + ["xodot"] = 10752, ["bigoplus"] = 10753, - ["xotime"] = 10754, + ["xoplus"] = 10753, ["bigotimes"] = 10754, - ["xuplus"] = 10756, + ["xotime"] = 10754, ["biguplus"] = 10756, - ["xsqcup"] = 10758, + ["xuplus"] = 10756, ["bigsqcup"] = 10758, - ["qint"] = 10764, + ["xsqcup"] = 10758, ["iiiint"] = 10764, + ["qint"] = 10764, ["fpartint"] = 10765, ["cirfnint"] = 10768, ["awint"] = 10769, @@ -22663,8 +24097,8 @@ local character_entities = { ["triplus"] = 10809, ["triminus"] = 10810, ["tritime"] = 10811, - ["iprod"] = 10812, ["intprod"] = 10812, + ["iprod"] = 10812, ["amalg"] = 10815, ["capdot"] = 10816, ["ncup"] = 10818, @@ -22694,27 +24128,35 @@ local character_entities = { ["sdote"] = 10854, ["simdot"] = 10858, ["congdot"] = 10861, + ["ncongdot"] = {10861, 824}, ["easter"] = 10862, ["apacir"] = 10863, ["apE"] = 10864, + ["napE"] = {10864, 824}, ["eplus"] = 10865, ["pluse"] = 10866, ["Esim"] = 10867, ["Colone"] = 10868, ["Equal"] = 10869, - ["eDDot"] = 10871, ["ddotseq"] = 10871, + ["eDDot"] = 10871, ["equivDD"] = 10872, ["ltcir"] = 10873, ["gtcir"] = 10874, ["ltquest"] = 10875, ["gtquest"] = 10876, - ["les"] = 10877, ["LessSlantEqual"] = 10877, + ["NotLessSlantEqual"] = {10877, 824}, ["leqslant"] = 10877, - ["ges"] = 10878, + ["les"] = 10877, + ["nleqslant"] = {10877, 824}, + ["nles"] = {10877, 824}, ["GreaterSlantEqual"] = 10878, + ["NotGreaterSlantEqual"] = {10878, 824}, ["geqslant"] = 10878, + ["ges"] = 10878, + ["ngeqslant"] = {10878, 824}, + ["nges"] = {10878, 824}, ["lesdot"] = 10879, ["gesdot"] = 10880, ["lesdoto"] = 10881, @@ -22758,7 +24200,9 @@ local character_entities = { ["simlE"] = 10911, ["simgE"] = 10912, ["LessLess"] = 10913, + ["NotNestedLessLess"] = {10913, 824}, ["GreaterGreater"] = 10914, + ["NotNestedGreaterGreater"] = {10914, 824}, ["glj"] = 10916, ["gla"] = 10917, ["ltcc"] = 10918, @@ -22768,26 +24212,34 @@ local character_entities = { ["smt"] = 10922, ["lat"] = 10923, ["smte"] = 10924, + ["smtes"] = {10924, 65024}, ["late"] = 10925, + ["lates"] = {10925, 65024}, ["bumpE"] = 10926, + ["NotPrecedesEqual"] = {10927, 824}, + ["PrecedesEqual"] = 10927, + ["npre"] = {10927, 824}, + ["npreceq"] = {10927, 824}, ["pre"] = 10927, ["preceq"] = 10927, - ["PrecedesEqual"] = 10927, + ["NotSucceedsEqual"] = {10928, 824}, + ["SucceedsEqual"] = 10928, + ["nsce"] = {10928, 824}, + ["nsucceq"] = {10928, 824}, ["sce"] = 10928, ["succeq"] = 10928, - ["SucceedsEqual"] = 10928, ["prE"] = 10931, ["scE"] = 10932, - ["prnE"] = 10933, ["precneqq"] = 10933, + ["prnE"] = 10933, ["scnE"] = 10934, ["succneqq"] = 10934, ["prap"] = 10935, ["precapprox"] = 10935, ["scap"] = 10936, ["succapprox"] = 10936, - ["prnap"] = 10937, ["precnapprox"] = 10937, + ["prnap"] = 10937, ["scnap"] = 10938, ["succnapprox"] = 10938, ["Pr"] = 10939, @@ -22800,16 +24252,24 @@ local character_entities = { ["supmult"] = 10946, ["subedot"] = 10947, ["supedot"] = 10948, + ["nsubE"] = {10949, 824}, + ["nsubseteqq"] = {10949, 824}, ["subE"] = 10949, ["subseteqq"] = 10949, + ["nsupE"] = {10950, 824}, + ["nsupseteqq"] = {10950, 824}, ["supE"] = 10950, ["supseteqq"] = 10950, ["subsim"] = 10951, ["supsim"] = 10952, ["subnE"] = 10955, ["subsetneqq"] = 10955, + ["varsubsetneqq"] = {10955, 65024}, + ["vsubnE"] = {10955, 65024}, ["supnE"] = 10956, ["supsetneqq"] = 10956, + ["varsupsetneqq"] = {10956, 65024}, + ["vsupnE"] = {10956, 65024}, ["csub"] = 10959, ["csup"] = 10960, ["csube"] = 10961, @@ -22838,6 +24298,7 @@ local character_entities = { ["topcir"] = 10993, ["nhpar"] = 10994, ["parsim"] = 10995, + ["nparsl"] = {11005, 8421}, ["parsl"] = 11005, ["fflig"] = 64256, ["filig"] = 64257, @@ -22988,7 +24449,11 @@ local character_entities = { % \end{markdown} % \begin{macrocode} function entities.dec_entity(s) - return unicode.utf8.char(tonumber(s)) + local n = tonumber(s) + if n == nil then + return "&#" .. s .. ";" -- fallback for unknown entities + end + return unicode.utf8.char(n) end % \end{macrocode} % \par @@ -23001,7 +24466,28 @@ end % \end{markdown} % \begin{macrocode} function entities.hex_entity(s) - return unicode.utf8.char(tonumber("0x"..s)) + local n = tonumber("0x"..s) + if n == nil then + return "&#x" .. s .. ";" -- fallback for unknown entities + end + return unicode.utf8.char(n) +end +% \end{macrocode} +% \par +% \begin{markdown} +% +% Given a captured character `x` and a string `s` of hexadecimal digits, the +% \luamdef{entities.hex_entity_with_x_char} returns the corresponding +% \acro{utf}8-encoded Unicode codepoint or fallback with the `x` character. +% +% \end{markdown} +% \begin{macrocode} +function entities.hex_entity_with_x_char(x, s) + local n = tonumber("0x"..s) + if n == nil then + return "&#" .. x .. s .. ";" -- fallback for unknown entities + end + return unicode.utf8.char(n) end % \end{macrocode} % \par @@ -23014,11 +24500,18 @@ end % \end{markdown} % \begin{macrocode} function entities.char_entity(s) - local n = character_entities[s] - if n == nil then + local code_points = character_entities[s] + if code_points == nil then return "&" .. s .. ";" end - return unicode.utf8.char(n) + if type(code_points) ~= 'table' then + code_points = {code_points} + end + local char_table = {} + for _, code_point in ipairs(code_points) do + table.insert(char_table, unicode.utf8.char(code_point)) + end + return table.concat(char_table) end % \end{macrocode} % \par @@ -23073,6 +24566,18 @@ function M.writer.new(options) % \par % \begin{markdown} % +% Define \luamdef{writer->flatten\_inlines}, which indicates whether or not the +% writer should produce raw text rather than text in the output format for +% inline elements. The \luamref{writer->flatten\_inlines} member variable is +% mutable. +% +% \end{markdown} +% \begin{macrocode} + self.flatten_inlines = false +% \end{macrocode} +% \par +% \begin{markdown} +% % Parse the \Opt{slice} option and define \luamdef{writer->slice\_begin}, % \luamdef{writer->slice\_end}, and \luamdef{writer->is\_writing}. The % \luamref{writer->is\_writing} member variable is mutable. @@ -23192,12 +24697,43 @@ function M.writer.new(options) % \par % \begin{markdown} % -% Define \luamdef{writer->hard_line_break} as the output format of a forced +% Define \luamdef{writer->paragraphsep} as the output format of a paragraph +% separator. Users can use more than one blank line to delimit two blocks to +% indicate the end of a series of blocks that make up a paragraph. This +% produces a paragraph separator instead of an interblock separator. +% +% \end{markdown} +% \begin{macrocode} + function self.paragraphsep() + if not self.is_writing then return "" end + return "\\markdownRendererParagraphSeparator\n{}" + end +% \end{macrocode} +% \par +% \begin{markdown} +% +% Define \luamdef{writer->soft_line_break} as the output format of a soft % line break. % % \end{markdown} % \begin{macrocode} - self.hard_line_break = "\\markdownRendererHardLineBreak\n{}" + self.soft_line_break = function() + if self.flatten_inlines then return "\n" end + return "\\markdownRendererSoftLineBreak\n{}" + end +% \end{macrocode} +% \par +% \begin{markdown} +% +% Define \luamdef{writer->hard_line_break} as the output format of a hard +% line break. +% +% \end{markdown} +% \begin{macrocode} + self.hard_line_break = function() + if self.flatten_inlines then return "\n" end + return "\\markdownRendererHardLineBreak\n{}" + end % \end{macrocode} % \par % \begin{markdown} @@ -23290,11 +24826,18 @@ function M.writer.new(options) % % \end{markdown} % \begin{macrocode} - local escape_typographic_text = util.escaper( + local function create_escaper(char_escapes, string_escapes) + local escape = util.escaper(char_escapes, string_escapes) + return function(s) + if self.flatten_inlines then return s end + return escape(s) + end + end + local escape_typographic_text = create_escaper( self.escaped_chars, self.escaped_strings) - local escape_programmatic_text = util.escaper( + local escape_programmatic_text = create_escaper( self.escaped_uri_chars, self.escaped_minimal_strings) - local escape_minimal = util.escaper( + local escape_minimal = create_escaper( {}, self.escaped_minimal_strings) % \end{macrocode} % \par @@ -23310,6 +24853,7 @@ function M.writer.new(options) % - \luamdef{writer->math} transforms a math span. % - \luamdef{writer->identifier} transforms an input programmatic identifier. % - \luamdef{writer->uri} transforms an input \acro{uri}. +% - \luamdef{writer->infostring} transforms a fence code infostring. % % \end{markdown} % \begin{macrocode} @@ -23319,10 +24863,12 @@ function M.writer.new(options) self.identifier = escape_minimal self.string = escape_minimal self.uri = escape_minimal + self.infostring = escape_minimal else self.identifier = escape_programmatic_text self.string = escape_typographic_text self.uri = escape_programmatic_text + self.infostring = escape_programmatic_text end % \end{macrocode} % \par @@ -23335,6 +24881,7 @@ function M.writer.new(options) % \end{markdown} % \begin{macrocode} function self.code(s, attributes) + if self.flatten_inlines then return s end local buf = {} if attributes ~= nil then table.insert(buf, @@ -23361,6 +24908,7 @@ function M.writer.new(options) % \end{markdown} % \begin{macrocode} function self.link(lab, src, tit, attributes) + if self.flatten_inlines then return lab end local buf = {} if attributes ~= nil then table.insert(buf, @@ -23389,6 +24937,7 @@ function M.writer.new(options) % \end{markdown} % \begin{macrocode} function self.image(lab, src, tit, attributes) + if self.flatten_inlines then return lab end local buf = {} if attributes ~= nil then table.insert(buf, @@ -23419,7 +24968,9 @@ function M.writer.new(options) if not self.is_writing then return "" end local buffer = {} for _,item in ipairs(items) do - buffer[#buffer + 1] = self.bulletitem(item) + if item ~= "" then + buffer[#buffer + 1] = self.bulletitem(item) + end end local contents = util.intersperse(buffer,"\n") if tight and options.tightLists then @@ -23460,8 +25011,10 @@ function M.writer.new(options) local buffer = {} local num = startnum for _,item in ipairs(items) do - buffer[#buffer + 1] = self.ordereditem(item,num) - if num ~= nil then + if item ~= "" then + buffer[#buffer + 1] = self.ordereditem(item,num) + end + if num ~= nil and item ~= "" then num = num + 1 end end @@ -23504,27 +25057,13 @@ function M.writer.new(options) % \end{markdown} % \begin{macrocode} function self.inline_html_comment(contents) + if self.flatten_inlines then return contents end return {"\\markdownRendererInlineHtmlComment{",contents,"}"} end % \end{macrocode} % \par % \begin{markdown} % -% Define \luamdef{writer->block_html_comment} as a function that will -% transform the contents of a block \acro{HTML} comment, to the output -% format, where `contents` are the contents of the \acro{HTML} comment. -% -% \end{markdown} -% \begin{macrocode} - function self.block_html_comment(contents) - if not self.is_writing then return "" end - return {"\\markdownRendererBlockHtmlCommentBegin\n",contents, - "\n\\markdownRendererBlockHtmlCommentEnd "} - end -% \end{macrocode} -% \par -% \begin{markdown} -% % Define \luamdef{writer->inline_html_tag} as a function that will % transform the contents of an opening, closing, or empty inline \acro{HTML} % tag to the output format, where `contents` are the contents of the @@ -23533,6 +25072,7 @@ function M.writer.new(options) % \end{markdown} % \begin{macrocode} function self.inline_html_tag(contents) + if self.flatten_inlines then return contents end return {"\\markdownRendererInlineHtmlTag{",self.string(contents),"}"} end % \end{macrocode} @@ -23560,6 +25100,7 @@ function M.writer.new(options) % \end{markdown} % \begin{macrocode} function self.emphasis(s) + if self.flatten_inlines then return s end return {"\\markdownRendererEmphasis{",s,"}"} end % \end{macrocode} @@ -23590,6 +25131,7 @@ function M.writer.new(options) % \end{markdown} % \begin{macrocode} function self.strong(s) + if self.flatten_inlines then return s end return {"\\markdownRendererStrongEmphasis{",s,"}"} end % \end{macrocode} @@ -23602,7 +25144,7 @@ function M.writer.new(options) % \end{markdown} % \begin{macrocode} function self.blockquote(s) - if #util.rope_to_string(s) == 0 then return "" end + if not self.is_writing then return "" end return {"\\markdownRendererBlockQuoteBegin\n",s, "\n\\markdownRendererBlockQuoteEnd "} end @@ -23649,17 +25191,24 @@ function M.writer.new(options) % % \end{markdown} % \begin{macrocode} - function self.attributes(attributes) - local expanded_attributes = {} - local key_value_regex = "([^= ]+)%s*=%s*(.*)" + local seen_identifiers = {} + local key_value_regex = "([^= ]+)%s*=%s*(.*)" + local function normalize_attributes(attributes, auto_identifiers) + -- normalize attributes + local normalized_attributes = {} + local has_explicit_identifiers = false local key, value - for _, attribute in ipairs(attributes) do - if attribute:sub(1, 1) == "#" or attribute:sub(1, 1) == "." then - table.insert(expanded_attributes, attribute) + for _, attribute in ipairs(attributes or {}) do + if attribute:sub(1, 1) == "#" then + table.insert(normalized_attributes, attribute) + has_explicit_identifiers = true + seen_identifiers[attribute:sub(2)] = true + elseif attribute:sub(1, 1) == "." then + table.insert(normalized_attributes, attribute) else key, value = attribute:match(key_value_regex) if key:lower() == "id" then - table.insert(expanded_attributes, "#" .. value) + table.insert(normalized_attributes, "#" .. value) elseif key:lower() == "class" then local classes = {} for class in value:gmatch("%S+") do @@ -23667,23 +25216,67 @@ function M.writer.new(options) end table.sort(classes) for _, class in ipairs(classes) do - table.insert(expanded_attributes, "." .. class) + table.insert(normalized_attributes, "." .. class) end else - table.insert(expanded_attributes, attribute) + table.insert(normalized_attributes, attribute) end end end - table.sort(expanded_attributes) - local buf = {} - local seen = {} - for _, attribute in ipairs(expanded_attributes) do - if seen[attribute] ~= nil then - goto continue -- prevent duplicate attributes - else - seen[attribute] = true + -- if no explicit identifiers exist, add auto identifiers + if not has_explicit_identifiers and auto_identifiers ~= nil then + local seen_auto_identifiers = {} + for _, auto_identifier in ipairs(auto_identifiers) do + if seen_auto_identifiers[auto_identifier] == nil then + seen_auto_identifiers[auto_identifier] = true + if seen_identifiers[auto_identifier] == nil then + seen_identifiers[auto_identifier] = true + table.insert(normalized_attributes, + "#" .. auto_identifier) + else + local auto_identifier_number = 1 + while true do + local numbered_auto_identifier = auto_identifier .. "-" + .. auto_identifier_number + if seen_identifiers[numbered_auto_identifier] == nil then + seen_identifiers[numbered_auto_identifier] = true + table.insert(normalized_attributes, + "#" .. numbered_auto_identifier) + break + end + auto_identifier_number = auto_identifier_number + 1 + end + end + end + end + end + + -- sort and deduplicate normalized attributes + table.sort(normalized_attributes) + local seen_normalized_attributes = {} + local deduplicated_normalized_attributes = {} + for _, attribute in ipairs(normalized_attributes) do + if seen_normalized_attributes[attribute] == nil then + seen_normalized_attributes[attribute] = true + table.insert(deduplicated_normalized_attributes, attribute) end + end + + return deduplicated_normalized_attributes + end + + function self.attributes(attributes, should_normalize_attributes) + local normalized_attributes + if should_normalize_attributes == false then + normalized_attributes = attributes + else + normalized_attributes = normalize_attributes(attributes) + end + + local buf = {} + local key, value + for _, attribute in ipairs(normalized_attributes) do if attribute:sub(1, 1) == "#" then table.insert(buf, {"\\markdownRendererAttributeIdentifier{", attribute:sub(2), "}"}) @@ -23695,7 +25288,6 @@ function M.writer.new(options) table.insert(buf, {"\\markdownRendererAttributeKeyValue{", key, "}{", value, "}"}) end - ::continue:: end return buf @@ -23715,6 +25307,19 @@ function M.writer.new(options) % \par % \begin{markdown} % +% Define \luamdef{writer->attribute\_type\_levels} as a hash table that +% maps attribute types to the number of attributes of said type in +% \luamref{writer->active\_attributes}. +% +% \end{markdown} +% \begin{macrocode} + self.attribute_type_levels = {} + setmetatable(self.attribute_type_levels, + { __index = function() return 0 end }) +% \end{macrocode} +% \par +% \begin{markdown} +% % Define \luamdef{writer->push\_attributes} and % \luamdef{writer->pop\_attributes} as functions that will add a new set % of active block-level attributes or remove the most current attributes @@ -23759,6 +25364,9 @@ function M.writer.new(options) % \begin{macrocode} function self.push_attributes(attribute_type, attributes, start_output, end_output) + local attribute_type_level = self.attribute_type_levels[attribute_type] + self.attribute_type_levels[attribute_type] = attribute_type_level + 1 + -- index attributes in a hash table for easy lookup attributes = attributes or {} for i = 1, #attributes do @@ -23776,7 +25384,6 @@ function M.writer.new(options) end if attributes["#" .. self.slice_begin_identifier] ~= nil and self.slice_begin_type == "^" then - self.is_writing = true table.insert(buf, apply_attributes()) self.is_writing = true end @@ -23812,6 +25419,8 @@ function M.writer.new(options) local attributes, _, end_output current_attribute_type, attributes, _, end_output = table.unpack( self.active_attributes[#self.active_attributes]) + local attribute_type_level = self.attribute_type_levels[current_attribute_type] + self.attribute_type_levels[current_attribute_type] = attribute_type_level - 1 if self.is_writing and end_output ~= nil then table.insert(buf, end_output) end @@ -23833,6 +25442,119 @@ function M.writer.new(options) return buf end % \end{macrocode} +% \begin{markdown} +% +% Create an auto identifier string by stripping and converting characters from string `s`. +% +% \end{markdown} +% \begin{macrocode} +local function create_auto_identifier(s) + local buffer = {} + local prev_space = false + local letter_found = false + + for _, code in utf8.codes(uni_algos.normalize.NFC(s)) do + local char = utf8.char(code) + + -- Remove everything up to the first letter. + if not letter_found then + local is_letter = unicode.utf8.match(char, "%a") + if is_letter then + letter_found = true + else + goto continue + end + end + + -- Remove all non-alphanumeric characters, except underscores, hyphens, and periods. + if not unicode.utf8.match(char, "[%w_%-%.%s]") then + goto continue + end + + -- Replace all spaces and newlines with hyphens. + if unicode.utf8.match(char, "[%s\n]") then + char = "-" + if prev_space then + goto continue + else + prev_space = true + end + else + -- Convert all alphabetic characters to lowercase. + char = unicode.utf8.lower(char) + prev_space = false + end + + table.insert(buffer, char) + + ::continue:: + end + + if prev_space then + table.remove(buffer) + end + + local identifier = #buffer == 0 and "section" or table.concat(buffer, "") + return identifier +end +% \end{macrocode} +% \begin{markdown} +% +% Create an GitHub-flavored auto identifier string by stripping and converting characters from string `s`. +% +% \end{markdown} +% \begin{macrocode} +local function create_gfm_auto_identifier(s) + local buffer = {} + local prev_space = false + local letter_found = false + + for _, code in utf8.codes(uni_algos.normalize.NFC(s)) do + local char = utf8.char(code) + + -- Remove everything up to the first non-space. + if not letter_found then + local is_letter = unicode.utf8.match(char, "%S") + if is_letter then + letter_found = true + else + goto continue + end + end + + -- Remove all non-alphanumeric characters, except underscores and hyphens. + if not unicode.utf8.match(char, "[%w_%-%s]") then + prev_space = false + goto continue + end + + -- Replace all spaces and newlines with hyphens. + if unicode.utf8.match(char, "[%s\n]") then + char = "-" + if prev_space then + goto continue + else + prev_space = true + end + else + -- Convert all alphabetic characters to lowercase. + char = unicode.utf8.lower(char) + prev_space = false + end + + table.insert(buffer, char) + + ::continue:: + end + + if prev_space then + table.remove(buffer) + end + + local identifier = #buffer == 0 and "section" or table.concat(buffer, "") + return identifier +end +% \end{macrocode} % \par % \begin{markdown} % @@ -23842,47 +25564,52 @@ function M.writer.new(options) % % \end{markdown} % \begin{macrocode} - local current_heading_level = 0 function self.heading(s, level, attributes) local buf = {} + local flat_text, inlines = table.unpack(s) -- push empty attributes for implied sections - while current_heading_level < level - 1 do + while self.attribute_type_levels["heading"] < level - 1 do table.insert(buf, self.push_attributes("heading", nil, "\\markdownRendererSectionBegin\n", "\n\\markdownRendererSectionEnd ")) - current_heading_level = current_heading_level + 1 end -- pop attributes for sections that have ended - while current_heading_level >= level do + while self.attribute_type_levels["heading"] >= level do table.insert(buf, self.pop_attributes("heading")) - current_heading_level = current_heading_level - 1 end + -- construct attributes for the new section + local auto_identifiers = {} + if self.options.autoIdentifiers then + table.insert(auto_identifiers, create_auto_identifier(flat_text)) + end + if self.options.gfmAutoIdentifiers then + table.insert(auto_identifiers, create_gfm_auto_identifier(flat_text)) + end + local normalized_attributes = normalize_attributes(attributes, auto_identifiers) + -- push attributes for the new section local start_output = {} local end_output = {} table.insert(start_output, "\\markdownRendererSectionBegin\n") - if options.headerAttributes and attributes ~= nil and #attributes > 0 then - table.insert(start_output, - "\\markdownRendererHeaderAttributeContextBegin\n") - table.insert(start_output, self.attributes(attributes)) - table.insert(end_output, - "\n\\markdownRendererHeaderAttributeContextEnd ") - end table.insert(end_output, "\n\\markdownRendererSectionEnd ") table.insert(buf, self.push_attributes("heading", - attributes, + normalized_attributes, start_output, end_output)) - current_heading_level = current_heading_level + 1 - assert(current_heading_level == level) + assert(self.attribute_type_levels["heading"] == level) + + -- render the heading and its attributes + if self.is_writing and #normalized_attributes > 0 then + table.insert(buf, "\\markdownRendererHeaderAttributeContextBegin\n") + table.insert(buf, self.attributes(normalized_attributes, false)) + end - -- produce the renderer local cmd level = level + options.shiftHeadings if level <= 1 then @@ -23901,7 +25628,11 @@ function M.writer.new(options) cmd = "" end if self.is_writing then - table.insert(buf, {cmd, "{", s, "}"}) + table.insert(buf, {cmd, "{", inlines, "}"}) + end + + if self.is_writing and #normalized_attributes > 0 then + table.insert(buf, "\\markdownRendererHeaderAttributeContextEnd ") end return buf @@ -23919,6 +25650,7 @@ function M.writer.new(options) function self.get_state() return { is_writing=self.is_writing, + flatten_inlines=self.flatten_inlines, active_attributes={table.unpack(self.active_attributes)}, } end @@ -24013,14 +25745,13 @@ parsers.tilde = P("~") parsers.backslash = P("\\") parsers.tab = P("\t") parsers.newline = P("\n") -parsers.tightblocksep = P("\001") parsers.digit = R("09") parsers.hexdigit = R("09","af","AF") parsers.letter = R("AZ","az") parsers.alphanumeric = R("AZ","az","09") parsers.keyword = parsers.letter - * parsers.alphanumeric^0 + * (parsers.alphanumeric + parsers.dash)^0 parsers.internal_punctuation = S(":;,.?") parsers.doubleasterisks = P("**") @@ -24042,8 +25773,7 @@ parsers.nonspacechar = parsers.any - parsers.spacing parsers.optionalspace = parsers.spacechar^0 parsers.normalchar = parsers.any - (V("SpecialChar") - + parsers.spacing - + parsers.tightblocksep) + + parsers.spacing) parsers.eof = -parsers.any parsers.nonindentspace = parsers.space^-3 * - parsers.spacechar parsers.indent = parsers.space^-3 * parsers.tab @@ -24064,6 +25794,767 @@ parsers.spnl = parsers.optionalspace parsers.line = parsers.linechar^0 * parsers.newline parsers.nonemptyline = parsers.line - parsers.blankline % \end{macrocode} +% \par +% \begin{markdown} +% +%#### Parsers Used for Indentation +% +% \end{markdown} +% \begin{macrocode} + +parsers.leader = parsers.space^-3 + +% \end{macrocode} +% \begin{markdown} +% +% Check if a trail exists and is non-empty in the indent table `indent_table`. +% +% \end{markdown} +% \begin{macrocode} +local function has_trail(indent_table) + return indent_table ~= nil and + indent_table.trail ~= nil and + next(indent_table.trail) ~= nil +end + +% \end{macrocode} +% \begin{markdown} +% +% Check if indent table `indent_table` has any indents. +% +% \end{markdown} +% \begin{macrocode} +local function has_indents(indent_table) + return indent_table ~= nil and + indent_table.indents ~= nil and + next(indent_table.indents) ~= nil +end + +% \end{macrocode} +% \begin{markdown} +% +% Add a trail `trail_info` to the indent table `indent_table`. +% +% \end{markdown} +% \begin{macrocode} +local function add_trail(indent_table, trail_info) + indent_table.trail = trail_info + return indent_table +end + +% \end{macrocode} +% \begin{markdown} +% +% Remove a trail `trail_info` from the indent table `indent_table`. +% +% \end{markdown} +% \begin{macrocode} +local function remove_trail(indent_table) + indent_table.trail = nil + return indent_table +end + +% \end{macrocode} +% \begin{markdown} +% +% Update the indent table `indent_table` by adding or removing a new +% indent `add`. +% +% \end{markdown} +% \begin{macrocode} +local function update_indent_table(indent_table, new_indent, add) + indent_table = remove_trail(indent_table) + + if not has_indents(indent_table) then + indent_table.indents = {} + end + + + if add then + indent_table.indents[#indent_table.indents + 1] = new_indent + else + if indent_table.indents[#indent_table.indents].name == new_indent.name then + indent_table.indents[#indent_table.indents] = nil + end + end + + return indent_table +end + +% \end{macrocode} +% \begin{markdown} +% +% Remove an indent by its name `name`. +% +% \end{markdown} +% \begin{macrocode} +local function remove_indent(name) + local function remove_indent_level(s, i, indent_table) -- luacheck: ignore s i + indent_table = update_indent_table(indent_table, {name=name}, false) + return true, indent_table + end + + return Cg(Cmt(Cb("indent_info"), remove_indent_level), "indent_info") +end + +% \end{macrocode} +% \begin{markdown} +% +% Process the spacing of a string of spaces and tabs `spacing` with preceding indent width from +% the start of the line `indent` and strip up to `left_strip_length` spaces. Return the remainder +% `remainder` and whether there is enough spaces to produce a code `is_code`. Return how many +% spaces were stripped, as well as if the minimum was met `is_minimum` and what remainder it +% left `minimum_remainder`. +% +% \end{markdown} +% \begin{macrocode} +local function process_starter_spacing(indent, spacing, minimum, left_strip_length) + left_strip_length = left_strip_length or 0 + + local count = 0 + local tab_value = 4 - (indent) % 4 + + local code_started, minimum_found = false, false + local code_start, minimum_remainder = "", "" + + local left_total_stripped = 0 + local full_remainder = "" + + if spacing ~= nil then + for i = 1, #spacing do + local character = spacing:sub(i, i) + + if character == "\t" then + count = count + tab_value + tab_value = 4 + elseif character == " " then + count = count + 1 + tab_value = 4 - (1 - tab_value) % 4 + end + + if (left_strip_length ~= 0) then + local possible_to_strip = math.min(count, left_strip_length) + count = count - possible_to_strip + left_strip_length = left_strip_length - possible_to_strip + left_total_stripped = left_total_stripped + possible_to_strip + else + full_remainder = full_remainder .. character + end + + if (minimum_found) then + minimum_remainder = minimum_remainder .. character + elseif (count >= minimum) then + minimum_found = true + minimum_remainder = minimum_remainder .. string.rep(" ", count - minimum) + end + + if (code_started) then + code_start = code_start .. character + elseif (count >= minimum + 4) then + code_started = true + code_start = code_start .. string.rep(" ", count - (minimum + 4)) + end + end + end + + local remainder + if (code_started) then + remainder = code_start + else + remainder = string.rep(" ", count - minimum) + end + + local is_minimum = count >= minimum + return { + is_code = code_started, + remainder = remainder, + left_total_stripped = left_total_stripped, + is_minimum = is_minimum, + minimum_remainder = minimum_remainder, + total_length = count, + full_remainder = full_remainder + } +end + +% \end{macrocode} +% \begin{markdown} +% +% Count the total width of all indents in the indent table `indent_table`. +% +% \end{markdown} +% \begin{macrocode} +local function count_indent_tab_level(indent_table) + local count = 0 + if not has_indents(indent_table) then + return count + end + + for i=1, #indent_table.indents do + count = count + indent_table.indents[i].length + end + return count +end + +% \end{macrocode} +% \begin{markdown} +% +% Count the total width of a delimiter `delimiter`. +% +% \end{markdown} +% \begin{macrocode} +local function total_delimiter_length(delimiter) + local count = 0 + if type(delimiter) == "string" then return #delimiter end + for _, value in pairs(delimiter) do + count = count + total_delimiter_length(value) + end + return count +end + +% \end{macrocode} +% \begin{markdown} +% +% Process the container starter `starter` of a type `indent_type`. Adjust the width of the indent +% if the delimiter is followed only by whitespaces `is_blank`. +% +% \end{markdown} +% \begin{macrocode} +local function process_starter_indent(_, _, indent_table, starter, is_blank, indent_type, breakable) + local last_trail = starter[1] + local delimiter = starter[2] + local raw_new_trail = starter[3] + + if indent_type == "bq" and not breakable then + indent_table.ignore_blockquote_blank = true + end + + if has_trail(indent_table) then + local trail = indent_table.trail + if trail.is_code then + return false + end + last_trail = trail.remainder + else + local sp = process_starter_spacing(0, last_trail, 0, 0) + + if sp.is_code then + return false + end + last_trail = sp.remainder + end + + local preceding_indentation = count_indent_tab_level(indent_table) % 4 + local last_trail_length = #last_trail + local delimiter_length = total_delimiter_length(delimiter) + + local total_indent_level = preceding_indentation + last_trail_length + delimiter_length + + local sp = {} + if not is_blank then + sp = process_starter_spacing(total_indent_level, raw_new_trail, 0, 1) + end + + local del_trail_length = sp.left_total_stripped + if is_blank then + del_trail_length = 1 + elseif not sp.is_code then + del_trail_length = del_trail_length + #sp.remainder + end + + local indent_length = last_trail_length + delimiter_length + del_trail_length + local new_indent_info = {name=indent_type, length=indent_length} + + indent_table = update_indent_table(indent_table, new_indent_info, true) + indent_table = add_trail(indent_table, {is_code=sp.is_code, remainder=sp.remainder, total_length=sp.total_length, + full_remainder=sp.full_remainder}) + + return true, indent_table +end + +% \end{macrocode} +% \begin{markdown} +% +% Return the pattern corresponding with the indent name `name`. +% +% \end{markdown} +% \begin{macrocode} +local function decode_pattern(name) + local delimeter = parsers.succeed + if name == "bq" then + delimeter = parsers.more + end + + return C(parsers.optionalspace) * C(delimeter) * C(parsers.optionalspace) * Cp() +end + +% \end{macrocode} +% \begin{markdown} +% +% Find the first blank-only indent of the indent table `indent_table` followed +% by blank-only indents. +% +% \end{markdown} +% \begin{macrocode} +local function left_blank_starter(indent_table) + local blank_starter_index + + if not has_indents(indent_table) then + return + end + + for i = #indent_table.indents,1,-1 do + local value = indent_table.indents[i] + if value.name == "li" then + blank_starter_index = i + else + break + end + end + + return blank_starter_index +end + +% \end{macrocode} +% \begin{markdown} +% +% Apply the patterns decoded from the indents of the indent table `indent_table` +% iteratively starting at position `index` of the string `s`. If the `is_optional` +% mode is selected, match as many patterns as possible, else match all or fail. +% With the option `is_blank`, the parsing behaves as optional after the position +% of a blank-only indent has been surpassed. +% +% \end{markdown} +% \begin{macrocode} +local function traverse_indent(s, i, indent_table, is_optional, is_blank) + local new_index = i + + local preceding_indentation = 0 + local current_trail = {} + + local blank_starter = left_blank_starter(indent_table) + + for index = 1,#indent_table.indents do + local value = indent_table.indents[index] + local pattern = decode_pattern(value.name) + + -- match decoded pattern + local new_indent_info = lpeg.match(Ct(pattern), s, new_index) + if new_indent_info == nil then + local blankline_end = lpeg.match(Ct(parsers.blankline * Cg(Cp(), "pos")), s, new_index) + if is_optional or not indent_table.ignore_blockquote_blank or not blankline_end then + return is_optional, new_index, current_trail + end + + return traverse_indent(s, tonumber(blankline_end.pos), indent_table, is_optional, is_blank) + end + + local raw_last_trail = new_indent_info[1] + local delimiter = new_indent_info[2] + local raw_new_trail = new_indent_info[3] + local next_index = new_indent_info[4] + + local space_only = delimiter == "" + + -- check previous trail + if not space_only and next(current_trail) == nil then + local sp = process_starter_spacing(0, raw_last_trail, 0, 0) + current_trail = {is_code=sp.is_code, remainder=sp.remainder, total_length=sp.total_length, + full_remainder=sp.full_remainder} + end + + if next(current_trail) ~= nil then + if not space_only and current_trail.is_code then + return is_optional, new_index, current_trail + end + if current_trail.internal_remainder ~= nil then + raw_last_trail = current_trail.internal_remainder + end + end + + local raw_last_trail_length = 0 + local delimiter_length = 0 + + if not space_only then + delimiter_length = #delimiter + raw_last_trail_length = #raw_last_trail + end + + local total_indent_level = preceding_indentation + raw_last_trail_length + delimiter_length + + local spacing_to_process + local minimum = 0 + local left_strip_length = 0 + + if not space_only then + spacing_to_process = raw_new_trail + left_strip_length = 1 + else + spacing_to_process = raw_last_trail + minimum = value.length + end + + local sp = process_starter_spacing(total_indent_level, spacing_to_process, minimum, left_strip_length) + + if space_only and not sp.is_minimum then + return is_optional or (is_blank and blank_starter <= index), new_index, current_trail + end + + local indent_length = raw_last_trail_length + delimiter_length + sp.left_total_stripped + + -- update info for the next pattern + if not space_only then + preceding_indentation = preceding_indentation + indent_length + else + preceding_indentation = preceding_indentation + value.length + end + + current_trail = {is_code=sp.is_code, remainder=sp.remainder, internal_remainder=sp.minimum_remainder, + total_length=sp.total_length, full_remainder=sp.full_remainder} + new_index = next_index + end + + return true, new_index, current_trail +end + +% \end{macrocode} +% \begin{markdown} +% +% Check if a code trail is expected. +% +% \end{markdown} +% \begin{macrocode} +local function check_trail(expect_code, is_code) + return (expect_code and is_code) or (not expect_code and not is_code) +end + +% \end{macrocode} +% \begin{markdown} +% +% Check if the current trail of the `indent_table` would produce code if it is expected `expect_code` +% or it would not if it is not. If there is no trail, process and check the current spacing `spacing`. +% +% \end{markdown} +% \begin{macrocode} +local function check_trail_joined(s, i, indent_table, spacing, expect_code, omit_remainder) -- luacheck: ignore s i + local is_code + local remainder + + if has_trail(indent_table) then + local trail = indent_table.trail + is_code = trail.is_code + if is_code then + remainder = trail.remainder + else + remainder = trail.full_remainder + end + else + local sp = process_starter_spacing(0, spacing, 0, 0) + is_code = sp.is_code + if is_code then + remainder = sp.remainder + else + remainder = sp.full_remainder + end + end + + local result = check_trail(expect_code, is_code) + if omit_remainder then + return result + end + return result, remainder +end + +% \end{macrocode} +% \begin{markdown} +% +% Check if the current trail of the `indent_table` is of length between `min` and `max`. +% +% \end{markdown} +% \begin{macrocode} +local function check_trail_length(s, i, indent_table, spacing, min, max) -- luacheck: ignore s i + local trail + + if has_trail(indent_table) then + trail = indent_table.trail + else + trail = process_starter_spacing(0, spacing, 0, 0) + end + + local total_length = trail.total_length + if total_length == nil then + return false + end + + return min <= total_length and total_length <= max +end + +% \end{macrocode} +% \begin{markdown} +% +% Check the indentation of the continuation line, optionally with +% the mode `is_optional` selected. Check blank line exclusively with `is_blank`. +% +% \end{markdown} +% \begin{macrocode} +local function check_continuation_indentation(s, i, indent_table, is_optional, is_blank) + if not has_indents(indent_table) then + return true + end + + local passes, new_index, current_trail = traverse_indent(s, i, indent_table, is_optional, is_blank) + + if passes then + indent_table = add_trail(indent_table, current_trail) + return new_index, indent_table + end + return false +end + +% \end{macrocode} +% \begin{markdown} +% +% Get name of the last indent from the `indent_table`. +% +% \end{markdown} +% \begin{macrocode} +local function get_last_indent_name(indent_table) + if has_indents(indent_table) then + return indent_table.indents[#indent_table.indents].name + end +end + +% \end{macrocode} +% \begin{markdown} +% +% Remove the remainder altogether if the last indent from the `indent_table` +% is blank-only. +% +% \end{markdown} +% \begin{macrocode} +local function remove_remainder_if_blank(indent_table, remainder) + if get_last_indent_name(indent_table) == "li" then + return "" + end + return remainder +end + +% \end{macrocode} +% \begin{markdown} +% +% Take the trail `trail` or create a new one from `spacing` and comapre it +% with the expected `trail_type`. On success return the index `i` and the +% remainder of the trail. +% +% \end{markdown} +% \begin{macrocode} +local function check_trail_type(s, i, trail, spacing, trail_type) -- luacheck: ignore s i + if trail == nil then + trail = process_starter_spacing(0, spacing, 0, 0) + end + + if trail_type == "non-code" then + return check_trail(false, trail.is_code) + end + if trail_type == "code" then + return check_trail(true, trail.is_code) + end + if trail_type == "full-code" then + if (trail.is_code) then + return i, trail.remainder + end + return i, "" + end + if trail_type == "full-any" then + return i, trail.internal_remainder + end +end + +% \end{macrocode} +% \begin{markdown} +% +% Stores or restores an `is_freezing` trail from indent table `indent_table`. +% +% \end{markdown} +% \begin{macrocode} +local function trail_freezing(s, i, indent_table, is_freezing) -- luacheck: ignore s i + if is_freezing then + if indent_table.is_trail_frozen then + indent_table.trail = indent_table.frozen_trail + else + indent_table.frozen_trail = indent_table.trail + indent_table.is_trail_frozen = true + end + else + indent_table.frozen_trail = nil + indent_table.is_trail_frozen = false + end + return true, indent_table +end + +% \end{macrocode} +% \begin{markdown} +% +% Check the indentation of the continuation line, optionally with +% the mode `is_optional` selected. Check blank line specifically with `is_blank`. +% Additionally, also directly check the new trail with a type `trail_type`. +% +% \end{markdown} +% \begin{macrocode} +local function check_continuation_indentation_and_trail(s, i, indent_table, is_optional, is_blank, trail_type, + reset_rem, omit_remainder) + if not has_indents(indent_table) then + local spacing, new_index = lpeg.match(C(parsers.spacechar^0) * Cp(), s, i) + local result, remainder = check_trail_type(s, i, indent_table.trail, spacing, trail_type) + if remainder == nil then + if result then + return new_index + end + return false + end + if result then + return new_index, remainder + end + return false + end + + local passes, new_index, current_trail = traverse_indent(s, i, indent_table, is_optional, is_blank) + + if passes then + local spacing + if current_trail == nil then + local newer_spacing, newer_index = lpeg.match(C(parsers.spacechar^0) * Cp(), s, i) + current_trail = process_starter_spacing(0, newer_spacing, 0, 0) + new_index = newer_index + spacing = newer_spacing + else + spacing = current_trail.remainder + end + local result, remainder = check_trail_type(s, new_index, current_trail, spacing, trail_type) + if remainder == nil or omit_remainder then + if result then + return new_index + end + return false + end + + if is_blank and reset_rem then + remainder = remove_remainder_if_blank(indent_table, remainder) + end + if result then + return new_index, remainder + end + return false + end + return false +end + +% \end{macrocode} +% \begin{markdown} +% +% The following patterns check whitespace indentation at the start of a block. +% +% \end{markdown} +% \begin{macrocode} +parsers.check_trail = Cmt(Cb("indent_info") * C(parsers.spacechar^0) * Cc(false), check_trail_joined) + +parsers.check_trail_no_rem = Cmt(Cb("indent_info") * C(parsers.spacechar^0) * Cc(false) * Cc(true), check_trail_joined) + +parsers.check_code_trail = Cmt(Cb("indent_info") * C(parsers.spacechar^0) * Cc(true), check_trail_joined) + +parsers.check_trail_length_range = function(min, max) + return Cmt(Cb("indent_info") * C(parsers.spacechar^0) * Cc(min) * Cc(max), check_trail_length) +end + +parsers.check_trail_length = function(n) + return parsers.check_trail_length_range(n, n) +end + +% \end{macrocode} +% \begin{markdown} +% +% The following patterns handle trail backup, to prevent a failing pattern to modify it before +% passing it to the next. +% +% \end{markdown} +% \begin{macrocode} +parsers.freeze_trail = Cg(Cmt(Cb("indent_info") * Cc(true), trail_freezing), "indent_info") + +parsers.unfreeze_trail = Cg(Cmt(Cb("indent_info") * Cc(false), trail_freezing), "indent_info") + +% \end{macrocode} +% \begin{markdown} +% +% The following patterns check indentation in continuation lines as defined by the container start. +% +% \end{markdown} +% \begin{macrocode} +parsers.check_minimal_indent = Cmt(Cb("indent_info") * Cc(false), check_continuation_indentation) + +parsers.check_optional_indent = Cmt(Cb("indent_info") * Cc(true), check_continuation_indentation) + +parsers.check_minimal_blank_indent = Cmt(Cb("indent_info") * Cc(false) * Cc(true), check_continuation_indentation) + +% \end{macrocode} +% \begin{markdown} +% +% The following patterns check indentation in continuation lines as defined by the container start. +% Additionally the subsequent trail is also directly checked. +% +% \end{markdown} +% \begin{macrocode} + +parsers.check_minimal_indent_and_trail = Cmt( Cb("indent_info") + * Cc(false) * Cc(false) * Cc("non-code") * Cc(true), + check_continuation_indentation_and_trail) + +parsers.check_minimal_indent_and_code_trail = Cmt( Cb("indent_info") + * Cc(false) * Cc(false) * Cc("code") * Cc(false), + check_continuation_indentation_and_trail) + +parsers.check_minimal_blank_indent_and_full_code_trail = Cmt( Cb("indent_info") + * Cc(false) * Cc(true) * Cc("full-code") * Cc(true), + check_continuation_indentation_and_trail) + +parsers.check_minimal_indent_and_any_trail = Cmt( Cb("indent_info") + * Cc(false) * Cc(false) * Cc("full-any") * Cc(true) * Cc(false), + check_continuation_indentation_and_trail) + +parsers.check_minimal_blank_indent_and_any_trail = Cmt( Cb("indent_info") + * Cc(false) * Cc(true) * Cc("full-any") * Cc(true) * Cc(false), + check_continuation_indentation_and_trail) + +parsers.check_minimal_blank_indent_and_any_trail_no_rem = Cmt( Cb("indent_info") + * Cc(false) * Cc(true) * Cc("full-any") * Cc(true) * Cc(true), + check_continuation_indentation_and_trail) + +parsers.check_optional_indent_and_any_trail = Cmt( Cb("indent_info") + * Cc(true) * Cc(false) * Cc("full-any") * Cc(true) * Cc(false), + check_continuation_indentation_and_trail) + +parsers.check_optional_blank_indent_and_any_trail = Cmt( Cb("indent_info") + * Cc(true) * Cc(true) * Cc("full-any") * Cc(true) * Cc(false), + check_continuation_indentation_and_trail) + +% \end{macrocode} +% \begin{markdown} +% +% The following patterns specify behaviour around newlines. +% +% \end{markdown} +% \begin{macrocode} + +parsers.spnlc_noexc = parsers.optionalspace + * (parsers.newline * parsers.check_minimal_indent_and_any_trail)^-1 + +parsers.spnlc = parsers.optionalspace + * (V("EndlineNoSub"))^-1 + +parsers.spnlc_sep = parsers.optionalspace * V("EndlineNoSub") + + parsers.spacechar^1 + +parsers.only_blank = parsers.spacechar^0 * (parsers.newline + parsers.eof) + +% \end{macrocode} % \begin{figure} % \hspace*{-0.1\textwidth} % \begin{minipage}{1.2\textwidth} @@ -24150,6 +26641,7 @@ parsers.chunk = parsers.line * (parsers.optionallyindentedline - parsers.blankline)^0 parsers.attribute_key_char = parsers.alphanumeric + S("-_:.") +parsers.attribute_raw_char = parsers.alphanumeric + S("-_") parsers.attribute_key = (parsers.attribute_key_char - parsers.dash - parsers.digit) * parsers.attribute_key_char^0 @@ -24161,10 +26653,16 @@ parsers.attribute_value = ( (parsers.dquote / "") * (parsers.squote / "")) + ( parsers.anyescaped - parsers.dquote - parsers.rbrace - parsers.space)^0 +parsers.attribute_identifier = parsers.attribute_key_char^1 +parsers.attribute_classname = parsers.letter + * parsers.attribute_key_char^0 +parsers.attribute_raw = parsers.attribute_raw_char^1 parsers.attribute = (parsers.dash * Cc(".unnumbered")) - + C((parsers.hash + parsers.period) - * parsers.attribute_key) + + C( parsers.hash + * parsers.attribute_identifier) + + C( parsers.period + * parsers.attribute_classname) + Cs( parsers.attribute_key * parsers.optionalspace * parsers.equal * parsers.optionalspace * parsers.attribute_value) @@ -24180,7 +26678,7 @@ parsers.attributes = parsers.lbrace parsers.raw_attribute = parsers.lbrace * parsers.optionalspace * parsers.equal - * C(parsers.attribute_key) + * C(parsers.attribute_raw) * parsers.optionalspace * parsers.rbrace @@ -24195,22 +26693,43 @@ end % \par % \begin{markdown} % -%#### Parsers Used for Markdown Lists +%#### Parsers Used for HTML Entities % % \end{markdown} % \begin{macrocode} -parsers.bulletchar = C(parsers.plus + parsers.asterisk + parsers.dash) +local function repeat_between(pattern, min, max) + return -pattern^(max + 1) * pattern^min +end -parsers.bullet = ( parsers.bulletchar * #parsers.spacing - * (parsers.tab + parsers.space^-3) - + parsers.space * parsers.bulletchar * #parsers.spacing - * (parsers.tab + parsers.space^-2) - + parsers.space * parsers.space * parsers.bulletchar - * #parsers.spacing - * (parsers.tab + parsers.space^-1) - + parsers.space * parsers.space * parsers.space - * parsers.bulletchar * #parsers.spacing - ) +parsers.hexentity = parsers.ampersand * parsers.hash * C(S("Xx")) + * C(repeat_between(parsers.hexdigit, 1, 6)) * parsers.semicolon +parsers.decentity = parsers.ampersand * parsers.hash + * C(repeat_between(parsers.digit, 1, 7)) * parsers.semicolon +parsers.tagentity = parsers.ampersand * C(parsers.alphanumeric^1) + * parsers.semicolon + +parsers.html_entities = parsers.hexentity / entities.hex_entity_with_x_char + + parsers.decentity / entities.dec_entity + + parsers.tagentity / entities.char_entity +% \end{macrocode} +% \par +% \begin{markdown} +% +%#### Parsers Used for Markdown Lists +% +% \end{markdown} +% \begin{macrocode} +parsers.bullet = function(bullet_char, interrupting) + local allowed_end + if interrupting then + allowed_end = C(parsers.spacechar^1) * #parsers.linechar + else + allowed_end = C(parsers.spacechar^1) + #(parsers.newline + parsers.eof) + end + return parsers.check_trail + * Ct(C(bullet_char) * Cc("")) + * allowed_end +end local function tickbox(interior) return parsers.optionalspace * parsers.lbracket @@ -24235,17 +26754,399 @@ local function captures_equal_length(_,i,a,b) return #a == #b and i end -parsers.closeticks = parsers.space^-1 - * Cmt(C(parsers.backtick^1) - * Cb("ticks"), captures_equal_length) +parsers.closeticks = Cmt(C(parsers.backtick^1) + * Cb("ticks"), captures_equal_length) -parsers.intickschar = (parsers.any - S(" \n\r`")) - + (parsers.newline * -parsers.blankline) - + (parsers.space - parsers.closeticks) +parsers.intickschar = (parsers.any - S("\n\r`")) + + V("NoSoftLineBreakEndline") + (parsers.backtick^1 - parsers.closeticks) -parsers.inticks = parsers.openticks * parsers.space^-1 - * C(parsers.intickschar^0) * parsers.closeticks +local function process_inticks(s) + s = s:gsub("\n", " ") + s = s:gsub("^ (.*) $", "%1") + return s +end + +parsers.inticks = parsers.openticks + * C(parsers.space^0) + * parsers.closeticks + + parsers.openticks + * Cs(Cs(parsers.intickschar^0) / process_inticks) + * parsers.closeticks + +% \end{macrocode} +% \par +% \begin{markdown} +% +%#### Parsers Used for HTML +% +% \end{markdown} +% \begin{macrocode} +-- case-insensitive match (we assume s is lowercase). must be single byte encoding +parsers.keyword_exact = function(s) + local parser = P(0) + for i=1,#s do + local c = s:sub(i,i) + local m = c .. upper(c) + parser = parser * S(m) + end + return parser +end + +parsers.special_block_keyword = + parsers.keyword_exact("pre") + + parsers.keyword_exact("script") + + parsers.keyword_exact("style") + + parsers.keyword_exact("textarea") + +parsers.block_keyword = + parsers.keyword_exact("address") + + parsers.keyword_exact("article") + + parsers.keyword_exact("aside") + + parsers.keyword_exact("base") + + parsers.keyword_exact("basefont") + + parsers.keyword_exact("blockquote") + + parsers.keyword_exact("body") + + parsers.keyword_exact("caption") + + parsers.keyword_exact("center") + + parsers.keyword_exact("col") + + parsers.keyword_exact("colgroup") + + parsers.keyword_exact("dd") + + parsers.keyword_exact("details") + + parsers.keyword_exact("dialog") + + parsers.keyword_exact("dir") + + parsers.keyword_exact("div") + + parsers.keyword_exact("dl") + + parsers.keyword_exact("dt") + + parsers.keyword_exact("fieldset") + + parsers.keyword_exact("figcaption") + + parsers.keyword_exact("figure") + + parsers.keyword_exact("footer") + + parsers.keyword_exact("form") + + parsers.keyword_exact("frame") + + parsers.keyword_exact("frameset") + + parsers.keyword_exact("h1") + + parsers.keyword_exact("h2") + + parsers.keyword_exact("h3") + + parsers.keyword_exact("h4") + + parsers.keyword_exact("h5") + + parsers.keyword_exact("h6") + + parsers.keyword_exact("head") + + parsers.keyword_exact("header") + + parsers.keyword_exact("hr") + + parsers.keyword_exact("html") + + parsers.keyword_exact("iframe") + + parsers.keyword_exact("legend") + + parsers.keyword_exact("li") + + parsers.keyword_exact("link") + + parsers.keyword_exact("main") + + parsers.keyword_exact("menu") + + parsers.keyword_exact("menuitem") + + parsers.keyword_exact("nav") + + parsers.keyword_exact("noframes") + + parsers.keyword_exact("ol") + + parsers.keyword_exact("optgroup") + + parsers.keyword_exact("option") + + parsers.keyword_exact("p") + + parsers.keyword_exact("param") + + parsers.keyword_exact("section") + + parsers.keyword_exact("source") + + parsers.keyword_exact("summary") + + parsers.keyword_exact("table") + + parsers.keyword_exact("tbody") + + parsers.keyword_exact("td") + + parsers.keyword_exact("tfoot") + + parsers.keyword_exact("th") + + parsers.keyword_exact("thead") + + parsers.keyword_exact("title") + + parsers.keyword_exact("tr") + + parsers.keyword_exact("track") + + parsers.keyword_exact("ul") + +-- end conditions +parsers.html_blankline_end_condition = parsers.linechar^0 + * ( parsers.newline + * (parsers.check_minimal_blank_indent_and_any_trail + * #parsers.blankline + + parsers.check_minimal_indent_and_any_trail) + * parsers.linechar^1)^0 + * (parsers.newline^-1 / "") + +local function remove_trailing_blank_lines(s) + return s:gsub("[\n\r]+%s*$", "") +end + +parsers.html_until_end = function(end_marker) + return Cs(Cs((parsers.newline + * (parsers.check_minimal_blank_indent_and_any_trail + * #parsers.blankline + + parsers.check_minimal_indent_and_any_trail) + + parsers.linechar - end_marker)^0 + * parsers.linechar^0 * parsers.newline^-1) + / remove_trailing_blank_lines) +end + +-- attributes +parsers.html_attribute_spacing = parsers.optionalspace + * V("NoSoftLineBreakEndline") + * parsers.optionalspace + + parsers.spacechar^1 + +parsers.html_attribute_name = (parsers.letter + parsers.colon + parsers.underscore) + * (parsers.alphanumeric + parsers.colon + parsers.underscore + + parsers.period + parsers.dash)^0 + +parsers.html_attribute_value = parsers.squote + * (parsers.linechar - parsers.squote)^0 + * parsers.squote + + parsers.dquote + * (parsers.linechar - parsers.dquote)^0 + * parsers.dquote + + ( parsers.any - parsers.spacechar - parsers.newline + - parsers.dquote - parsers.squote - parsers.backtick + - parsers.equal - parsers.less - parsers.more)^1 + +parsers.html_inline_attribute_value = parsers.squote + * (V("NoSoftLineBreakEndline") + + parsers.any + - parsers.blankline^2 + - parsers.squote)^0 + * parsers.squote + + parsers.dquote + * (V("NoSoftLineBreakEndline") + + parsers.any + - parsers.blankline^2 + - parsers.dquote)^0 + * parsers.dquote + + (parsers.any - parsers.spacechar - parsers.newline + - parsers.dquote - parsers.squote - parsers.backtick + - parsers.equal - parsers.less - parsers.more)^1 + +parsers.html_attribute_value_specification = parsers.optionalspace + * parsers.equal + * parsers.optionalspace + * parsers.html_attribute_value + +parsers.html_spnl = parsers.optionalspace + * (V("NoSoftLineBreakEndline") * parsers.optionalspace)^-1 + +parsers.html_inline_attribute_value_specification = parsers.html_spnl + * parsers.equal + * parsers.html_spnl + * parsers.html_inline_attribute_value + +parsers.html_attribute = parsers.html_attribute_spacing + * parsers.html_attribute_name + * parsers.html_inline_attribute_value_specification^-1 + +parsers.html_non_newline_attribute = parsers.spacechar^1 + * parsers.html_attribute_name + * parsers.html_attribute_value_specification^-1 + +parsers.nested_breaking_blank = parsers.newline + * parsers.check_minimal_blank_indent + * parsers.blankline + +parsers.html_comment_start = P("<!--") + +parsers.html_comment_end = P("-->") + +parsers.html_comment = Cs( parsers.html_comment_start + * parsers.html_until_end(parsers.html_comment_end)) + +parsers.html_inline_comment = (parsers.html_comment_start / "") + * -P(">") * -P("->") + * Cs((V("NoSoftLineBreakEndline") + parsers.any - P("--") + - parsers.nested_breaking_blank - parsers.html_comment_end)^0) + * (parsers.html_comment_end / "") + +parsers.html_cdatasection_start = P("<![CDATA[") + +parsers.html_cdatasection_end = P("]]>") + +parsers.html_cdatasection = Cs( parsers.html_cdatasection_start + * parsers.html_until_end(parsers.html_cdatasection_end)) + +parsers.html_inline_cdatasection = parsers.html_cdatasection_start + * Cs(V("NoSoftLineBreakEndline") + parsers.any + - parsers.nested_breaking_blank - parsers.html_cdatasection_end)^0 + * parsers.html_cdatasection_end + +parsers.html_declaration_start = P("<!") * parsers.letter + +parsers.html_declaration_end = P(">") + +parsers.html_declaration = Cs( parsers.html_declaration_start + * parsers.html_until_end(parsers.html_declaration_end)) + +parsers.html_inline_declaration = parsers.html_declaration_start + * Cs(V("NoSoftLineBreakEndline") + parsers.any + - parsers.nested_breaking_blank - parsers.html_declaration_end)^0 + * parsers.html_declaration_end + +parsers.html_instruction_start = P("<?") + +parsers.html_instruction_end = P("?>") + +parsers.html_instruction = Cs( parsers.html_instruction_start + * parsers.html_until_end(parsers.html_instruction_end)) + +parsers.html_inline_instruction = parsers.html_instruction_start + * Cs(V("NoSoftLineBreakEndline") + parsers.any + - parsers.nested_breaking_blank - parsers.html_instruction_end)^0 + * parsers.html_instruction_end + +parsers.html_blankline = parsers.newline + * parsers.optionalspace + * parsers.newline + +parsers.html_tag_start = parsers.less + +parsers.html_tag_closing_start = parsers.less + * parsers.slash + +parsers.html_tag_end = parsers.html_spnl + * parsers.more + +parsers.html_empty_tag_end = parsers.html_spnl + * parsers.slash + * parsers.more + +-- opening tags +parsers.html_any_open_inline_tag = parsers.html_tag_start + * parsers.keyword + * parsers.html_attribute^0 + * parsers.html_tag_end + +parsers.html_any_open_tag = parsers.html_tag_start + * parsers.keyword + * parsers.html_non_newline_attribute^0 + * parsers.html_tag_end + +parsers.html_open_tag = parsers.html_tag_start + * parsers.block_keyword + * parsers.html_attribute^0 + * parsers.html_tag_end + +parsers.html_open_special_tag = parsers.html_tag_start + * parsers.special_block_keyword + * parsers.html_attribute^0 + * parsers.html_tag_end + +-- incomplete tags +parsers.incomplete_tag_following = parsers.spacechar + + parsers.more + + parsers.slash * parsers.more + + #(parsers.newline + parsers.eof) + +parsers.incomplete_special_tag_following = parsers.spacechar + + parsers.more + + #(parsers.newline + parsers.eof) + +parsers.html_incomplete_open_tag = parsers.html_tag_start + * parsers.block_keyword + * parsers.incomplete_tag_following + +parsers.html_incomplete_open_special_tag = parsers.html_tag_start + * parsers.special_block_keyword + * parsers.incomplete_special_tag_following + +parsers.html_incomplete_close_tag = parsers.html_tag_closing_start + * parsers.block_keyword + * parsers.incomplete_tag_following + +parsers.html_incomplete_close_special_tag = parsers.html_tag_closing_start + * parsers.special_block_keyword + * parsers.incomplete_tag_following + +-- closing tags +parsers.html_close_tag = parsers.html_tag_closing_start + * parsers.block_keyword + * parsers.html_tag_end + +parsers.html_any_close_tag = parsers.html_tag_closing_start + * parsers.keyword + * parsers.html_tag_end + +parsers.html_close_special_tag = parsers.html_tag_closing_start + * parsers.special_block_keyword + * parsers.html_tag_end + +-- empty tags +parsers.html_any_empty_inline_tag = parsers.html_tag_start + * parsers.keyword + * parsers.html_attribute^0 + * parsers.html_empty_tag_end + +parsers.html_any_empty_tag = parsers.html_tag_start + * parsers.keyword + * parsers.html_non_newline_attribute^0 + * parsers.optionalspace + * parsers.slash + * parsers.more + +parsers.html_empty_tag = parsers.html_tag_start + * parsers.block_keyword + * parsers.html_attribute^0 + * parsers.html_empty_tag_end + +parsers.html_empty_special_tag = parsers.html_tag_start + * parsers.special_block_keyword + * parsers.html_attribute^0 + * parsers.html_empty_tag_end + +parsers.html_incomplete_blocks = parsers.html_incomplete_open_tag + + parsers.html_incomplete_open_special_tag + + parsers.html_incomplete_close_tag + +-- parse special html blocks +parsers.html_blankline_ending_special_block_opening = (parsers.html_close_special_tag + + parsers.html_empty_special_tag) + * #(parsers.optionalspace + * (parsers.newline + parsers.eof)) + +parsers.html_blankline_ending_special_block = parsers.html_blankline_ending_special_block_opening + * parsers.html_blankline_end_condition + +parsers.html_special_block_opening = parsers.html_incomplete_open_special_tag + - parsers.html_empty_special_tag + +parsers.html_closing_special_block = parsers.html_special_block_opening + * parsers.html_until_end(parsers.html_close_special_tag) + +parsers.html_special_block = parsers.html_blankline_ending_special_block + + parsers.html_closing_special_block + +-- parse html blocks +parsers.html_block_opening = parsers.html_incomplete_open_tag + + parsers.html_incomplete_close_tag + +parsers.html_block = parsers.html_block_opening + * parsers.html_blankline_end_condition + +-- parse any html blocks +parsers.html_any_block_opening = (parsers.html_any_open_tag + + parsers.html_any_close_tag + + parsers.html_any_empty_tag) + * #(parsers.optionalspace * (parsers.newline + parsers.eof)) + +parsers.html_any_block = parsers.html_any_block_opening + * parsers.html_blankline_end_condition + +parsers.html_inline_comment_full = parsers.html_comment_start + * -P(">") * -P("->") + * Cs((V("NoSoftLineBreakEndline") + parsers.any - P("--") + - parsers.nested_breaking_blank - parsers.html_comment_end)^0) + * parsers.html_comment_end + +parsers.html_inline_tags = parsers.html_inline_comment_full + + parsers.html_any_empty_inline_tag + + parsers.html_inline_instruction + + parsers.html_inline_cdatasection + + parsers.html_inline_declaration + + parsers.html_any_open_inline_tag + + parsers.html_any_close_tag + % \end{macrocode} % \par % \begin{markdown} @@ -24254,7 +27155,54 @@ parsers.inticks = parsers.openticks * parsers.space^-1 % % \end{markdown} % \begin{macrocode} -parsers.leader = parsers.space^-3 +parsers.urlchar = parsers.anyescaped + - parsers.newline + - parsers.more + +parsers.auto_link_scheme_part = parsers.alphanumeric + + parsers.plus + + parsers.period + + parsers.dash + +parsers.auto_link_scheme = parsers.letter + * parsers.auto_link_scheme_part + * parsers.auto_link_scheme_part^-30 + +parsers.absolute_uri = parsers.auto_link_scheme * parsers.colon + * (parsers.any - parsers.spacing - parsers.less - parsers.more)^0 + +parsers.printable_characters = S(".!#$%&'*+/=?^_`{|}~-") + +parsers.email_address_local_part_char = parsers.alphanumeric + + parsers.printable_characters + +parsers.email_address_local_part = parsers.email_address_local_part_char^1 + +parsers.email_address_dns_label = parsers.alphanumeric + * (parsers.alphanumeric + parsers.dash)^-62 + * B(parsers.alphanumeric) + +parsers.email_address_domain = parsers.email_address_dns_label + * (parsers.period * parsers.email_address_dns_label)^0 + +parsers.email_address = parsers.email_address_local_part + * parsers.at + * parsers.email_address_domain + +parsers.auto_link_url = parsers.less + * C(parsers.absolute_uri) + * parsers.more + +parsers.auto_link_email = parsers.less + * C(parsers.email_address) + * parsers.more + +parsers.auto_link_relative_reference = parsers.less + * C(parsers.urlchar^1) + * parsers.more + +parsers.autolink = parsers.auto_link_url + + parsers.auto_link_email -- content in balanced brackets, parentheses, or quotes: parsers.bracketed = P{ parsers.lbracket @@ -24284,183 +27232,96 @@ parsers.dquoted = P{ parsers.dquote * parsers.alphanumeric ) + V(1))^0 * parsers.dquote } --- bracketed tag for markdown links, allowing nested brackets: -parsers.tag = parsers.lbracket +parsers.link_text = parsers.lbracket * Cs((parsers.alphanumeric^1 - + parsers.bracketed - + parsers.inticks - + ( parsers.backslash / "" * parsers.rbracket - + parsers.any - - (parsers.rbracket + parsers.blankline^2)))^0) + + parsers.bracketed + + parsers.inticks + + parsers.autolink + + V("InlineHtml") + + ( parsers.backslash * parsers.backslash) + + ( parsers.backslash * (parsers.lbracket + parsers.rbracket) + + V("NoSoftLineBreakSpace") + + V("NoSoftLineBreakEndline") + + (parsers.any + - (parsers.newline + parsers.lbracket + parsers.rbracket + parsers.blankline^2))))^0) * parsers.rbracket +parsers.link_label = parsers.lbracket + * -#(parsers.sp * parsers.rbracket) + * #((parsers.any - parsers.rbracket)^-999 * parsers.rbracket) + * Cs((parsers.alphanumeric^1 + + parsers.inticks + + parsers.autolink + + V("InlineHtml") + + ( parsers.backslash * parsers.backslash) + + ( parsers.backslash * (parsers.lbracket + parsers.rbracket) + + V("NoSoftLineBreakSpace") + + V("NoSoftLineBreakEndline") + + (parsers.any + - (parsers.newline + parsers.lbracket + parsers.rbracket + parsers.blankline^2))))^1) + * parsers.rbracket + +parsers.inparens_url = P{ parsers.lparent + * ((parsers.anyescaped - (parsers.lparent + + parsers.rparent + + parsers.spacing) + ) + V(1))^0 + * parsers.rparent } + -- url for markdown links, allowing nested brackets: parsers.url = parsers.less * Cs((parsers.anyescaped + - parsers.newline + - parsers.less - parsers.more)^0) * parsers.more - + Cs((parsers.inparens + (parsers.anyescaped - - parsers.spacing - - parsers.rparent))^1) - --- quoted text, possibly with nested quotes: -parsers.title_s = parsers.squote * Cs(((parsers.anyescaped-parsers.squote) - + parsers.squoted)^0) - * parsers.squote - -parsers.title_d = parsers.dquote * Cs(((parsers.anyescaped-parsers.dquote) - + parsers.dquoted)^0) - * parsers.dquote + + -parsers.less + * Cs((parsers.inparens_url + (parsers.anyescaped + - parsers.spacing + - parsers.lparent + - parsers.rparent))^1) + +-- quoted text: +parsers.title_s = parsers.squote + * Cs((parsers.html_entities + + V("NoSoftLineBreakSpace") + + V("NoSoftLineBreakEndline") + + (parsers.anyescaped - parsers.newline - parsers.squote - parsers.blankline^2))^0) + * parsers.squote + +parsers.title_d = parsers.dquote + * Cs((parsers.html_entities + + V("NoSoftLineBreakSpace") + + V("NoSoftLineBreakEndline") + + (parsers.anyescaped - parsers.newline - parsers.dquote - parsers.blankline^2))^0) + * parsers.dquote parsers.title_p = parsers.lparent - * Cs((parsers.inparens + (parsers.anyescaped-parsers.rparent))^0) + * Cs((parsers.html_entities + + V("NoSoftLineBreakSpace") + + V("NoSoftLineBreakEndline") + + (parsers.anyescaped - parsers.newline - parsers.lparent - parsers.rparent + - parsers.blankline^2))^0) * parsers.rparent parsers.title = parsers.title_d + parsers.title_s + parsers.title_p parsers.optionaltitle - = parsers.spnl * parsers.title * parsers.spacechar^0 + = parsers.spnlc * parsers.title * parsers.spacechar^0 + Cc("") -parsers.indirect_link - = parsers.tag - * ( C(parsers.spnl) * parsers.tag - + Cc(nil) * Cc(nil) -- always produce exactly two captures - ) - -parsers.indirect_image - = parsers.exclamation * parsers.indirect_link % \end{macrocode} % \par % \begin{markdown} % -%#### Parsers Used for HTML -% -% \end{markdown} -% \begin{macrocode} --- case-insensitive match (we assume s is lowercase). must be single byte encoding -parsers.keyword_exact = function(s) - local parser = P(0) - for i=1,#s do - local c = s:sub(i,i) - local m = c .. upper(c) - parser = parser * S(m) - end - return parser -end - -parsers.block_keyword = - parsers.keyword_exact("address") + parsers.keyword_exact("blockquote") + - parsers.keyword_exact("center") + parsers.keyword_exact("del") + - parsers.keyword_exact("dir") + parsers.keyword_exact("div") + - parsers.keyword_exact("p") + parsers.keyword_exact("pre") + - parsers.keyword_exact("li") + parsers.keyword_exact("ol") + - parsers.keyword_exact("ul") + parsers.keyword_exact("dl") + - parsers.keyword_exact("dd") + parsers.keyword_exact("form") + - parsers.keyword_exact("fieldset") + parsers.keyword_exact("isindex") + - parsers.keyword_exact("ins") + parsers.keyword_exact("menu") + - parsers.keyword_exact("noframes") + parsers.keyword_exact("frameset") + - parsers.keyword_exact("h1") + parsers.keyword_exact("h2") + - parsers.keyword_exact("h3") + parsers.keyword_exact("h4") + - parsers.keyword_exact("h5") + parsers.keyword_exact("h6") + - parsers.keyword_exact("hr") + parsers.keyword_exact("script") + - parsers.keyword_exact("noscript") + parsers.keyword_exact("table") + - parsers.keyword_exact("tbody") + parsers.keyword_exact("tfoot") + - parsers.keyword_exact("thead") + parsers.keyword_exact("th") + - parsers.keyword_exact("td") + parsers.keyword_exact("tr") - --- There is no reason to support bad html, so we expect quoted attributes -parsers.htmlattributevalue - = parsers.squote * (parsers.any - (parsers.blankline - + parsers.squote))^0 - * parsers.squote - + parsers.dquote * (parsers.any - (parsers.blankline - + parsers.dquote))^0 - * parsers.dquote - -parsers.htmlattribute = parsers.spacing^1 - * (parsers.alphanumeric + S("_-"))^1 - * parsers.sp * parsers.equal * parsers.sp - * parsers.htmlattributevalue - -parsers.htmlcomment = P("<!--") - * parsers.optionalspace - * Cs((parsers.any - parsers.optionalspace * P("-->"))^0) - * parsers.optionalspace - * P("-->") - -parsers.htmlinstruction = P("<?") * (parsers.any - P("?>"))^0 * P("?>") - -parsers.openelt_any = parsers.less * parsers.keyword * parsers.htmlattribute^0 - * parsers.sp * parsers.more - -parsers.openelt_exact = function(s) - return parsers.less * parsers.sp * parsers.keyword_exact(s) - * parsers.htmlattribute^0 * parsers.sp * parsers.more -end - -parsers.openelt_block = parsers.sp * parsers.block_keyword - * parsers.htmlattribute^0 * parsers.sp * parsers.more - -parsers.closeelt_any = parsers.less * parsers.sp * parsers.slash - * parsers.keyword * parsers.sp * parsers.more - -parsers.closeelt_exact = function(s) - return parsers.less * parsers.sp * parsers.slash * parsers.keyword_exact(s) - * parsers.sp * parsers.more -end - -parsers.emptyelt_any = parsers.less * parsers.sp * parsers.keyword - * parsers.htmlattribute^0 * parsers.sp * parsers.slash - * parsers.more - -parsers.emptyelt_block = parsers.less * parsers.sp * parsers.block_keyword - * parsers.htmlattribute^0 * parsers.sp * parsers.slash - * parsers.more - -parsers.displaytext = (parsers.any - parsers.less)^1 - --- return content between two matched HTML tags -parsers.in_matched = function(s) - return { parsers.openelt_exact(s) - * (V(1) + parsers.displaytext - + (parsers.less - parsers.closeelt_exact(s)))^0 - * parsers.closeelt_exact(s) } -end - -local function parse_matched_tags(s,pos) - local t = string.lower(lpeg.match(C(parsers.keyword),s,pos)) - return lpeg.match(parsers.in_matched(t),s,pos-1) -end - -parsers.in_matched_block_tags = parsers.less - * Cmt(#parsers.openelt_block, parse_matched_tags) - -% \end{macrocode} -% \par -% \begin{markdown} -% -%#### Parsers Used for HTML Entities -% -% \end{markdown} -% \begin{macrocode} -parsers.hexentity = parsers.ampersand * parsers.hash * S("Xx") - * C(parsers.hexdigit^1) * parsers.semicolon -parsers.decentity = parsers.ampersand * parsers.hash - * C(parsers.digit^1) * parsers.semicolon -parsers.tagentity = parsers.ampersand * C(parsers.alphanumeric^1) - * parsers.semicolon -% \end{macrocode} -% \par -% \begin{markdown} -% -%#### Helpers for Link Reference Definitions +%#### Helpers for Links and Link Reference Definitions % % \end{markdown} % \begin{macrocode} -- parse a reference definition: [foo]: /bar "title" -parsers.define_reference_parser = parsers.leader * parsers.tag * parsers.colon - * parsers.spacechar^0 * parsers.url - * parsers.optionaltitle +parsers.define_reference_parser = (parsers.check_trail / "") * parsers.link_label * parsers.colon + * parsers.spnlc * parsers.url + * ( parsers.spnlc_sep * parsers.title * parsers.only_blank + + Cc("") * parsers.only_blank) % \end{macrocode} % \par % \begin{markdown} @@ -24470,7 +27331,6 @@ parsers.define_reference_parser = parsers.leader * parsers.tag * parsers.colon % \end{markdown} % \begin{macrocode} parsers.Inline = V("Inline") -parsers.IndentedInline = V("IndentedInline") -- parse many p between starter and ender parsers.between = function(p, starter, ender) @@ -24478,26 +27338,6 @@ parsers.between = function(p, starter, ender) return (starter * #parsers.nonspacechar * Ct(p * (p - ender2)^0) * ender2) end -parsers.urlchar = parsers.anyescaped - - parsers.newline - - parsers.more - -parsers.auto_link_url = parsers.less - * C( parsers.alphanumeric^1 * P("://") - * parsers.urlchar^1) - * parsers.more - -parsers.auto_link_email - = parsers.less - * C((parsers.alphanumeric + S("-._+"))^1 - * P("@") * parsers.urlchar^1) - * parsers.more - -parsers.auto_link_relative_reference - = parsers.less - * C(parsers.urlchar^1) - * parsers.more - % \end{macrocode} % \par % \begin{markdown} @@ -24507,10 +27347,13 @@ parsers.auto_link_relative_reference % \end{markdown} % \begin{macrocode} parsers.lineof = function(c) - return (parsers.leader * (P(c) * parsers.optionalspace)^3 - * (parsers.newline * parsers.blankline^1 - + parsers.newline^-1 * parsers.eof)) + return (parsers.check_trail_no_rem * (P(c) * parsers.optionalspace)^3 + * (parsers.newline + parsers.eof)) end + +parsers.thematic_break_lines = parsers.lineof(parsers.asterisk) + + parsers.lineof(parsers.dash) + + parsers.lineof(parsers.underscore) % \end{macrocode} % \par % \begin{markdown} @@ -24524,11 +27367,21 @@ parsers.heading_start = #parsers.hash * C(parsers.hash^-6) * -parsers.hash / length -- parse setext header ending and return level -parsers.heading_level = parsers.equal^1 * Cc(1) + parsers.dash^1 * Cc(2) +parsers.heading_level = parsers.nonindentspace * parsers.equal^1 * parsers.optionalspace * #parsers.newline * Cc(1) + + parsers.nonindentspace * parsers.dash^1 * parsers.optionalspace * #parsers.newline * Cc(2) local function strip_atx_end(s) - return s:gsub("[#%s]*\n$","") + return s:gsub("%s+#*%s*\n$","") end + +parsers.atx_heading = parsers.check_trail_no_rem + * Cg(parsers.heading_start, "level") + * (C( parsers.optionalspace + * parsers.hash^0 + * parsers.optionalspace + * parsers.newline) + + parsers.spacechar^1 + * C(parsers.line)) % \end{macrocode} % \par % \begin{markdown} @@ -24610,7 +27463,7 @@ function M.reader.new(writer, options) tag = util.rope_to_string(tag) tag = tag:gsub("[ \n\r\t]+", " ") tag = tag:gsub("^ ", ""):gsub(" $", "") - tag = uni_case.casefold(tag, true, false) + tag = uni_algos.case.casefold(tag, true, false) return tag end % \end{macrocode} @@ -24733,11 +27586,6 @@ function M.reader.new(writer, options) return parsers.inlines end, false) - self.create_parser("parse_inlines_no_link", - function() - return parsers.inlines_no_link - end, false) - self.create_parser("parse_inlines_no_inline_note", function() return parsers.inlines_no_inline_note @@ -24752,6 +27600,134 @@ function M.reader.new(writer, options) function() return parsers.inlines_nbsp end, false) + self.create_parser("parse_inlines_no_link_or_emphasis", + function() + return parsers.inlines_no_link_or_emphasis + end, false) +% \end{macrocode} +% \par +% \begin{markdown} +% +%#### Parsers Used for Indentation (local) +% +% The following patterns represent basic building blocks of indented content. +% +% \end{markdown} +% \begin{macrocode} + parsers.minimally_indented_blankline = parsers.check_minimal_indent * (parsers.blankline / "") + + parsers.minimally_indented_block = parsers.check_minimal_indent * V("Block") + + parsers.minimally_indented_block_or_paragraph = parsers.check_minimal_indent * V("BlockOrParagraph") + + parsers.minimally_indented_paragraph = parsers.check_minimal_indent * V("Paragraph") + + parsers.minimally_indented_plain = parsers.check_minimal_indent * V("Plain") + + parsers.minimally_indented_par_or_plain = parsers.minimally_indented_paragraph + + parsers.minimally_indented_plain + + parsers.minimally_indented_par_or_plain_no_blank = parsers.minimally_indented_par_or_plain + - parsers.minimally_indented_blankline + + parsers.minimally_indented_ref = parsers.check_minimal_indent * V("Reference") + + parsers.minimally_indented_blank = parsers.check_minimal_indent * V("Blank") + + parsers.conditionally_indented_blankline = parsers.check_minimal_blank_indent * (parsers.blankline / "") + + parsers.minimally_indented_ref_or_block = parsers.minimally_indented_ref + + parsers.minimally_indented_block + - parsers.minimally_indented_blankline + + parsers.minimally_indented_ref_or_block_or_par = parsers.minimally_indented_ref + + parsers.minimally_indented_block_or_paragraph + - parsers.minimally_indented_blankline + +% \end{macrocode} +% \begin{markdown} +% +% The following pattern parses the properly indented content that follows the initial container start. +% +% \end{markdown} +% \begin{macrocode} + + parsers.separator_loop = function(separated_block, paragraph, block_separator, paragraph_separator) + return separated_block + + block_separator + * paragraph + * separated_block + + paragraph_separator + * paragraph + end + + parsers.create_loop_body_pair = function(separated_block, paragraph, block_separator, paragraph_separator) + return { + block = parsers.separator_loop(separated_block, paragraph, block_separator, block_separator), + par = parsers.separator_loop(separated_block, paragraph, block_separator, paragraph_separator) + } + end + + parsers.block_sep_group = function(blank) + return blank^0 * parsers.eof + + ( blank^2 / writer.paragraphsep + + blank^0 / writer.interblocksep + ) + end + + parsers.par_sep_group = function(blank) + return blank^0 * parsers.eof + + blank^0 / writer.paragraphsep + end + + parsers.sep_group_no_output = function(blank) + return blank^0 * parsers.eof + + blank^0 + end + + parsers.content_blank = parsers.minimally_indented_blankline + + parsers.ref_or_block_separated = parsers.sep_group_no_output(parsers.content_blank) + * ( parsers.minimally_indented_ref + - parsers.content_blank) + + parsers.block_sep_group(parsers.content_blank) + * ( parsers.minimally_indented_block + - parsers.content_blank) + + parsers.loop_body_pair = + parsers.create_loop_body_pair(parsers.ref_or_block_separated, + parsers.minimally_indented_par_or_plain_no_blank, + parsers.block_sep_group(parsers.content_blank), + parsers.par_sep_group(parsers.content_blank)) + + parsers.content_loop = ( V("Block") + * parsers.loop_body_pair.block^0 + + (V("Paragraph") + V("Plain")) + * parsers.ref_or_block_separated + * parsers.loop_body_pair.block^0 + + (V("Paragraph") + V("Plain")) + * parsers.loop_body_pair.par^0) + * parsers.content_blank^0 + + parsers.indented_content = function() + return Ct( (V("Reference") + (parsers.blankline / "")) + * parsers.content_blank^0 + * parsers.check_minimal_indent + * parsers.content_loop + + (V("Reference") + (parsers.blankline / "")) + * parsers.content_blank^0 + + parsers.content_loop) + end + + parsers.add_indent = function(pattern, name, breakable) + return Cg(Cmt( Cb("indent_info") + * Ct(pattern) + * (#parsers.linechar * Cc(false) + Cc(true)) -- check if starter is blank + * Cc(name) + * Cc(breakable), + process_starter_indent), "indent_info") + end + % \end{macrocode} % \par % \begin{markdown} @@ -24766,18 +27742,28 @@ function M.reader.new(writer, options) parsers.dig = parsers.digit end - parsers.enumerator = C(parsers.dig^3 * parsers.period) * #parsers.spacing - + C(parsers.dig^2 * parsers.period) * #parsers.spacing - * (parsers.tab + parsers.space^1) - + C(parsers.dig * parsers.period) * #parsers.spacing - * (parsers.tab + parsers.space^-2) - + parsers.space * C(parsers.dig^2 * parsers.period) - * #parsers.spacing - + parsers.space * C(parsers.dig * parsers.period) - * #parsers.spacing - * (parsers.tab + parsers.space^-1) - + parsers.space * parsers.space * C(parsers.dig^1 - * parsers.period) * #parsers.spacing + parsers.enumerator = function(delimiter_type, interrupting) + local delimiter_range + local allowed_end + if interrupting then + delimiter_range = P("1") + allowed_end = C(parsers.spacechar^1) * #parsers.linechar + else + delimiter_range = parsers.dig * parsers.dig^-8 + allowed_end = C(parsers.spacechar^1) + #(parsers.newline + parsers.eof) + end + + return parsers.check_trail + * Ct(C(delimiter_range) * C(delimiter_type)) + * allowed_end + end + + parsers.starter = parsers.bullet(parsers.dash) + + parsers.bullet(parsers.asterisk) + + parsers.bullet(parsers.plus) + + parsers.enumerator(parsers.period) + + parsers.enumerator(parsers.rparent) + % \end{macrocode} % \par % \begin{markdown} @@ -24786,20 +27772,369 @@ function M.reader.new(writer, options) % % \end{markdown} % \begin{macrocode} - -- strip off leading > and indents, and run through blocks - parsers.blockquote_body = ((parsers.leader * parsers.more * parsers.space^-1)/"" - * parsers.linechar^0 * parsers.newline)^1 - * (-V("BlockquoteExceptions") * parsers.linechar^1 - * parsers.newline)^0 + parsers.blockquote_start = parsers.check_trail * C(parsers.more) * C(parsers.spacechar^0) + + parsers.blockquote_body = parsers.add_indent(parsers.blockquote_start, "bq", true) + * parsers.indented_content() + * remove_indent("bq") if not options.breakableBlockquotes then - parsers.blockquote_body = parsers.blockquote_body - * (parsers.blankline^0 / "") + parsers.blockquote_body = parsers.add_indent(parsers.blockquote_start, "bq", false) + * parsers.indented_content() + * remove_indent("bq") end % \end{macrocode} % \par % \begin{markdown} % +%#### Helpers for Emphasis and Strong Emphasis (local) +% +% Parse the content of a table `content_part` with links, images and emphasis disabled. +% +% \end{markdown} +% \begin{macrocode} + local function parse_content_part(content_part) + local rope = util.rope_to_string(content_part) + local parsed = self.parser_functions.parse_inlines_no_link_or_emphasis(rope) + parsed.indent_info = nil + return parsed + end + +% \end{macrocode} +% \begin{markdown} +% +% Collect the content between the `opening_index` and `closing_index` in the delimiter table `t`. +% +% \end{markdown} +% \begin{macrocode} + local function collect_emphasis_content(t, opening_index, closing_index) + local content = {} + + local content_part = {} + for i = opening_index, closing_index do + local value = t[i] + + if value.rendered ~= nil then + content[#content + 1] = parse_content_part(content_part) + content_part = {} + content[#content + 1] = value.rendered + value.rendered = nil + else + if value.type == "delimiter" and value.element == "emphasis" then + if value.is_active then + content_part[#content_part + 1] = string.rep(value.character, value.current_count) + end + else + content_part[#content_part + 1] = value.content + end + value.content = '' + value.is_active = false + end + end + + if next(content_part) ~= nil then + content[#content + 1] = parse_content_part(content_part) + end + + return content + end + +% \end{macrocode} +% \begin{markdown} +% +% Render content between the `opening_index` and `closing_index` in the delimiter table `t` +% as emphasis. +% +% \end{markdown} +% \begin{macrocode} + local function fill_emph(t, opening_index, closing_index) + local content = collect_emphasis_content(t, opening_index + 1, closing_index - 1) + t[opening_index + 1].is_active = true + t[opening_index + 1].rendered = writer.emphasis(content) + end + +% \end{macrocode} +% \begin{markdown} +% +% Render content between the `opening_index` and `closing_index` in the delimiter table `t` +% as strong emphasis. +% +% \end{markdown} +% \begin{macrocode} + local function fill_strong(t, opening_index, closing_index) + local content = collect_emphasis_content(t, opening_index + 1, closing_index - 1) + t[opening_index + 1].is_active = true + t[opening_index + 1].rendered = writer.strong(content) + end + +% \end{macrocode} +% \begin{markdown} +% +% Check whether the opening delimiter `opening_delimiter` and closing delimiter `closing_delimiter` break +% rule three together. +% +% \end{markdown} +% \begin{macrocode} + local function breaks_three_rule(opening_delimiter, closing_delimiter) + return (opening_delimiter.is_closing or closing_delimiter.is_opening) and + ((opening_delimiter.original_count + closing_delimiter.original_count) % 3 == 0) and + (opening_delimiter.original_count % 3 ~= 0 or closing_delimiter.original_count % 3 ~= 0) + end + +% \end{macrocode} +% \begin{markdown} +% +% Look for the first potential emphasis opener in the delimiter table `t` in the range from +% `bottom_index` to `latest_index` that has the same character `character` as the closing +% delimiter `closing_delimiter`. +% +% \end{markdown} +% \begin{macrocode} + local function find_emphasis_opener(t, bottom_index, latest_index, character, closing_delimiter) + for i = latest_index, bottom_index, -1 do + local value = t[i] + if value.is_active and + value.is_opening and + value.type == "delimiter" and + value.element == "emphasis" and + (value.character == character) and + (value.current_count > 0) then + if not breaks_three_rule(value, closing_delimiter) then + return i + end + end + end + end + +% \end{macrocode} +% \begin{markdown} +% +% Iterate over the delimiters in the delimiter table `t`, producing emphasis or strong emphasis macros. +% +% \end{markdown} +% \begin{macrocode} + local function process_emphasis(t, opening_index, closing_index) + for i = opening_index, closing_index do + local value = t[i] + if value.type == "delimiter" and value.element == "emphasis" then + local delimiter_length = string.len(value.content) + value.character = string.sub(value.content, 1, 1) + value.current_count = delimiter_length + value.original_count = delimiter_length + end + end + + local openers_bottom = { + ['*'] = { + [true] = {opening_index, opening_index, opening_index}, + [false] = {opening_index, opening_index, opening_index} + }, + ['_'] = { + [true] = {opening_index, opening_index, opening_index}, + [false] = {opening_index, opening_index, opening_index} + } + } + + local current_position = opening_index + local max_position = closing_index + + while current_position <= max_position do + local value = t[current_position] + + if value.type ~= "delimiter" or + value.element ~= "emphasis" or + not value.is_active or + not value.is_closing or + (value.current_count <= 0) then + current_position = current_position + 1 + goto continue + end + + local character = value.character + local is_opening = value.is_opening + local closing_length_modulo_three = value.original_count % 3 + + local current_openers_bottom = openers_bottom[character][is_opening][closing_length_modulo_three + 1] + + local opener_position = find_emphasis_opener(t, current_openers_bottom, current_position - 1, character, value) + + if (opener_position == nil) then + openers_bottom[character][is_opening][closing_length_modulo_three + 1] = current_position + current_position = current_position + 1 + goto continue + end + + local opening_delimiter = t[opener_position] + + local current_opening_count = opening_delimiter.current_count + local current_closing_count = t[current_position].current_count + + if (current_opening_count >= 2) and (current_closing_count >= 2) then + opening_delimiter.current_count = current_opening_count - 2 + t[current_position].current_count = current_closing_count - 2 + fill_strong(t, opener_position, current_position) + else + opening_delimiter.current_count = current_opening_count - 1 + t[current_position].current_count = current_closing_count - 1 + fill_emph(t, opener_position, current_position) + end + + ::continue:: + end + end + + local cont = lpeg.R("\128\191") -- continuation byte + +% \end{macrocode} +% \begin{markdown} +% +% Match a UTF-8 character of byte length `n`. +% +% \end{markdown} +% \begin{macrocode} + local function utf8_by_byte_count(n) + if (n == 1) then + return lpeg.R("\0\127") + end + if (n == 2) then + return lpeg.R("\194\223") * cont + end + if (n == 3) then + return lpeg.R("\224\239") * cont * cont + end + if (n == 4) then + return lpeg.R("\240\244") * cont * cont * cont + end + end + +% \end{macrocode} +% \begin{markdown} +% +% Check if a there is a character of a type `chartype` between the start position `start_pos` +% and end position `end_pos` in a string `s` relative to current index `i`. +% +% \end{markdown} +% \begin{macrocode} + local function check_unicode_type(s, i, start_pos, end_pos, chartype) + local c + local char_length + for pos = start_pos, end_pos, 1 do + if (start_pos < 0) then + char_length = -pos + else + char_length = pos + 1 + end + c = lpeg.match({ C(utf8_by_byte_count(char_length)) },s,i+pos) + if (c ~= nil) and (unicode.utf8.match(c, chartype)) then + return i + end + end + end + + local function check_preceding_unicode_punctuation(s, i) + return check_unicode_type(s, i, -4, -1, "%p") + end + + local function check_preceding_unicode_whitespace(s, i) + return check_unicode_type(s, i, -4, -1, "%s") + end + + local function check_following_unicode_punctuation(s, i) + return check_unicode_type(s, i, 0, 3, "%p") + end + + local function check_following_unicode_whitespace(s, i) + return check_unicode_type(s, i, 0, 3, "%s") + end + + parsers.unicode_preceding_punctuation = B(parsers.escapable) + + Cmt(parsers.succeed, check_preceding_unicode_punctuation) + + parsers.unicode_preceding_whitespace = Cmt(parsers.succeed, check_preceding_unicode_whitespace) + + parsers.unicode_following_punctuation = #parsers.escapable + + Cmt(parsers.succeed, check_following_unicode_punctuation) + + parsers.unicode_following_whitespace = Cmt(parsers.succeed, check_following_unicode_whitespace) + + parsers.delimiter_run = function(character) + return (B(parsers.backslash * character) + -B(character)) + * character^1 + * -#character + end + + parsers.left_flanking_delimiter_run = function(character) + return (B( parsers.any) + * (parsers.unicode_preceding_punctuation + parsers.unicode_preceding_whitespace) + + -B(parsers.any)) + * parsers.delimiter_run(character) + * parsers.unicode_following_punctuation + + parsers.delimiter_run(character) + * -#(parsers.unicode_following_punctuation + parsers.unicode_following_whitespace + + parsers.eof) + end + + parsers.right_flanking_delimiter_run = function(character) + return parsers.unicode_preceding_punctuation + * parsers.delimiter_run(character) + * (parsers.unicode_following_punctuation + parsers.unicode_following_whitespace + + parsers.eof) + + (B(parsers.any) + * -(parsers.unicode_preceding_punctuation + parsers.unicode_preceding_whitespace)) + * parsers.delimiter_run(character) + end + + if options.underscores then + parsers.emph_start = parsers.left_flanking_delimiter_run(parsers.asterisk) + + (-#parsers.right_flanking_delimiter_run(parsers.underscore) + + (parsers.unicode_preceding_punctuation + * #parsers.right_flanking_delimiter_run(parsers.underscore))) + * parsers.left_flanking_delimiter_run(parsers.underscore) + + parsers.emph_end = parsers.right_flanking_delimiter_run(parsers.asterisk) + + (-#parsers.left_flanking_delimiter_run(parsers.underscore) + + #(parsers.left_flanking_delimiter_run(parsers.underscore) + * parsers.unicode_following_punctuation)) + * parsers.right_flanking_delimiter_run(parsers.underscore) + else + parsers.emph_start = parsers.left_flanking_delimiter_run(parsers.asterisk) + + parsers.emph_end = parsers.right_flanking_delimiter_run(parsers.asterisk) + end + + parsers.emph_capturing_open_and_close = #parsers.emph_start * #parsers.emph_end + * Ct( Cg(Cc("delimiter"), "type") + * Cg(Cc("emphasis"), "element") + * Cg(C(parsers.emph_start), "content") + * Cg(Cc(true), "is_opening") + * Cg(Cc(true), "is_closing")) + + parsers.emph_capturing_open = Ct( Cg(Cc("delimiter"), "type") + * Cg(Cc("emphasis"), "element") + * Cg(C(parsers.emph_start), "content") + * Cg(Cc(true), "is_opening") + * Cg(Cc(false), "is_closing")) + + parsers.emph_capturing_close = Ct( Cg(Cc("delimiter"), "type") + * Cg(Cc("emphasis"), "element") + * Cg(C(parsers.emph_end), "content") + * Cg(Cc(false), "is_opening") + * Cg(Cc(true), "is_closing")) + + parsers.emph_open_or_close = parsers.emph_capturing_open_and_close + + parsers.emph_capturing_open + + parsers.emph_capturing_close + + parsers.emph_open = parsers.emph_capturing_open_and_close + + parsers.emph_capturing_open + + parsers.emph_close = parsers.emph_capturing_open_and_close + + parsers.emph_capturing_close + +% \end{macrocode} +% \par +% \begin{markdown} +% %#### Helpers for Links and Link Reference Definitions (local) % % \end{markdown} @@ -24818,14 +28153,16 @@ function M.reader.new(writer, options) % % \end{markdown} % \begin{macrocode} - function self.register_link(tag, url, title, + function self.register_link(_, tag, url, title, attributes) - tag = self.normalize_tag(tag) - references[tag] = { - url = url, - title = title, - attributes = attributes, - } + local normalized_tag = self.normalize_tag(tag) + if references[normalized_tag] == nil then + references[normalized_tag] = { + url = url, + title = title, + attributes = attributes + } + end return "" end @@ -24834,103 +28171,505 @@ function M.reader.new(writer, options) % \begin{markdown} % % The \luamdef{reader->lookup_reference} method looks up a -% reference with link label `tag`. When the reference exists -% the method returns a link. The attributes of a link are -% produced by merging the attributes of the link reference -% and the optional `attributes`. Otherwise, the method returns a -% two-tuple of `nil` and fallback text constructed from the -% link text `label` and the optional spaces `sps` between the -% link text and the link label. -% -% \end{markdown} -% \begin{macrocode} - function self.lookup_reference(label, sps, tag, - attributes) - local tagpart - if not tag then - tag = label - tagpart = "" - elseif tag == "" then - tag = label - tagpart = "[]" - else - tagpart = { - "[", - self.parser_functions.parse_inlines(tag), - "]" - } - end - if sps then - tagpart = {sps, tagpart} +% reference with link label `tag`. +% +% \end{markdown} +% \begin{macrocode} + function self.lookup_reference(tag) + return references[self.normalize_tag(tag)] + end + + parsers.title_s_direct_ref = parsers.squote + * Cs((parsers.html_entities + + (parsers.anyescaped - parsers.squote - parsers.blankline^2))^0) + * parsers.squote + + parsers.title_d_direct_ref = parsers.dquote + * Cs((parsers.html_entities + + (parsers.anyescaped - parsers.dquote - parsers.blankline^2))^0) + * parsers.dquote + + parsers.title_p_direct_ref = parsers.lparent + * Cs((parsers.html_entities + + (parsers.anyescaped - parsers.lparent - parsers.rparent - parsers.blankline^2))^0) + * parsers.rparent + + parsers.title_direct_ref = parsers.title_s_direct_ref + + parsers.title_d_direct_ref + + parsers.title_p_direct_ref + + parsers.inline_direct_ref_inside = parsers.lparent * parsers.spnl + * Cg(parsers.url + Cc(""), "url") + * parsers.spnl + * Cg(parsers.title_direct_ref + Cc(""), "title") + * parsers.spnl * parsers.rparent + + parsers.inline_direct_ref = parsers.lparent * parsers.spnlc + * Cg(parsers.url + Cc(""), "url") + * parsers.spnlc + * Cg(parsers.title + Cc(""), "title") + * parsers.spnlc * parsers.rparent + + parsers.empty_link = parsers.lbracket + * parsers.rbracket + + parsers.inline_link = parsers.link_text + * parsers.inline_direct_ref + + parsers.full_link = parsers.link_text + * parsers.link_label + + parsers.shortcut_link = parsers.link_label + * -(parsers.empty_link + parsers.link_label) + + parsers.collapsed_link = parsers.link_label + * parsers.empty_link + + parsers.image_opening = #(parsers.exclamation * parsers.inline_link) + * Cg(Cc("inline"), "link_type") + + #(parsers.exclamation * parsers.full_link) + * Cg(Cc("full"), "link_type") + + #(parsers.exclamation * parsers.collapsed_link) + * Cg(Cc("collapsed"), "link_type") + + #(parsers.exclamation * parsers.shortcut_link) + * Cg(Cc("shortcut"), "link_type") + + #(parsers.exclamation * parsers.empty_link) + * Cg(Cc("empty"), "link_type") + + parsers.link_opening = #parsers.inline_link + * Cg(Cc("inline"), "link_type") + + #parsers.full_link + * Cg(Cc("full"), "link_type") + + #parsers.collapsed_link + * Cg(Cc("collapsed"), "link_type") + + #parsers.shortcut_link + * Cg(Cc("shortcut"), "link_type") + + #parsers.empty_link + * Cg(Cc("empty_link"), "link_type") + + #parsers.link_text + * Cg(Cc("link_text"), "link_type") + + parsers.link_image_opening = Ct( Cg(Cc("delimiter"), "type") + * Cg(Cc(true), "is_opening") + * Cg(Cc(false), "is_closing") + * ( Cg(Cc("image"), "element") + * parsers.image_opening + * Cg(parsers.exclamation * parsers.lbracket, "content") + + Cg(Cc("link"), "element") + * parsers.link_opening + * Cg(parsers.lbracket, "content"))) + + parsers.link_image_closing = Ct( Cg(Cc("delimiter"), "type") + * Cg(Cc("link"), "element") + * Cg(Cc(false), "is_opening") + * Cg(Cc(true), "is_closing") + * ( Cg(Cc(true), "is_direct") + * Cg(parsers.rbracket * #parsers.inline_direct_ref, "content") + + Cg(Cc(false), "is_direct") + * Cg(parsers.rbracket, "content"))) + + parsers.link_image_open_or_close = parsers.link_image_opening + + parsers.link_image_closing + + if options.html then + parsers.link_emph_precedence = parsers.inticks + + parsers.autolink + + parsers.html_inline_tags + else + parsers.link_emph_precedence = parsers.inticks + + parsers.autolink + end + + parsers.link_and_emph_endline = parsers.newline + * ((parsers.check_minimal_indent + * -V("EndlineExceptions") + + parsers.check_optional_indent + * -V("EndlineExceptions") + * -parsers.starter) / "") + * parsers.spacechar^0 / "\n" + + parsers.link_and_emph_content = Ct( Cg(Cc("content"), "type") + * Cg(Cs(( parsers.link_emph_precedence + + parsers.backslash * parsers.any + + parsers.link_and_emph_endline + + (parsers.linechar + - parsers.blankline^2 + - parsers.link_image_open_or_close + - parsers.emph_open_or_close))^0), "content")) + + parsers.link_and_emph_table = (parsers.link_image_opening + parsers.emph_open) + * parsers.link_and_emph_content + * ((parsers.link_image_open_or_close + parsers.emph_open_or_close) + * parsers.link_and_emph_content)^1 + +% \end{macrocode} +% \begin{markdown} +% +% Collect the content between the `opening_index` and `closing_index` in the delimiter table `t`. +% +% \end{markdown} +% \begin{macrocode} + local function collect_link_content(t, opening_index, closing_index) + local content = {} + for i = opening_index, closing_index do + content[#content + 1] = t[i].content end - tag = self.normalize_tag(tag) - local r = references[tag] - if r then - local merged_attributes = {} - for _, attribute in ipairs(r.attributes or {}) do - table.insert(merged_attributes, attribute) + return util.rope_to_string(content) + end + +% \end{macrocode} +% \begin{markdown} +% +% Look for the closest potential link opener in the delimiter table `t` in the range from +% `bottom_index` to `latest_index`. +% +% \end{markdown} +% \begin{macrocode} + local function find_link_opener(t, bottom_index, latest_index) + for i = latest_index, bottom_index, -1 do + local value = t[i] + if value.type == "delimiter" and + value.is_opening and + (value.element == "link" or value.element == "image") + and not value.removed then + if value.is_active then + return i + end + value.removed = true + return nil end - for _, attribute in ipairs(attributes or {}) do - table.insert(merged_attributes, attribute) + end + end + +% \end{macrocode} +% \begin{markdown} +% +% Find the position of a delimiter that closes a full link after an an index `latest_index` +% in the delimiter table `t`. +% +% \end{markdown} +% \begin{macrocode} + local function find_next_link_closing_index(t, latest_index) + for i = latest_index, #t do + local value = t[i] + if value.is_closing and + value.element == "link" and + not value.removed then + return i end - if #merged_attributes == 0 then - merged_attributes = nil + end + end + +% \end{macrocode} +% \begin{markdown} +% +% Disable all preceding opening link delimiters by marking them inactive with the `is_active` property +% to prevent links within links. Images within links are allowed. +% +% \end{markdown} +% \begin{macrocode} + local function disable_previous_link_openers(t, opening_index) + if t[opening_index].element == "image" then + return + end + + for i = opening_index, 1, -1 do + local value = t[i] + if value.is_active and + value.type == "delimiter" and + value.is_opening and + value.element == "link" then + value.is_active = false end - return { - url = r.url, - title = r.title, - attributes = merged_attributes, - } - else - return nil, { - "[", - self.parser_functions.parse_inlines(label), - "]", - tagpart - } end end - -- lookup link reference and return a link, if the reference is found, - -- or a bracketed label otherwise. - local function indirect_link(label, sps, tag) - return writer.defer_call(function() - local r,fallback = self.lookup_reference(label, sps, tag) - if r then - return writer.link( - self.parser_functions.parse_inlines_no_link(label), - r.url, r.title) - else - return fallback +% \end{macrocode} +% \begin{markdown} +% +% Disable the delimiters between the `opening_index` and `closing_index` in the delimiter table `t` +% by marking them inactive with the `is_active` property. +% +% \end{markdown} +% \begin{macrocode} + local function disable_range(t, opening_index, closing_index) + for i = opening_index, closing_index do + local value = t[i] + if value.is_active then + value.is_active = false + if value.type == "delimiter" then + value.removed = true + end end - end) + end end - -- lookup image reference and return an image, if the reference is found, - -- or a bracketed label otherwise. - local function indirect_image(label, sps, tag) - return writer.defer_call(function() - local r,fallback = self.lookup_reference(label, sps, tag) - if r then - return writer.image(writer.string(label), r.url, r.title) - else - return {"!", fallback} +% \end{macrocode} +% \begin{markdown} +% +% Clear the parsed content between the `opening_index` and `closing_index` in the delimiter table `t`. +% +% \end{markdown} +% \begin{macrocode} + local function delete_parsed_content_in_range(t, opening_index, closing_index) + for i = opening_index, closing_index do + t[i].rendered = nil + end + end + +% \end{macrocode} +% \begin{markdown} +% +% Clear the content between the `opening_index` and `closing_index` in the delimiter table `t`. +% +% \end{markdown} +% \begin{macrocode} + local function empty_content_in_range(t, opening_index, closing_index) + for i = opening_index, closing_index do + t[i].content = '' + end + end + +% \end{macrocode} +% \begin{markdown} +% +% Join the attributes from the link reference definition `reference_attributes` with the link's own +% attributes `own_attributes`. +% +% \end{markdown} +% \begin{macrocode} + local function join_attributes(reference_attributes, own_attributes) + local merged_attributes = {} + for _, attribute in ipairs(reference_attributes or {}) do + table.insert(merged_attributes, attribute) + end + for _, attribute in ipairs(own_attributes or {}) do + table.insert(merged_attributes, attribute) + end + if next(merged_attributes) == nil then + merged_attributes = nil + end + return merged_attributes + end + +% \end{macrocode} +% \begin{markdown} +% +% Parse content between two delimiters in the delimiter table `t`. Produce the respective link and image +% macros. +% +% \end{markdown} +% \begin{macrocode} + local function render_link_or_image(t, opening_index, closing_index, content_end_index, reference) + process_emphasis(t, opening_index, content_end_index) + local mapped = collect_emphasis_content(t, opening_index + 1, content_end_index - 1) + + local rendered = {} + if (t[opening_index].element == "link") then + rendered = writer.link(mapped, reference.url, reference.title, reference.attributes) + end + + if (t[opening_index].element == "image") then + rendered = writer.image(mapped, reference.url, reference.title, reference.attributes) + end + + t[opening_index].rendered = rendered + delete_parsed_content_in_range(t, opening_index + 1, closing_index) + empty_content_in_range(t, opening_index, closing_index) + disable_previous_link_openers(t, opening_index) + disable_range(t, opening_index, closing_index) + end + +% \end{macrocode} +% \begin{markdown} +% +% Match the link destination of an inline link at index `closing_index` in table `t` +% when `match_reference` is true. Additionally, match attributes when the option +% \Opt{linkAttributes} is enabled. +% +% \end{markdown} +% \begin{macrocode} + local function resolve_inline_following_content(t, closing_index, match_reference, match_link_attributes) + local content = "" + for i = closing_index + 1, #t do + content = content .. t[i].content + end + + local matching_content = parsers.succeed + + if match_reference then + matching_content = matching_content * parsers.inline_direct_ref_inside + end + + if match_link_attributes then + matching_content = matching_content * Cg(Ct(parsers.attributes^-1), "attributes") + end + + local matched = lpeg.match(Ct(matching_content * Cg(Cp(), "end_position")), content) + + local matched_count = matched.end_position - 1 + for i = closing_index + 1, #t do + local value = t[i] + + local chars_left = matched_count + matched_count = matched_count - #value.content + + if matched_count <= 0 then + value.content = value.content:sub(chars_left + 1) + break end - end) + + value.content = '' + value.is_active = false + end + + local attributes = matched.attributes + if attributes == nil or next(attributes) == nil then + attributes = nil + end + + return { + url = matched.url or "", + title = matched.title or "", + attributes = attributes + } + end + +% \end{macrocode} +% \begin{markdown} +% +% Resolve an inline link [a](b "c") from the delimiters at `opening_index` and `closing_index` +% within a delimiter table `t`. Here, compared to other types of links, no reference definition is needed. +% +% \end{markdown} +% \begin{macrocode} + local function resolve_inline_link(t, opening_index, closing_index) + local inline_content = resolve_inline_following_content(t, closing_index, true, t.match_link_attributes) + render_link_or_image(t, opening_index, closing_index, closing_index, inline_content) + end + +% \end{macrocode} +% \begin{markdown} +% +% Resolve a shortcut link [a] from the delimiters at `opening_index` and `closing_index` within a delimiter table `t`. +% Continue if a tag `a` is not found in the references. +% +% \end{markdown} +% \begin{macrocode} + local function resolve_shortcut_link(t, opening_index, closing_index) + local content = collect_link_content(t, opening_index + 1, closing_index - 1) + local r = self.lookup_reference(content) + + if r then + local inline_content = resolve_inline_following_content(t, closing_index, false, t.match_link_attributes) + r.attributes = join_attributes(r.attributes, inline_content.attributes) + render_link_or_image(t, opening_index, closing_index, closing_index, r) + end + end + +% \end{macrocode} +% \begin{markdown} +% +% Resolve a full link [a][b] from the delimiters at `opening_index` and `closing_index` within a delimiter table `t`. +% Continue if a tag `b` is not found in the references. +% +% \end{markdown} +% \begin{macrocode} + local function resolve_full_link(t, opening_index, closing_index) + local next_link_closing_index = find_next_link_closing_index(t, closing_index + 4) + local next_link_content = collect_link_content(t, closing_index + 3, next_link_closing_index - 1) + local r = self.lookup_reference(next_link_content) + + if r then + local inline_content = resolve_inline_following_content(t, next_link_closing_index, false, + t.match_link_attributes) + r.attributes = join_attributes(r.attributes, inline_content.attributes) + render_link_or_image(t, opening_index, next_link_closing_index, closing_index, r) + end + end + +% \end{macrocode} +% \begin{markdown} +% +% Resolve a collapsed link [a][] from the delimiters at `opening_index` and `closing_index` +% within a delimiter table `t`. +% Continue if a tag `a` is not found in the references. +% +% \end{markdown} +% \begin{macrocode} + local function resolve_collapsed_link(t, opening_index, closing_index) + local next_link_closing_index = find_next_link_closing_index(t, closing_index + 4) + local content = collect_link_content(t, opening_index + 1, closing_index - 1) + local r = self.lookup_reference(content) + + if r then + local inline_content = resolve_inline_following_content(t, closing_index, false, t.match_link_attributes) + r.attributes = join_attributes(r.attributes, inline_content.attributes) + render_link_or_image(t, opening_index, next_link_closing_index, closing_index, r) + end end - parsers.direct_link_tail = parsers.spnl - * parsers.lparent - * (parsers.url + Cc("")) -- link can be empty [foo]() - * parsers.optionaltitle - * parsers.rparent +% \end{macrocode} +% \begin{markdown} +% +% Parse a table of link and emphasis delimiters `t`. +% First, iterate over the link delimiters and produce either link or image macros. +% Then run `process_emphasis` over the entire delimiter table, resolving emphasis and strong +% emphasis and parsing any content outside of closed delimiters. +% +% \end{markdown} +% \begin{macrocode} + local function process_links_and_emphasis(t) + for _,value in ipairs(t) do + value.is_active = true + end + + for i,value in ipairs(t) do + if not value.is_closing or + value.type ~= "delimiter" or + not (value.element == "link" or value.element == "image") then + goto continue + end + + local opener_position = find_link_opener(t, 1, i - 1) + if (opener_position == nil) then + goto continue + end + + local opening_delimiter = t[opener_position] + opening_delimiter.removed = true + + local link_type = opening_delimiter.link_type + + if (link_type == "inline") then + resolve_inline_link(t, opener_position, i) + end + if (link_type == "shortcut") then + resolve_shortcut_link(t, opener_position, i) + end + if (link_type == "full") then + resolve_full_link(t, opener_position, i) + end + if (link_type == "collapsed") then + resolve_collapsed_link(t, opener_position, i) + end + + ::continue:: + end - parsers.direct_link = (parsers.tag / self.parser_functions.parse_inlines_no_link) - * parsers.direct_link_tail + t[#t].content = t[#t].content:gsub("%s*$","") + + process_emphasis(t, 1, #t) + local final_result = collect_emphasis_content(t, 1, #t) + return final_result + end + + function self.defer_link_and_emphasis_processing(delimiter_table) + return writer.defer_call(function() + return process_links_and_emphasis(delimiter_table) + end) + end - parsers.direct_image = parsers.exclamation - * (parsers.tag / self.parser_functions.parse_inlines) - * parsers.direct_link_tail % \end{macrocode} % \par % \begin{markdown} @@ -24942,7 +28681,7 @@ function M.reader.new(writer, options) parsers.Str = (parsers.normalchar * (parsers.normalchar + parsers.at)^0) / writer.string - parsers.Symbol = (V("SpecialChar") - parsers.tightblocksep) + parsers.Symbol = (parsers.backtick^1 + V("SpecialChar")) / writer.string parsers.Ellipsis = P("...") / writer.ellipsis @@ -24954,83 +28693,112 @@ function M.reader.new(writer, options) if options.blankBeforeBlockquote then parsers.bqstart = parsers.fail else - parsers.bqstart = parsers.more + parsers.bqstart = parsers.blockquote_start end if options.blankBeforeHeading then parsers.headerstart = parsers.fail else - parsers.headerstart = parsers.hash - + (parsers.line * (parsers.equal^1 + parsers.dash^1) - * parsers.optionalspace * parsers.newline) + parsers.headerstart = parsers.atx_heading + end + + if options.blankBeforeList then + parsers.interrupting_bullets = parsers.fail + parsers.interrupting_enumerators = parsers.fail + else + parsers.interrupting_bullets = parsers.bullet(parsers.dash, true) + + parsers.bullet(parsers.asterisk, true) + + parsers.bullet(parsers.plus, true) + + parsers.interrupting_enumerators = parsers.enumerator(parsers.period, true) + + parsers.enumerator(parsers.rparent, true) + end + + if options.html then + parsers.html_interrupting = parsers.check_trail + * ( parsers.html_incomplete_open_tag + + parsers.html_incomplete_close_tag + + parsers.html_incomplete_open_special_tag + + parsers.html_comment_start + + parsers.html_cdatasection_start + + parsers.html_declaration_start + + parsers.html_instruction_start + - parsers.html_close_special_tag + - parsers.html_empty_special_tag) + else + parsers.html_interrupting = parsers.fail end parsers.EndlineExceptions = parsers.blankline -- paragraph break - + parsers.tightblocksep -- nested list + parsers.eof -- end of document + parsers.bqstart + + parsers.thematic_break_lines + + parsers.interrupting_bullets + + parsers.interrupting_enumerators + parsers.headerstart + + parsers.html_interrupting - parsers.Endline = parsers.newline - * -V("EndlineExceptions") - * parsers.spacechar^0 - / (options.hardLineBreaks and writer.hard_line_break - or writer.space) + parsers.NoSoftLineBreakEndlineExceptions = parsers.EndlineExceptions + parsers.endline = parsers.newline + * (parsers.check_minimal_indent + * -V("EndlineExceptions") + + parsers.check_optional_indent + * -V("EndlineExceptions") + * -parsers.starter) + * parsers.spacechar^0 + + parsers.Endline = parsers.endline + / writer.soft_line_break + + parsers.EndlineNoSub = parsers.endline + + parsers.NoSoftLineBreakEndline + = parsers.newline + * (parsers.check_minimal_indent + * -V("NoSoftLineBreakEndlineExceptions") + + parsers.check_optional_indent + * -V("NoSoftLineBreakEndlineExceptions") + * -parsers.starter) + * parsers.spacechar^0 + / writer.space + + parsers.EndlineBreak = parsers.backslash * parsers.Endline + / writer.hard_line_break + parsers.OptionalIndent = parsers.spacechar^1 / writer.space - parsers.Space = parsers.spacechar^2 * parsers.Endline / writer.hard_line_break - + parsers.spacechar^1 * parsers.Endline^-1 * parsers.eof / "" + parsers.Space = parsers.spacechar^2 * parsers.Endline + / writer.hard_line_break + + parsers.spacechar^1 * parsers.Endline^-1 * parsers.eof / self.expandtabs + + parsers.spacechar^1 * parsers.Endline + / writer.soft_line_break + + parsers.spacechar^1 * -parsers.newline / self.expandtabs + + parsers.NoSoftLineBreakSpace + = parsers.spacechar^2 * parsers.Endline + / writer.hard_line_break + + parsers.spacechar^1 * parsers.Endline^-1 * parsers.eof / self.expandtabs + parsers.spacechar^1 * parsers.Endline - * parsers.optionalspace - / (options.hardLineBreaks - and writer.hard_line_break - or writer.space) - + parsers.spacechar^1 * parsers.optionalspace - / writer.space + / writer.soft_line_break + + parsers.spacechar^1 * -parsers.newline / self.expandtabs parsers.NonbreakingEndline - = parsers.newline - * -V("EndlineExceptions") - * parsers.spacechar^0 - / (options.hardLineBreaks and writer.hard_line_break - or writer.nbsp) + = parsers.endline + / writer.soft_line_break parsers.NonbreakingSpace - = parsers.spacechar^2 * parsers.Endline / writer.hard_line_break + = parsers.spacechar^2 * parsers.Endline + / writer.hard_line_break + parsers.spacechar^1 * parsers.Endline^-1 * parsers.eof / "" + parsers.spacechar^1 * parsers.Endline * parsers.optionalspace - / (options.hardLineBreaks - and writer.hard_line_break - or writer.nbsp) + / writer.soft_line_break + parsers.spacechar^1 * parsers.optionalspace / writer.nbsp - if options.underscores then - parsers.Strong = ( parsers.between(parsers.Inline, parsers.doubleasterisks, - parsers.doubleasterisks) - + parsers.between(parsers.Inline, parsers.doubleunderscores, - parsers.doubleunderscores) - ) / writer.strong - - parsers.Emph = ( parsers.between(parsers.Inline, parsers.asterisk, - parsers.asterisk) - + parsers.between(parsers.Inline, parsers.underscore, - parsers.underscore) - ) / writer.emphasis - else - parsers.Strong = ( parsers.between(parsers.Inline, parsers.doubleasterisks, - parsers.doubleasterisks) - ) / writer.strong - - parsers.Emph = ( parsers.between(parsers.Inline, parsers.asterisk, - parsers.asterisk) - ) / writer.emphasis - end - % \end{macrocode} % \par % \begin{markdown} @@ -25046,7 +28814,6 @@ function self.auto_link_url(url, attributes) return writer.link(writer.escape(url), url, nil, attributes) end - % \end{macrocode} % \par % \begin{markdown} @@ -25074,39 +28841,21 @@ end = parsers.auto_link_relative_reference / self.auto_link_url - parsers.DirectLink = parsers.direct_link - / writer.link - - parsers.IndirectLink = parsers.indirect_link - / indirect_link - - -- parse a link or image (direct or indirect) - parsers.Link = parsers.DirectLink + parsers.IndirectLink - - parsers.DirectImage = parsers.direct_image - / writer.image - - parsers.IndirectImage = parsers.indirect_image - / indirect_image - - parsers.Image = parsers.DirectImage + parsers.IndirectImage - - -- avoid parsing long strings of * or _ as emph/strong - parsers.UlOrStarLine = parsers.asterisk^4 + parsers.underscore^4 - / writer.string + parsers.LinkAndEmph = Ct(parsers.link_and_emph_table) + / self.defer_link_and_emphasis_processing parsers.EscapedChar = parsers.backslash * C(parsers.escapable) / writer.string - parsers.InlineHtml = parsers.emptyelt_any / writer.inline_html_tag - + (parsers.htmlcomment / self.parser_functions.parse_inlines_no_html) - / writer.inline_html_comment - + parsers.htmlinstruction - + parsers.openelt_any / writer.inline_html_tag - + parsers.closeelt_any / writer.inline_html_tag + parsers.InlineHtml = Cs(parsers.html_inline_comment) / writer.inline_html_comment + + Cs(parsers.html_any_empty_inline_tag + + parsers.html_inline_instruction + + parsers.html_inline_cdatasection + + parsers.html_inline_declaration + + parsers.html_any_open_inline_tag + + parsers.html_any_close_tag) + / writer.inline_html_tag - parsers.HtmlEntity = parsers.hexentity / entities.hex_entity / writer.string - + parsers.decentity / entities.dec_entity / writer.string - + parsers.tagentity / entities.char_entity / writer.string + parsers.HtmlEntity = parsers.html_entities / writer.string % \end{macrocode} % \par % \begin{markdown} @@ -25115,40 +28864,40 @@ end % % \end{markdown} % \begin{macrocode} - parsers.DisplayHtml = (parsers.htmlcomment / self.parser_functions.parse_blocks_nested) - / writer.block_html_comment - + parsers.emptyelt_block / writer.block_html_element - + parsers.openelt_exact("hr") / writer.block_html_element - + parsers.in_matched_block_tags / writer.block_html_element - + parsers.htmlinstruction + parsers.DisplayHtml = Cs(parsers.check_trail + * ( parsers.html_comment + + parsers.html_special_block + + parsers.html_block + + parsers.html_any_block + + parsers.html_instruction + + parsers.html_cdatasection + + parsers.html_declaration)) + / writer.block_html_element - parsers.Verbatim = Cs( (parsers.blanklines - * ((parsers.indentedline - parsers.blankline))^1)^1 - ) / self.expandtabs / writer.verbatim + parsers.indented_non_blank_line = parsers.indentedline - parsers.blankline - parsers.BlockquoteExceptions = parsers.leader * parsers.more - + parsers.blankline + parsers.Verbatim = Cs( + parsers.check_code_trail + * (parsers.line - parsers.blankline) + * ((parsers.check_minimal_blank_indent_and_full_code_trail * parsers.blankline)^0 + * ((parsers.check_minimal_indent / "") * parsers.check_code_trail + * (parsers.line - parsers.blankline))^1)^0 + ) / self.expandtabs / writer.verbatim - parsers.Blockquote = Cs(parsers.blockquote_body^1) - / self.parser_functions.parse_blocks_nested + parsers.Blockquote = parsers.blockquote_body / writer.blockquote - parsers.ThematicBreak = ( parsers.lineof(parsers.asterisk) - + parsers.lineof(parsers.dash) - + parsers.lineof(parsers.underscore) - ) / writer.thematic_break + parsers.ThematicBreak = parsers.thematic_break_lines + / writer.thematic_break parsers.Reference = parsers.define_reference_parser - * parsers.blankline^1 / self.register_link - parsers.Paragraph = parsers.nonindentspace * Ct(parsers.Inline^1) - * ( parsers.newline - * ( parsers.blankline^1 - + #V("EndlineExceptions") - ) - + parsers.eof) - / writer.paragraph + parsers.Paragraph = parsers.freeze_trail + * (Ct((parsers.Inline)^1) + * (parsers.newline + parsers.eof) + * parsers.unfreeze_trail + / writer.paragraph) parsers.Plain = parsers.nonindentspace * Ct(parsers.Inline^1) / writer.plain @@ -25160,7 +28909,6 @@ end % % \end{markdown} % \begin{macrocode} - parsers.starter = parsers.bullet + parsers.enumerator if options.taskLists then parsers.tickbox = ( parsers.ticked_box @@ -25171,43 +28919,117 @@ end parsers.tickbox = parsers.fail end - -- we use \001 as a separator between a tight list item and a - -- nested list under it. - parsers.NestedList = Cs((parsers.optionallyindentedline - - parsers.starter)^1) - / function(a) return "\001"..a end - - parsers.ListBlockLine = parsers.optionallyindentedline - - parsers.blankline - (parsers.indent^-1 - * parsers.starter) - - parsers.ListBlock = parsers.line * parsers.ListBlockLine^0 - - parsers.ListContinuationBlock = parsers.blanklines * (parsers.indent / "") - * parsers.ListBlock + parsers.list_blank = parsers.conditionally_indented_blankline + + parsers.ref_or_block_list_separated = parsers.sep_group_no_output(parsers.list_blank) + * parsers.minimally_indented_ref + + parsers.block_sep_group(parsers.list_blank) + * parsers.minimally_indented_block + + parsers.ref_or_block_non_separated = parsers.minimally_indented_ref + + (parsers.succeed / writer.interblocksep) + * parsers.minimally_indented_block + - parsers.minimally_indented_blankline + + parsers.tight_list_loop_body_pair = + parsers.create_loop_body_pair(parsers.ref_or_block_non_separated, + parsers.minimally_indented_par_or_plain_no_blank, + (parsers.succeed / writer.interblocksep), + (parsers.succeed / writer.paragraphsep)) + + parsers.loose_list_loop_body_pair = + parsers.create_loop_body_pair(parsers.ref_or_block_list_separated, + parsers.minimally_indented_par_or_plain, + parsers.block_sep_group(parsers.list_blank), + parsers.par_sep_group(parsers.list_blank)) + + parsers.tight_list_content_loop = V("Block") + * parsers.tight_list_loop_body_pair.block^0 + + (V("Paragraph") + V("Plain")) + * parsers.ref_or_block_non_separated + * parsers.tight_list_loop_body_pair.block^0 + + (V("Paragraph") + V("Plain")) + * parsers.tight_list_loop_body_pair.par^0 + + parsers.loose_list_content_loop = V("Block") + * parsers.loose_list_loop_body_pair.block^0 + + (V("Paragraph") + V("Plain")) + * parsers.ref_or_block_list_separated + * parsers.loose_list_loop_body_pair.block^0 + + (V("Paragraph") + V("Plain")) + * parsers.loose_list_loop_body_pair.par^0 + + parsers.list_item_tightness_condition = -#( parsers.list_blank^0 + * parsers.minimally_indented_ref_or_block_or_par) + * remove_indent("li") + + remove_indent("li") + * parsers.fail + + parsers.indented_content_tight = Ct( (parsers.blankline / "") + * #parsers.list_blank + * remove_indent("li") + + ( (V("Reference") + (parsers.blankline / "")) + * parsers.check_minimal_indent + * parsers.tight_list_content_loop + + (V("Reference") + (parsers.blankline / "")) + + (parsers.tickbox^-1 / writer.escape) + * parsers.tight_list_content_loop + ) + * parsers.list_item_tightness_condition + ) + + parsers.indented_content_loose = Ct( (parsers.blankline / "") + * #parsers.list_blank + + ( (V("Reference") + (parsers.blankline / "")) + * parsers.check_minimal_indent + * parsers.loose_list_content_loop + + (V("Reference") + (parsers.blankline / "")) + + (parsers.tickbox^-1 / writer.escape) + * parsers.loose_list_content_loop + ) + ) parsers.TightListItem = function(starter) - return -parsers.ThematicBreak - * (Cs(starter / "" * parsers.tickbox^-1 * parsers.ListBlock * parsers.NestedList^-1) - / self.parser_functions.parse_blocks_nested) - * -(parsers.blanklines * parsers.indent) + return -parsers.ThematicBreak + * parsers.add_indent(starter, "li") + * parsers.indented_content_tight end parsers.LooseListItem = function(starter) - return -parsers.ThematicBreak - * Cs( starter / "" * parsers.tickbox^-1 * parsers.ListBlock * Cc("\n") - * (parsers.NestedList + parsers.ListContinuationBlock^0) - * (parsers.blanklines / "\n\n") - ) / self.parser_functions.parse_blocks_nested + return -parsers.ThematicBreak + * parsers.add_indent(starter, "li") + * parsers.indented_content_loose + * remove_indent("li") end - parsers.BulletList = ( Ct(parsers.TightListItem(parsers.bullet)^1) * Cc(true) - * parsers.skipblanklines * -parsers.bullet - + Ct(parsers.LooseListItem(parsers.bullet)^1) * Cc(false) - * parsers.skipblanklines ) - / writer.bulletlist + parsers.BulletListOfType = function(bullet_type) + local bullet = parsers.bullet(bullet_type) + return ( Ct( parsers.TightListItem(bullet) + * ( (parsers.check_minimal_indent / "") + * parsers.TightListItem(bullet) + )^0 + ) + * Cc(true) + * -#( (parsers.list_blank^0 / "") + * parsers.check_minimal_indent + * (bullet - parsers.ThematicBreak) + ) + + Ct( parsers.LooseListItem(bullet) + * ( (parsers.list_blank^0 / "") + * (parsers.check_minimal_indent / "") + * parsers.LooseListItem(bullet) + )^0 + ) + * Cc(false) + ) / writer.bulletlist + end + + parsers.BulletList = parsers.BulletListOfType(parsers.dash) + + parsers.BulletListOfType(parsers.asterisk) + + parsers.BulletListOfType(parsers.plus) - local function ordered_list(items,tight,startnum) + local function ordered_list(items,tight,starter) + local startnum = starter[2][1] if options.startNumber then startnum = tonumber(startnum) or 1 -- fallback for '#' if startnum ~= nil then @@ -25219,14 +29041,23 @@ end return writer.orderedlist(items,tight,startnum) end - parsers.OrderedList = Cg(parsers.enumerator, "listtype") * - ( Ct(parsers.TightListItem(Cb("listtype")) - * parsers.TightListItem(parsers.enumerator)^0) - * Cc(true) * parsers.skipblanklines * -parsers.enumerator - + Ct(parsers.LooseListItem(Cb("listtype")) - * parsers.LooseListItem(parsers.enumerator)^0) - * Cc(false) * parsers.skipblanklines - ) * Cb("listtype") / ordered_list + parsers.OrderedListOfType = function(delimiter_type) + local enumerator = parsers.enumerator(delimiter_type) + return Cg(enumerator, "listtype") + * (Ct( parsers.TightListItem(Cb("listtype")) + * ((parsers.check_minimal_indent / "") * parsers.TightListItem(enumerator))^0) + * Cc(true) + * -#((parsers.list_blank^0 / "") + * parsers.check_minimal_indent * enumerator) + + Ct( parsers.LooseListItem(Cb("listtype")) + * ((parsers.list_blank^0 / "") + * (parsers.check_minimal_indent / "") * parsers.LooseListItem(enumerator))^0) + * Cc(false) + ) * Ct(Cb("listtype")) / ordered_list + end + + parsers.OrderedList = parsers.OrderedListOfType(parsers.period) + + parsers.OrderedListOfType(parsers.rparent) % \end{macrocode} % \par % \begin{markdown} @@ -25237,7 +29068,6 @@ end % \begin{macrocode} parsers.Blank = parsers.blankline / "" + V("Reference") - + (parsers.tightblocksep / "\n") % \end{macrocode} % \par % \begin{markdown} @@ -25246,22 +29076,45 @@ end % % \end{markdown} % \begin{macrocode} + function parsers.parse_heading_text(s) + local inlines = self.parser_functions.parse_inlines(s) + local flatten_inlines = self.writer.flatten_inlines + self.writer.flatten_inlines = true + local flat_text = self.parser_functions.parse_inlines(s) + flat_text = util.rope_to_string(flat_text) + self.writer.flatten_inlines = flatten_inlines + return {flat_text, inlines} + end + -- parse atx header - parsers.AtxHeading = Cg(parsers.heading_start, "level") - * parsers.optionalspace - * (C(parsers.line) + parsers.AtxHeading = parsers.check_trail_no_rem + * Cg(parsers.heading_start, "level") + * ((C( parsers.optionalspace + * parsers.hash^0 + * parsers.optionalspace + * parsers.newline) + + parsers.spacechar^1 + * C(parsers.line)) / strip_atx_end - / self.parser_functions.parse_inlines) + / parsers.parse_heading_text) * Cb("level") / writer.heading - parsers.SetextHeading = #(parsers.line * S("=-")) - * Ct(parsers.linechar^1 - / self.parser_functions.parse_inlines) - * parsers.newline - * parsers.heading_level - * parsers.optionalspace + parsers.heading_line = parsers.linechar^1 + - parsers.thematic_break_lines + + parsers.heading_text = parsers.heading_line + * ((V("Endline") / "\n") * (parsers.heading_line - parsers.heading_level))^0 + * parsers.newline^-1 + + parsers.SetextHeading = parsers.freeze_trail * parsers.check_trail_no_rem + * #(parsers.heading_text + * parsers.check_minimal_indent * parsers.check_trail * parsers.heading_level) + * Cs(parsers.heading_text) + / parsers.parse_heading_text + * parsers.check_minimal_indent_and_trail * parsers.heading_level * parsers.newline + * parsers.unfreeze_trail / writer.heading parsers.Heading = parsers.AtxHeading + parsers.SetextHeading @@ -25364,12 +29217,42 @@ end Blocks = V("InitializeState") * ( V("ExpectedJekyllData") - * (V("Blank")^0 / writer.interblocksep))^-1 + * (V("Blank")^0 / writer.interblocksep) + )^-1 * V("Blank")^0 - * V("Block")^-1 - * ( V("Blank")^0 / writer.interblocksep - * V("Block"))^0 - * V("Blank")^0 * parsers.eof, +% \end{macrocode} +% \par +% \begin{markdown} +% +% Only create interblock separators between pairs of blocks that are not +% both paragraphs. Between a pair of paragraphs, any number of blank +% lines will always produce a paragraph separator. +% +% \end{markdown} +% \begin{macrocode} + * ( V("Block") + * ( V("Blank")^0 * parsers.eof + + ( V("Blank")^2 / writer.paragraphsep + + V("Blank")^0 / writer.interblocksep + ) + ) + + ( V("Paragraph") + V("Plain") ) + * ( V("Blank")^0 * parsers.eof + + ( V("Blank")^2 / writer.paragraphsep + + V("Blank")^0 / writer.interblocksep + ) + ) + * V("Block") + * ( V("Blank")^0 * parsers.eof + + ( V("Blank")^2 / writer.paragraphsep + + V("Blank")^0 / writer.interblocksep + ) + ) + + ( V("Paragraph") + V("Plain") ) + * ( V("Blank")^0 * parsers.eof + + V("Blank")^0 / writer.paragraphsep + ) + )^0, ExpectedJekyllData = parsers.fail, @@ -25381,23 +29264,25 @@ end ThematicBreak = parsers.ThematicBreak, BulletList = parsers.BulletList, OrderedList = parsers.OrderedList, - Heading = parsers.Heading, DisplayHtml = parsers.DisplayHtml, + Heading = parsers.Heading, Paragraph = parsers.Paragraph, Plain = parsers.Plain, EndlineExceptions = parsers.EndlineExceptions, - BlockquoteExceptions = parsers.BlockquoteExceptions, + NoSoftLineBreakEndlineExceptions + = parsers.NoSoftLineBreakEndlineExceptions, Str = parsers.Str, Space = parsers.Space, + NoSoftLineBreakSpace = parsers.NoSoftLineBreakSpace, OptionalIndent = parsers.OptionalIndent, Endline = parsers.Endline, - UlOrStarLine = parsers.UlOrStarLine, - Strong = parsers.Strong, - Emph = parsers.Emph, - Link = parsers.Link, - Image = parsers.Image, + EndlineNoSub = parsers.EndlineNoSub, + NoSoftLineBreakEndline + = parsers.NoSoftLineBreakEndline, + EndlineBreak = parsers.EndlineBreak, + LinkAndEmph = parsers.LinkAndEmph, Code = parsers.Code, AutoLinkUrl = parsers.AutoLinkUrl, AutoLinkEmail = parsers.AutoLinkEmail, @@ -25500,13 +29385,26 @@ end % \end{markdown} % \begin{macrocode} self.initialize_named_group = function(name, value) + local pattern = Ct("") + if value ~= nil then + pattern = pattern / value + end syntax.InitializeState = syntax.InitializeState - * Cg(Ct("") / value, name) + * Cg(pattern, name) end % \end{macrocode} % \par % \begin{markdown} % +% Add a named group for indentation. +% +% \end{markdown} +% \begin{macrocode} + self.initialize_named_group("indent_info") +% \end{macrocode} +% \par +% \begin{markdown} +% % Apply syntax extensions. % % \end{markdown} @@ -25578,20 +29476,6 @@ end % \par % \begin{markdown} % -% Duplicate the `Inline` rule as `IndentedInline` with the right-hand-side -% terminal symbol `Space` replaced with `OptionalIndent`. -% -% \end{markdown} -% \begin{macrocode} - walkable_syntax["IndentedInline"] = util.table_copy( - walkable_syntax["Inline"]) - self.insert_pattern( - "IndentedInline instead of Space", - "OptionalIndent") -% \end{macrocode} -% \par -% \begin{markdown} -% % Materialize \luamref{walkable_syntax} and merge it into \luamref{syntax} to % produce the complete \acro{peg} grammar of markdown. Whenever a rule exists % in both \luamref{walkable_syntax} and \luamref{syntax}, the rule from @@ -25607,7 +29491,7 @@ end % \begin{markdown} % % Although the interface of the \luamref{reader->insert_pattern} method does -% document this (see Section <#sec:lua-user-extensions>), we allow the +% not document this (see Section <#sec:lua-user-extensions>), we allow the % \luamref{reader->insert_pattern} and \luamref{reader->update_rule} % methods to insert not just \acro{peg} patterns, but also rule names that % reference the \acro{peg} grammar of Markdown. @@ -25667,6 +29551,15 @@ end syntax.AutoLinkRelativeReference = parsers.fail end + if options.contentLevel == "inline" then + syntax[1] = "Inlines" + syntax.Inlines = V("InitializeState") + * parsers.Inline^0 + * ( parsers.spacing^0 + * parsers.eof / "") + syntax.Space = parsers.Space + parsers.blankline / writer.space + end + local blocks_nested_t = util.table_copy(syntax) blocks_nested_t.ExpectedJekyllData = parsers.fail parsers.blocks_nested = Ct(blocks_nested_t) @@ -25681,10 +29574,6 @@ end * parsers.eof / "") parsers.inlines = Ct(inlines_t) - local inlines_no_link_t = util.table_copy(inlines_t) - inlines_no_link_t.Link = parsers.fail - parsers.inlines_no_link = Ct(inlines_no_link_t) - local inlines_no_inline_note_t = util.table_copy(inlines_t) inlines_no_inline_note_t.InlineNote = parsers.fail parsers.inlines_no_inline_note = Ct(inlines_no_inline_note_t) @@ -25699,6 +29588,11 @@ end inlines_nbsp_t.Endline = parsers.NonbreakingEndline inlines_nbsp_t.Space = parsers.NonbreakingSpace parsers.inlines_nbsp = Ct(inlines_nbsp_t) + + local inlines_no_link_or_emphasis_t = util.table_copy(inlines_t) + inlines_no_link_or_emphasis_t.LinkAndEmph = parsers.fail + inlines_no_link_or_emphasis_t.EndlineExceptions = parsers.EndlineExceptions - parsers.eof + parsers.inlines_no_link_or_emphasis = Ct(inlines_no_link_or_emphasis_t) % \end{macrocode} % \par % \begin{markdown} @@ -25831,6 +29725,7 @@ M.extensions.bracketed_spans = function() % \end{markdown} % \begin{macrocode} function self.span(s, attr) + if self.flatten_inlines then return s end return {"\\markdownRendererBracketedSpanAttributeContextBegin", self.attributes(attr), s, @@ -25840,13 +29735,25 @@ M.extensions.bracketed_spans = function() local parsers = self.parsers local writer = self.writer - local Span = parsers.between(parsers.Inline, - parsers.lbracket, - parsers.rbracket) + local span_label = parsers.lbracket + * (Cs((parsers.alphanumeric^1 + + parsers.inticks + + parsers.autolink + + V("InlineHtml") + + ( parsers.backslash * parsers.backslash) + + ( parsers.backslash * (parsers.lbracket + parsers.rbracket) + + V("Space") + V("Endline") + + (parsers.any + - (parsers.newline + parsers.lbracket + parsers.rbracket + + parsers.blankline^2))))^1) + / self.parser_functions.parse_inlines) + * parsers.rbracket + + local Span = span_label * Ct(parsers.attributes) / writer.span - self.insert_pattern("Inline after Emph", + self.insert_pattern("Inline before LinkAndEmph", Span, "Span") end } @@ -25888,11 +29795,24 @@ M.extensions.citations = function(citation_nbsps) % \end{markdown} % \begin{macrocode} function self.citations(text_cites, cites) - local buffer = {"\\markdownRenderer", text_cites and "TextCite" or "Cite", - "{", #cites, "}"} - for _,cite in ipairs(cites) do - buffer[#buffer+1] = {cite.suppress_author and "-" or "+", "{", - cite.prenote or "", "}{", cite.postnote or "", "}{", cite.name, "}"} + local buffer = {} + if self.flatten_inlines then + for _,cite in ipairs(cites) do + if cite.prenote then + table.insert(buffer, {cite.prenote, " "}) + end + table.insert(buffer, cite.name) + if cite.postnote then + table.insert(buffer, {" ", cite.postnote}) + end + end + else + table.insert(buffer, {"\\markdownRenderer", text_cites and "TextCite" or "Cite", + "{", #cites, "}"}) + for _,cite in ipairs(cites) do + table.insert(buffer, {cite.suppress_author and "-" or "+", "{", + cite.prenote or "", "}{", cite.postnote or "", "}{", cite.name, "}"}) + end end return buffer end @@ -25919,42 +29839,51 @@ M.extensions.citations = function(citation_nbsps) = Cs((parsers.alphanumeric^1 + parsers.bracketed + parsers.inticks + + parsers.autolink + + V("InlineHtml") + + V("Space") + V("Endline") + (parsers.anyescaped - - (parsers.rbracket + parsers.blankline^2)) + - (parsers.newline + parsers.rbracket + parsers.blankline^2)) - (parsers.spnl * parsers.dash^-1 * parsers.at))^0) local citation_body_postnote = Cs((parsers.alphanumeric^1 + parsers.bracketed + parsers.inticks + + parsers.autolink + + V("InlineHtml") + + V("Space") + V("Endline") + (parsers.anyescaped - - (parsers.rbracket + parsers.semicolon + - (parsers.newline + parsers.rbracket + parsers.semicolon + parsers.blankline^2)) - (parsers.spnl * parsers.rbracket))^0) local citation_body_chunk = citation_body_prenote - * parsers.spnl * citation_name + * parsers.spnlc * citation_name * (parsers.internal_punctuation - parsers.semicolon)^-1 - * parsers.spnl * citation_body_postnote + * parsers.spnlc * citation_body_postnote local citation_body = citation_body_chunk - * (parsers.semicolon * parsers.spnl + * (parsers.semicolon * parsers.spnlc * citation_body_chunk)^0 local citation_headless_body_postnote = Cs((parsers.alphanumeric^1 + parsers.bracketed + parsers.inticks + + parsers.autolink + + V("InlineHtml") + + V("Space") + V("Endline") + (parsers.anyescaped - - (parsers.rbracket + parsers.at + - (parsers.newline + parsers.rbracket + parsers.at + parsers.semicolon + parsers.blankline^2)) - (parsers.spnl * parsers.rbracket))^0) local citation_headless_body = citation_headless_body_postnote - * (parsers.sp * parsers.semicolon * parsers.spnl + * (parsers.sp * parsers.semicolon * parsers.spnlc * citation_body_chunk)^0 local citations @@ -25983,10 +29912,10 @@ M.extensions.citations = function(citation_nbsps) end local TextCitations - = Ct((parsers.spnl + = Ct((parsers.spnlc * Cc("") * citation_name - * ((parsers.spnl + * ((parsers.spnlc * parsers.lbracket * citation_headless_body * parsers.rbracket) + Cc("")))^1) @@ -25995,7 +29924,7 @@ M.extensions.citations = function(citation_nbsps) end local ParenthesizedCitations - = Ct((parsers.spnl + = Ct((parsers.spnlc * parsers.lbracket * citation_body * parsers.rbracket)^1) @@ -26005,7 +29934,7 @@ M.extensions.citations = function(citation_nbsps) local Citations = TextCitations + ParenthesizedCitations - self.insert_pattern("Inline after Emph", + self.insert_pattern("Inline before LinkAndEmph", Citations, "Citations") self.add_special_character("@") @@ -26018,7 +29947,7 @@ end % %#### Content Blocks % -% The \luamdef{extensions.content_blocks} function implements the iA\,Writer +% The \luamdef{extensions.content_blocks} function implements the iA\\,Writer % content blocks syntax extension. The `language_map` parameter specifies % the filename of the \acro{JSON} file that maps filename extensions to % programming language names. @@ -26068,7 +29997,7 @@ M.extensions.content_blocks = function(language_map) % \begin{markdown} % % Define \luamdef{writer->contentblock} as a function that will transform an -% input iA\,Writer content block to the output format, where `src` +% input iA\\,Writer content block to the output format, where `src` % corresponds to the \acro{uri} prefix, `suf` to the \acro{uri} extension, % `type` to the type of the content block (`localfile` or `onlineimage`), % and `tit` to the title of the content block. @@ -26135,6 +30064,7 @@ M.extensions.content_blocks = function(language_map) = (parsers.less * Cs((parsers.anyescaped - parsers.more + - parsers.spacing - #(parsers.period * onlineimagesuffix * parsers.more @@ -26167,7 +30097,7 @@ M.extensions.content_blocks = function(language_map) * Cc("localfile") local ContentBlock - = parsers.leader + = parsers.check_trail_no_rem * (localfilepath + onlineimageurl) * contentblock_tail / writer.contentblock @@ -26234,18 +30164,26 @@ M.extensions.definition_lists = function(tight_lists) local defstartchar = S("~:") - local defstart = ( defstartchar * #parsers.spacing + local defstart = parsers.check_trail_length(0) * defstartchar * #parsers.spacing * (parsers.tab + parsers.space^-3) - + parsers.space * defstartchar * #parsers.spacing + + parsers.check_trail_length(1) * defstartchar * #parsers.spacing * (parsers.tab + parsers.space^-2) - + parsers.space * parsers.space * defstartchar - * #parsers.spacing + + parsers.check_trail_length(2) * defstartchar * #parsers.spacing * (parsers.tab + parsers.space^-1) - + parsers.space * parsers.space * parsers.space - * defstartchar * #parsers.spacing - ) + + parsers.check_trail_length(3) * defstartchar * #parsers.spacing + + local indented_line = (parsers.check_minimal_indent / "") * parsers.check_code_trail * parsers.line - local dlchunk = Cs(parsers.line * (parsers.indentedline - parsers.blankline)^0) + local blank = parsers.check_minimal_blank_indent_and_any_trail * parsers.optionalspace * parsers.newline + + local dlchunk = Cs(parsers.line * (indented_line - blank)^0) + + local indented_blocks = function(bl) + return Cs( bl + * (blank^1 * (parsers.check_minimal_indent / "") + * parsers.check_code_trail * -parsers.blankline * bl)^0 + * (blank^1 + parsers.eof)) + end local function definition_list_item(term, defs, _) return { term = self.parser_functions.parse_inlines(term), @@ -26253,22 +30191,22 @@ M.extensions.definition_lists = function(tight_lists) end local DefinitionListItemLoose - = C(parsers.line) * parsers.skipblanklines - * Ct((defstart - * parsers.indented_blocks(dlchunk) - / self.parser_functions.parse_blocks_nested)^1) + = C(parsers.line) * blank^0 + * Ct((parsers.check_minimal_indent * (defstart + * indented_blocks(dlchunk) + / self.parser_functions.parse_blocks_nested))^1) * Cc(false) / definition_list_item local DefinitionListItemTight = C(parsers.line) - * Ct((defstart * dlchunk - / self.parser_functions.parse_blocks_nested)^1) + * Ct((parsers.check_minimal_indent * (defstart * dlchunk + / self.parser_functions.parse_blocks_nested))^1) * Cc(true) / definition_list_item local DefinitionList = ( Ct(DefinitionListItemLoose^1) * Cc(false) + Ct(DefinitionListItemTight^1) - * (parsers.skipblanklines + * (blank^0 * -DefinitionListItemLoose * Cc(true)) ) / writer.definitionlist @@ -26322,8 +30260,10 @@ M.extensions.fancy_lists = function() local buffer = {} local num = startnum for _,item in ipairs(items) do - buffer[#buffer + 1] = self.fancyitem(item,num) - if num ~= nil then + if item ~= "" then + buffer[#buffer + 1] = self.fancyitem(item,num) + end + if num ~= nil and item ~= "" then num = num + 1 end end @@ -26361,52 +30301,101 @@ M.extensions.fancy_lists = function() local options = self.options local writer = self.writer - local label = parsers.dig + parsers.letter - local numdelim = parsers.period + parsers.rparent - local enumerator = C(label^3 * numdelim) * #parsers.spacing - + C(label^2 * numdelim) * #parsers.spacing - * (parsers.tab + parsers.space^1) - + C(label * numdelim) * #parsers.spacing - * (parsers.tab + parsers.space^-2) - + parsers.space * C(label^2 * numdelim) - * #parsers.spacing - + parsers.space * C(label * numdelim) - * #parsers.spacing - * (parsers.tab + parsers.space^-1) - + parsers.space * parsers.space * C(label^1 - * numdelim) * #parsers.spacing - local starter = parsers.bullet + enumerator + local function combine_markers_and_delims(markers, delims) + local markers_table = {} + for _,marker in ipairs(markers) do + local start_marker + local continuation_marker + if type(marker) == "table" then + start_marker = marker[1] + continuation_marker = marker[2] + else + start_marker = marker + continuation_marker = marker + end + for _,delim in ipairs(delims) do + table.insert(markers_table, {start_marker, continuation_marker, delim}) + end + end + return markers_table + end + + local function join_table_with_func(func, markers_table) + local pattern = func(table.unpack(markers_table[1])) + for i = 2, #markers_table do + pattern = pattern + func(table.unpack(markers_table[i])) + end + return pattern + end - local NestedList = Cs((parsers.optionallyindentedline - - starter)^1) - / function(a) return "\001"..a end + local lowercase_letter_marker = R("az") + local uppercase_letter_marker = R("AZ") - local ListBlockLine = parsers.optionallyindentedline - - parsers.blankline - (parsers.indent^-1 - * starter) + local roman_marker = function(chars) + local m, d, c = P(chars[1]), P(chars[2]), P(chars[3]) + local l, x, v, i = P(chars[4]), P(chars[5]), P(chars[6]), P(chars[7]) + return m^-3 + * (c*m + c*d + d^-1 * c^-3) + * (x*c + x*l + l^-1 * x^-3) + * (i*x + i*v + v^-1 * i^-3) + end + + local lowercase_roman_marker = roman_marker({"m", "d", "c", "l", "x", "v", "i"}) + local uppercase_roman_marker = roman_marker({"M", "D", "C", "L", "X", "V", "I"}) + + local lowercase_opening_roman_marker = P("i") + local uppercase_opening_roman_marker = P("I") + + local digit_marker = parsers.dig * parsers.dig^-8 - local ListBlock = parsers.line * ListBlockLine^0 + local markers = { + {lowercase_opening_roman_marker, lowercase_roman_marker}, + {uppercase_opening_roman_marker, uppercase_roman_marker}, + lowercase_letter_marker, + uppercase_letter_marker, + lowercase_roman_marker, + uppercase_roman_marker, + digit_marker + } + + local delims = { + parsers.period, + parsers.rparent + } - local ListContinuationBlock = parsers.blanklines * (parsers.indent / "") - * ListBlock + local markers_table = combine_markers_and_delims(markers, delims) + + local function enumerator(start_marker, _, delimiter_type, interrupting) + local delimiter_range + local allowed_end + if interrupting then + delimiter_range = P("1") + allowed_end = C(parsers.spacechar^1) * #parsers.linechar + else + delimiter_range = start_marker + allowed_end = C(parsers.spacechar^1) + #(parsers.newline + parsers.eof) + end + + return parsers.check_trail + * Ct(C(delimiter_range) * C(delimiter_type)) + * allowed_end + end + + local starter = join_table_with_func(enumerator, markers_table) local TightListItem = function(starter) - return -parsers.ThematicBreak - * (Cs(starter / "" * parsers.tickbox^-1 * ListBlock * NestedList^-1) - / self.parser_functions.parse_blocks_nested) - * -(parsers.blanklines * parsers.indent) + return parsers.add_indent(starter, "li") + * parsers.indented_content_tight end local LooseListItem = function(starter) - return -parsers.ThematicBreak - * Cs( starter / "" * parsers.tickbox^-1 * ListBlock * Cc("\n") - * (NestedList + ListContinuationBlock^0) - * (parsers.blanklines / "\n\n") - ) / self.parser_functions.parse_blocks_nested + return parsers.add_indent(starter, "li") + * parsers.indented_content_loose + * remove_indent("li") end local function roman2number(roman) - local romans = { ["L"] = 50, ["X"] = 10, ["V"] = 5, ["I"] = 1 } + local romans = { ["M"] = 1000, ["D"] = 500, ["C"] = 100, ["L"] = 50, ["X"] = 10, ["V"] = 5, ["I"] = 1 } local numeral = 0 local i = 1 @@ -26425,8 +30414,7 @@ M.extensions.fancy_lists = function() return numeral end - local function sniffstyle(itemprefix) - local numstr, delimend = itemprefix:match("^([A-Za-z0-9]*)([.)]*)") + local function sniffstyle(numstr, delimend) local numdelim if delimend == ")" then numdelim = "OneParen" @@ -26435,46 +30423,72 @@ M.extensions.fancy_lists = function() else numdelim = "Default" end - numstr = numstr or itemprefix local num - num = numstr:match("^([IVXL]+)") + num = numstr:match("^([I])$") if num then return roman2number(num), "UpperRoman", numdelim end - num = numstr:match("^([ivxl]+)") + num = numstr:match("^([i])$") if num then return roman2number(string.upper(num)), "LowerRoman", numdelim end - num = numstr:match("^([A-Z])") + num = numstr:match("^([A-Z])$") if num then return string.byte(num) - string.byte("A") + 1, "UpperAlpha", numdelim end - num = numstr:match("^([a-z])") + num = numstr:match("^([a-z])$") if num then return string.byte(num) - string.byte("a") + 1, "LowerAlpha", numdelim end + num = numstr:match("^([IVXLCDM]+)") + if num then + return roman2number(num), "UpperRoman", numdelim + end + num = numstr:match("^([ivxlcdm]+)") + if num then + return roman2number(string.upper(num)), "LowerRoman", numdelim + end return math.floor(tonumber(numstr) or 1), "Decimal", numdelim end local function fancylist(items,tight,start) - local startnum, numstyle, numdelim = sniffstyle(start) + local startnum, numstyle, numdelim = sniffstyle(start[2][1], start[2][2]) return writer.fancylist(items,tight, - options.startNumber and startnum, + options.startNumber and startnum or 1, numstyle or "Decimal", numdelim or "Default") end - local FancyList = Cg(enumerator, "listtype") * - ( Ct(TightListItem(Cb("listtype")) - * TightListItem(enumerator)^0) - * Cc(true) * parsers.skipblanklines * -enumerator - + Ct(LooseListItem(Cb("listtype")) - * LooseListItem(enumerator)^0) - * Cc(false) * parsers.skipblanklines - ) * Cb("listtype") / fancylist + local FancyListOfType = function(start_marker, continuation_marker, delimiter_type) + local enumerator_start = enumerator(start_marker, continuation_marker, delimiter_type) + local enumerator_cont = enumerator(continuation_marker, continuation_marker, delimiter_type) + return Cg(enumerator_start, "listtype") + * (Ct( TightListItem(Cb("listtype")) + * ((parsers.check_minimal_indent / "") * TightListItem(enumerator_cont))^0) + * Cc(true) + * -#((parsers.conditionally_indented_blankline^0 / "") + * parsers.check_minimal_indent * enumerator_cont) + + Ct( LooseListItem(Cb("listtype")) + * ((parsers.conditionally_indented_blankline^0 / "") + * (parsers.check_minimal_indent / "") * LooseListItem(enumerator_cont))^0) + * Cc(false) + ) * Ct(Cb("listtype")) / fancylist + end + + local FancyList = join_table_with_func(FancyListOfType, markers_table) + + local Endline = parsers.newline + * (parsers.check_minimal_indent + * -parsers.EndlineExceptions + + parsers.check_optional_indent + * -parsers.EndlineExceptions + * -starter) + * parsers.spacechar^0 + / writer.soft_line_break self.update_rule("OrderedList", FancyList) + self.update_rule("Endline", Endline) end } end @@ -26523,7 +30537,7 @@ M.extensions.fenced_code = function(blank_before_code_fence, end local name = util.cache_verbatim(options.cacheDir, s) table.insert(buf, {"\\markdownRendererInputFencedCode{", - name,"}{",self.string(i),"}"}) + name,"}{",self.string(i),"}{",self.infostring(i),"}"}) if attr ~= nil then table.insert(buf, "\\markdownRendererFencedCodeAttributeContextEnd") end @@ -26556,18 +30570,52 @@ M.extensions.fenced_code = function(blank_before_code_fence, return #a >= #b and i end - local tilde_infostring - = C((parsers.linechar - - (parsers.spacechar^1 * parsers.newline))^0) + local function strip_enclosing_whitespaces(str) + return str:gsub("^%s*(.-)%s*$", "%1") + end + + local tilde_infostring = Cs(Cs((V("HtmlEntity") + + parsers.anyescaped + - parsers.newline)^0) + / strip_enclosing_whitespaces) - local backtick_infostring - = C((parsers.linechar - - (parsers.backtick - + parsers.spacechar^1 * parsers.newline))^0) + local backtick_infostring = Cs(Cs((V("HtmlEntity") + + (-#(parsers.backslash * parsers.backtick) * parsers.anyescaped) + - parsers.newline + - parsers.backtick)^0) + / strip_enclosing_whitespaces) local fenceindent + + local function has_trail(indent_table) + return indent_table ~= nil and + indent_table.trail ~= nil and + next(indent_table.trail) ~= nil + end + + local function has_indents(indent_table) + return indent_table ~= nil and + indent_table.indents ~= nil and + next(indent_table.indents) ~= nil + end + + local function get_last_indent_name(indent_table) + if has_indents(indent_table) then + return indent_table.indents[#indent_table.indents].name + end + end + + local function count_fenced_start_indent(_, _, indent_table, trail) + local last_indent_name = get_last_indent_name(indent_table) + fenceindent = 0 + if last_indent_name ~= "li" then + fenceindent = #trail + end + return true + end + local fencehead = function(char, infostring) - return C(parsers.nonindentspace) / function(s) fenceindent = #s end + return Cmt(Cb("indent_info") * parsers.check_trail, count_fenced_start_indent) * Cg(char^3, "fencelength") * parsers.optionalspace * infostring @@ -26575,52 +30623,69 @@ M.extensions.fenced_code = function(blank_before_code_fence, end local fencetail = function(char) - return parsers.nonindentspace + return parsers.check_trail_no_rem * Cmt(C(char^3) * Cb("fencelength"), captures_geq_length) * parsers.optionalspace * (parsers.newline + parsers.eof) + parsers.eof end - local fencedline = function(char) - return C(parsers.line - fencetail(char)) - / function(s) - local i = 1 - local remaining = fenceindent - while true do - local c = s:sub(i, i) - if c == " " and remaining > 0 then - remaining = remaining - 1 - i = i + 1 - elseif c == "\t" and remaining > 3 then - remaining = remaining - 4 - i = i + 1 - else - break - end - end - return s:sub(i) - end + local function process_fenced_line(s, i, indent_table, line_content, is_blank) -- luacheck: ignore s i + local remainder = "" + if has_trail(indent_table) then + remainder = indent_table.trail.internal_remainder + end + + if is_blank and get_last_indent_name(indent_table) == "li" then + remainder = "" + end + + local str = remainder .. line_content + local index = 1 + local remaining = fenceindent + + while true do + local c = str:sub(index, index) + if c == " " and remaining > 0 then + remaining = remaining - 1 + index = index + 1 + elseif c == "\t" and remaining > 3 then + remaining = remaining - 4 + index = index + 1 + else + break + end + end + + return true, str:sub(index) end + local fencedline = function(char) + return Cmt(Cb("indent_info") * C(parsers.line - fencetail(char)) * Cc(false), process_fenced_line) + end + + local blankfencedline = Cmt(Cb("indent_info") * C(parsers.blankline) * Cc(true), process_fenced_line) + local TildeFencedCode = fencehead(parsers.tilde, tilde_infostring) - * Cs(fencedline(parsers.tilde)^0) - * fencetail(parsers.tilde) + * Cs(((parsers.check_minimal_blank_indent / "") * blankfencedline + + (parsers.check_minimal_indent / "") * fencedline(parsers.tilde))^0) + * ((parsers.check_minimal_indent / "") * fencetail(parsers.tilde) + parsers.succeed) local BacktickFencedCode = fencehead(parsers.backtick, backtick_infostring) - * Cs(fencedline(parsers.backtick)^0) - * fencetail(parsers.backtick) + * Cs(((parsers.check_minimal_blank_indent / "") * blankfencedline + + (parsers.check_minimal_indent / "") * fencedline(parsers.backtick))^0) + * ((parsers.check_minimal_indent / "") * fencetail(parsers.backtick) + parsers.succeed) - local infostring_with_attributes - = Ct(C((parsers.linechar - - ( parsers.optionalspace - * parsers.attributes))^0) - * parsers.optionalspace - * Ct(parsers.attributes)) + local infostring_with_attributes + = Ct(C((parsers.linechar + - ( parsers.optionalspace + * parsers.attributes))^0) + * parsers.optionalspace + * Ct(parsers.attributes)) local FencedCode - = (TildeFencedCode + BacktickFencedCode) + = ((TildeFencedCode + BacktickFencedCode) / function(infostring, code) local expanded_code = self.expandtabs(code) @@ -26641,7 +30706,7 @@ M.extensions.fenced_code = function(blank_before_code_fence, end end return writer.fencedCode(expanded_code, infostring, attr) - end + end) self.insert_pattern("Block after Verbatim", FencedCode, "FencedCode") @@ -26695,7 +30760,7 @@ M.extensions.fenced_divs = function(blank_before_div_fence) function self.div_begin(attributes) local start_output = {"\\markdownRendererFencedDivAttributeContextBegin\n", self.attributes(attributes)} - local end_output = {"\n\\markdownRendererFencedDivAttributeContextEnd "} + local end_output = {"\\markdownRendererFencedDivAttributeContextEnd "} return self.push_attributes("div", attributes, start_output, end_output) end % \end{macrocode} @@ -26760,6 +30825,31 @@ M.extensions.fenced_divs = function(blank_before_div_fence) return Cg( Cmt(Cb("div_level"), update_div_level) , "div_level") end + + local non_fenced_div_block = parsers.check_minimal_indent * V("Block") + - parsers.check_minimal_indent_and_trail * fenced_div_end + + local non_fenced_div_paragraph = parsers.check_minimal_indent * V("Paragraph") + - parsers.check_minimal_indent_and_trail * fenced_div_end + + local blank = parsers.minimally_indented_blank + + local block_separated = parsers.block_sep_group(blank) + * non_fenced_div_block + + local loop_body_pair = parsers.create_loop_body_pair(block_separated, + non_fenced_div_paragraph, + parsers.block_sep_group(blank), + parsers.par_sep_group(blank)) + + local content_loop = ( non_fenced_div_block + * loop_body_pair.block^0 + + non_fenced_div_paragraph + * block_separated + * loop_body_pair.block^0 + + non_fenced_div_paragraph + * loop_body_pair.par^0) + * blank^0 local FencedDiv = fenced_div_begin / function (infostring) @@ -26772,14 +30862,9 @@ M.extensions.fenced_divs = function(blank_before_div_fence) / writer.div_begin * increment_div_level(1) * parsers.skipblanklines - * Ct( (V("Block") - fenced_div_end)^-1 - * ( parsers.blanklines - / function() - return writer.interblocksep - end - * (V("Block") - fenced_div_end))^0) - * parsers.skipblanklines - * fenced_div_end * increment_div_level(-1) + * Ct(content_loop) + * parsers.minimally_indented_blank^0 + * parsers.check_minimal_indent_and_trail * fenced_div_end * increment_div_level(-1) * (Cc("") / writer.div_end) self.insert_pattern("Block after Verbatim", @@ -26791,8 +30876,9 @@ M.extensions.fenced_divs = function(blank_before_div_fence) % \par % \begin{markdown} % -% Patch blockquotes, so that they allow the end of a fenced div immediately -% afterwards. +% If the `blank_before_div_fence` parameter is `false`, we will have the +% closing div at the beginning of a line break the current paragraph if +% we are currently nested in a div. % % \end{markdown} % \begin{macrocode} @@ -26804,23 +30890,6 @@ M.extensions.fenced_divs = function(blank_before_div_fence) local is_inside_div = Cmt(Cb("div_level"), check_div_level) local fencestart = is_inside_div * fenced_div_end - self.update_rule("BlockquoteExceptions", function(previous_pattern) - if previous_pattern == nil then - previous_pattern = parsers.BlockquoteExceptions - end - return previous_pattern + fencestart - end) - -% \end{macrocode} -% \par -% \begin{markdown} -% -% If the `blank_before_div_fence` parameter is `false`, we will have the -% closing div at the beginning of a line break the current paragraph if -% we are currently nested in a div. -% -% \end{markdown} -% \begin{macrocode} if not blank_before_div_fence then self.update_rule("EndlineExceptions", function(previous_pattern) if previous_pattern == nil then @@ -26850,47 +30919,58 @@ M.extensions.header_attributes = function() local parsers = self.parsers local writer = self.writer + local function strip_atx_end(s) + return s:gsub("%s+#*%s*$","") + end + local AtxHeading = Cg(parsers.heading_start, "level") * parsers.optionalspace * (C(((parsers.linechar - - ((parsers.hash^1 + - (parsers.attributes * parsers.optionalspace - * parsers.attributes^-1 - + parsers.attributes) - * parsers.optionalspace - * parsers.newline)) - * (parsers.linechar - - parsers.hash - - parsers.lbrace)^0)^1) - / self.parser_functions.parse_inlines) + * parsers.newline)) + * (parsers.linechar + - parsers.lbrace)^0)^1) + / strip_atx_end + / parsers.parse_heading_text) * Cg(Ct(parsers.newline - + (parsers.hash^1 + + (parsers.attributes * parsers.optionalspace - * parsers.attributes^-1 - + parsers.attributes) - * parsers.optionalspace - * parsers.newline), "attributes") + * parsers.newline)), "attributes") * Cb("level") * Cb("attributes") / writer.heading - local SetextHeading = #(parsers.line * S("=-")) - * (C(((parsers.linechar - - (parsers.attributes - * parsers.optionalspace - * parsers.newline)) - * (parsers.linechar - - parsers.lbrace)^0)^1) - / self.parser_functions.parse_inlines) - * Cg(Ct(parsers.newline - + (parsers.attributes - * parsers.optionalspace - * parsers.newline)), "attributes") - * parsers.heading_level - * Cb("attributes") - * parsers.optionalspace - * parsers.newline - / writer.heading + local function strip_trailing_spaces(s) + return s:gsub("%s*$","") + end + + local heading_line = (parsers.linechar + - (parsers.attributes + * parsers.optionalspace + * parsers.newline))^1 + - parsers.thematic_break_lines + + local heading_text = heading_line + * ((V("Endline") / "\n") * (heading_line - parsers.heading_level))^0 + * parsers.newline^-1 + + local SetextHeading = parsers.freeze_trail * parsers.check_trail_no_rem + * #(heading_text + * (parsers.attributes + * parsers.optionalspace + * parsers.newline)^-1 + * parsers.check_minimal_indent * parsers.check_trail * parsers.heading_level) + * Cs(heading_text) / strip_trailing_spaces + / parsers.parse_heading_text + * Cg(Ct((parsers.attributes + * parsers.optionalspace + * parsers.newline)^-1), "attributes") + * parsers.check_minimal_indent_and_trail * parsers.heading_level + * Cb("attributes") + * parsers.newline + * parsers.unfreeze_trail + / writer.heading local Heading = AtxHeading + SetextHeading self.update_rule("Heading", Heading) @@ -26985,6 +31065,48 @@ end % \end{macrocode} % \begin{markdown} % +%#### Marked text +% +% The \luamdef{extensions.mark} function implements the Pandoc mark syntax +% extension. +% +% \end{markdown} +% \begin{macrocode} +M.extensions.mark = function() + return { + name = "built-in mark syntax extension", + extend_writer = function(self) +% \end{macrocode} +% \par +% \begin{markdown} +% +% Define \luamdef{writer->mark} as a function that will transform an input +% marked text `s` to the output format. +% +% \end{markdown} +% \begin{macrocode} + function self.mark(s) + if self.flatten_inlines then return s end + return {"\\markdownRendererMark{", s, "}"} + end + end, extend_reader = function(self) + local parsers = self.parsers + local writer = self.writer + + local doubleequals = P("==") + + local Mark = parsers.between(V("Inline"), doubleequals, doubleequals) + / function (inlines) return writer.mark(inlines) end + + self.add_special_character("=") + self.insert_pattern("Inline before LinkAndEmph", + Mark, "Mark") + end + } +end +% \end{macrocode} +% \begin{markdown} +% %#### Link Attributes % % The \luamdef{extensions.link_attributes} function implements the Pandoc @@ -26998,7 +31120,6 @@ M.extensions.link_attributes = function() extend_writer = function() end, extend_reader = function(self) local parsers = self.parsers - local writer = self.writer local options = self.options % \end{macrocode} @@ -27008,13 +31129,15 @@ M.extensions.link_attributes = function() % % \end{markdown} % \begin{macrocode} - - local define_reference_parser = parsers.define_reference_parser - * ( parsers.spnl - * Ct(parsers.attributes))^-1 + local define_reference_parser = (parsers.check_trail / "") * parsers.link_label * parsers.colon + * parsers.spnlc * parsers.url + * ( parsers.spnlc_sep * parsers.title * (parsers.spnlc * Ct(parsers.attributes)) + * parsers.only_blank + + parsers.spnlc_sep * parsers.title * parsers.only_blank + + Cc("") * (parsers.spnlc * Ct(parsers.attributes)) * parsers.only_blank + + Cc("") * parsers.only_blank) local ReferenceWithAttributes = define_reference_parser - * parsers.blankline^1 / self.register_link self.update_rule("Reference", ReferenceWithAttributes) @@ -27027,93 +31150,10 @@ M.extensions.link_attributes = function() % \end{markdown} % \begin{macrocode} - local function indirect_link(label, sps, tag, - attribute_text, - attributes) - return writer.defer_call(function() - local r, fallback = self.lookup_reference(label, sps, tag, - attributes) - if r then - return writer.link( - self.parser_functions.parse_inlines_no_link(label), - r.url, r.title, r.attributes) - else - local buf = {fallback} - if attributes then - table.insert(buf, writer.string(attribute_text)) - end - return buf - end - end) - end - - local DirectLinkWithAttributes = parsers.direct_link - * (Ct(parsers.attributes))^-1 - / writer.link - - local IndirectLinkWithAttributes = parsers.indirect_link - * (C(Ct(parsers.attributes)))^-1 - / indirect_link + local LinkWithAttributesAndEmph = Ct(parsers.link_and_emph_table * Cg(Cc(true), "match_link_attributes")) + / self.defer_link_and_emphasis_processing - local LinkWithAttributes = DirectLinkWithAttributes - + IndirectLinkWithAttributes - -% \end{macrocode} -% \begin{markdown} -% -% Here, we directly update the `Link` grammar rule to keep the -% method \luamref{reader->parser_functions.parse_inlines_no_link} -% aware of `LinkWithAttributes` and prevent nested links. -% -% If we used \luamref{reader->insert_pattern} instead of -% \luamref{reader->update_rule}, this correspondence would have -% been lost and link text would be able to contain nested links. -% -% \end{markdown} -% \begin{macrocode} - self.update_rule("Link", LinkWithAttributes) - -% \end{macrocode} -% \begin{markdown} -% -% The following patterns define direct and indirect images with attributes. -% -% \end{markdown} -% \begin{macrocode} - - local function indirect_image(label, sps, tag, - attribute_text, - attributes) - return writer.defer_call(function() - local r, fallback = self.lookup_reference(label, sps, tag, - attributes) - if r then - return writer.image(writer.string(label), - r.url, r.title, r.attributes) - else - local buf = {"!", fallback} - if attributes then - table.insert(buf, writer.string(attribute_text)) - end - return buf - end - end) - end - - local DirectImageWithAttributes = parsers.direct_image - * Ct(parsers.attributes) - / writer.image - - local IndirectImageWithAttributes = parsers.indirect_image - * C(Ct(parsers.attributes)) - / indirect_image - - local ImageWithAttributes = DirectImageWithAttributes - + IndirectImageWithAttributes - - self.insert_pattern("Inline before Image", - ImageWithAttributes, - "ImageWithAttributes") + self.update_rule("LinkAndEmph", LinkWithAttributesAndEmph) % \end{macrocode} % \begin{markdown} @@ -27122,7 +31162,6 @@ M.extensions.link_attributes = function() % % \end{markdown} % \begin{macrocode} - local AutoLinkUrlWithAttributes = parsers.auto_link_url * Ct(parsers.attributes) @@ -27186,6 +31225,7 @@ M.extensions.notes = function(notes, inline_notes) % \end{markdown} % \begin{macrocode} function self.note(s) + if self.flatten_inlines then return "" end return {"\\markdownRendererNote{",s,"}"} end end, extend_reader = function(self) @@ -27195,10 +31235,10 @@ M.extensions.notes = function(notes, inline_notes) if inline_notes then local InlineNote = parsers.circumflex - * (parsers.tag / self.parser_functions.parse_inlines_no_inline_note) + * (parsers.link_label / self.parser_functions.parse_inlines_no_inline_note) / writer.note - self.insert_pattern("Inline after Emph", + self.insert_pattern("Inline after LinkAndEmph", InlineNote, "InlineNote") end if notes then @@ -27208,7 +31248,7 @@ M.extensions.notes = function(notes, inline_notes) local RawNoteRef = #(parsers.lbracket * parsers.circumflex) - * parsers.tag / strip_first_char + * parsers.link_label / strip_first_char local rawnotes = {} @@ -27227,21 +31267,36 @@ M.extensions.notes = function(notes, inline_notes) end local function register_note(ref,rawnote) - rawnotes[self.normalize_tag(ref)] = rawnote + local normalized_tag = self.normalize_tag(ref) + if rawnotes[normalized_tag] == nil then + rawnotes[normalized_tag] = rawnote + end return "" end local NoteRef = RawNoteRef / lookup_note + local optionally_indented_line = parsers.check_optional_indent_and_any_trail * parsers.line + + local blank = parsers.check_optional_blank_indent_and_any_trail * parsers.optionalspace * parsers.newline + + local chunk = Cs(parsers.line * (optionally_indented_line - blank)^0) + + local indented_blocks = function(bl) + return Cs( bl + * (blank^1 * (parsers.check_optional_indent / "") + * parsers.check_code_trail * -parsers.blankline * bl)^0) + end + local NoteBlock - = parsers.leader * RawNoteRef * parsers.colon - * parsers.spnl * parsers.indented_blocks(parsers.chunk) + = parsers.check_trail_no_rem * RawNoteRef * parsers.colon + * parsers.spnlc * indented_blocks(chunk) / register_note - local Blank = NoteBlock + parsers.Blank - self.update_rule("Blank", Blank) + local Reference = NoteBlock + parsers.Reference - self.insert_pattern("Inline after Emph", + self.update_rule("Reference", Reference) + self.insert_pattern("Inline before LinkAndEmph", NoteRef, "NoteRef") end @@ -27257,11 +31312,13 @@ end % The \luamdef{extensions.pipe_table} function implements the \acro{PHP} % Markdown table syntax extension (also known as pipe tables in Pandoc). When % the `table_captions` parameter is `true`, the function also implements the -% Pandoc table caption syntax extension for table captions. +% Pandoc table caption syntax extension for table captions. When the +% `table_attributes` parameter is also `true`, the function also +% allows attributes to be attached to the (possibly empty) table captions. % % \end{markdown} % \begin{macrocode} -M.extensions.pipe_tables = function(table_captions) +M.extensions.pipe_tables = function(table_captions, table_attributes) local function make_pipe_table_rectangular(rows) local num_columns = #rows[2] @@ -27329,10 +31386,18 @@ M.extensions.pipe_tables = function(table_captions) % % \end{markdown} % \begin{macrocode} - function self.table(rows, caption) + function self.table(rows, caption, attributes) if not self.is_writing then return "" end - local buffer = {"\\markdownRendererTable{", - caption or "", "}{", #rows - 1, "}{", #rows[1], "}"} + local buffer = {} + if attributes ~= nil then + table.insert(buffer, + "\\markdownRendererTableAttributeContextBegin\n") + table.insert(buffer, self.attributes(attributes)) + end + table.insert(buffer, + {"\\markdownRendererTable{", + caption or "", "}{", #rows - 1, "}{", + #rows[1], "}"}) local temp = rows[2] -- put alignments on the first row rows[2] = rows[1] rows[1] = temp @@ -27349,6 +31414,10 @@ M.extensions.pipe_tables = function(table_captions) end table.insert(buffer, "}") end + if attributes ~= nil then + table.insert(buffer, + "\\markdownRendererTableAttributeContextEnd{}") + end return buffer end end, extend_reader = function(self) @@ -27378,31 +31447,65 @@ M.extensions.pipe_tables = function(table_captions) , table_hline_separator , table_hline_column) - local table_caption_beginning = parsers.skipblanklines - * parsers.nonindentspace + local table_caption_beginning = (parsers.check_minimal_blank_indent_and_any_trail_no_rem + * parsers.optionalspace * parsers.newline)^0 + * parsers.check_minimal_indent_and_trail * (P("Table")^-1 * parsers.colon) * parsers.optionalspace + local function strip_trailing_spaces(s) + return s:gsub("%s*$","") + end + local table_row = pipe_table_row(true , (C((parsers.linechar - parsers.pipe)^1) + / strip_trailing_spaces / self.parser_functions.parse_inlines) , parsers.pipe , (C((parsers.linechar - parsers.pipe)^0) + / strip_trailing_spaces / self.parser_functions.parse_inlines)) local table_caption if table_captions then table_caption = #table_caption_beginning * table_caption_beginning - * Ct(parsers.IndentedInline^1) - * parsers.newline + if table_attributes then + table_caption = table_caption + * (C(((( parsers.linechar + - (parsers.attributes + * parsers.optionalspace + * parsers.newline + * -#( parsers.optionalspace + * parsers.linechar))) + + ( parsers.newline + * #( parsers.optionalspace + * parsers.linechar) + * C(parsers.optionalspace) / writer.space)) + * (parsers.linechar + - parsers.lbrace)^0)^1) + / self.parser_functions.parse_inlines) + * (parsers.newline + + ( Ct(parsers.attributes) + * parsers.optionalspace + * parsers.newline)) + else + table_caption = table_caption + * C(( parsers.linechar + + ( parsers.newline + * #( parsers.optionalspace + * parsers.linechar) + * C(parsers.optionalspace) / writer.space))^1) + / self.parser_functions.parse_inlines + * parsers.newline + end else table_caption = parsers.fail end - local PipeTable = Ct(table_row * parsers.newline - * table_hline - * (parsers.newline * table_row)^0) + local PipeTable = Ct(table_row * parsers.newline * (parsers.check_minimal_indent_and_trail / {}) + * table_hline * parsers.newline + * ((parsers.check_minimal_indent / {}) * table_row * parsers.newline)^0) / make_pipe_table_rectangular * table_caption^-1 / writer.table @@ -27439,6 +31542,7 @@ M.extensions.raw_inline = function() % \begin{macrocode} function self.rawInline(s, attr) if not self.is_writing then return "" end + if self.flatten_inlines then return s end local name = util.cache_verbatim(options.cacheDir, s) return {"\\markdownRendererInputRawInline{", name,"}{", self.string(attr),"}"} @@ -27479,6 +31583,7 @@ M.extensions.strike_through = function() % \end{markdown} % \begin{macrocode} function self.strike_through(s) + if self.flatten_inlines then return s end return {"\\markdownRendererStrikeThrough{",s,"}"} end end, extend_reader = function(self) @@ -27490,7 +31595,7 @@ M.extensions.strike_through = function() parsers.doubletildes) ) / writer.strike_through - self.insert_pattern("Inline after Emph", + self.insert_pattern("Inline after LinkAndEmph", StrikeThrough, "StrikeThrough") self.add_special_character("~") @@ -27521,6 +31626,7 @@ M.extensions.subscripts = function() % \end{markdown} % \begin{macrocode} function self.subscript(s) + if self.flatten_inlines then return s end return {"\\markdownRendererSubscript{",s,"}"} end end, extend_reader = function(self) @@ -27531,7 +31637,7 @@ M.extensions.subscripts = function() parsers.between(parsers.Str, parsers.tilde, parsers.tilde) ) / writer.subscript - self.insert_pattern("Inline after Emph", + self.insert_pattern("Inline after LinkAndEmph", Subscript, "Subscript") self.add_special_character("~") @@ -27562,6 +31668,7 @@ M.extensions.superscripts = function() % \end{markdown} % \begin{macrocode} function self.superscript(s) + if self.flatten_inlines then return s end return {"\\markdownRendererSuperscript{",s,"}"} end end, extend_reader = function(self) @@ -27572,7 +31679,7 @@ M.extensions.superscripts = function() parsers.between(parsers.Str, parsers.circumflex, parsers.circumflex) ) / writer.superscript - self.insert_pattern("Inline after Emph", + self.insert_pattern("Inline after LinkAndEmph", Superscript, "Superscript") self.add_special_character("^") @@ -27582,7 +31689,7 @@ end % \end{macrocode} % \begin{markdown} % -%#### Tex Math +%#### \TeX{} Math % % The \luamdef{extensions.tex_math} function implements the Pandoc math % syntax extensions. @@ -27605,7 +31712,7 @@ M.extensions.tex_math = function(tex_math_dollars, % \end{markdown} % \begin{macrocode} function self.display_math(s) - if not self.is_writing then return "" end + if self.flatten_inlines then return s end return {"\\markdownRendererDisplayMath{",self.math(s),"}"} end % \end{macrocode} @@ -27617,7 +31724,7 @@ M.extensions.tex_math = function(tex_math_dollars, % \end{markdown} % \begin{macrocode} function self.inline_math(s) - if not self.is_writing then return "" end + if self.flatten_inlines then return s end return {"\\markdownRendererInlineMath{",self.math(s),"}"} end end, extend_reader = function(self) @@ -27625,11 +31732,19 @@ M.extensions.tex_math = function(tex_math_dollars, local writer = self.writer local function between(p, starter, ender) - return (starter * C(p * (p - ender)^0) * ender) + return (starter * Cs(p * (p - ender)^0) * ender) + end + + local function strip_preceding_whitespaces(str) + return str:gsub("^%s*(.-)$", "%1") end local allowed_before_closing = B( parsers.backslash * parsers.any - + parsers.any * (parsers.nonspacechar - parsers.backslash)) + + parsers.any * (parsers.any - parsers.backslash)) + + local allowed_before_closing_no_space = B( parsers.backslash * parsers.any + + parsers.any * (parsers.nonspacechar - parsers.backslash)) + % \end{macrocode} % \begin{markdown} % @@ -27637,19 +31752,20 @@ M.extensions.tex_math = function(tex_math_dollars, % % \end{markdown} % \begin{macrocode} - local dollar_math_content = parsers.backslash^-1 - * parsers.any + local dollar_math_content = (parsers.newline * (parsers.check_optional_indent / "") + + parsers.backslash^-1 + * parsers.linechar) - parsers.blankline^2 - parsers.dollar local inline_math_opening_dollars = parsers.dollar * #(parsers.nonspacechar) - local inline_math_closing_dollars = allowed_before_closing + local inline_math_closing_dollars = allowed_before_closing_no_space * parsers.dollar * -#(parsers.digit) - local inline_math_dollars = between(C( dollar_math_content), + local inline_math_dollars = between(Cs( dollar_math_content), inline_math_opening_dollars, inline_math_closing_dollars) @@ -27659,7 +31775,7 @@ M.extensions.tex_math = function(tex_math_dollars, local display_math_closing_dollars = parsers.dollar * parsers.dollar - local display_math_dollars = between(C( dollar_math_content), + local display_math_dollars = between(Cs( dollar_math_content), display_math_opening_dollars, display_math_closing_dollars) % \end{macrocode} @@ -27670,7 +31786,8 @@ M.extensions.tex_math = function(tex_math_dollars, % % \end{markdown} % \begin{macrocode} - local backslash_math_content = parsers.any + local backslash_math_content = (parsers.newline * (parsers.check_optional_indent / "") + + parsers.linechar) - parsers.blankline^2 % \end{macrocode} % \begin{markdown} @@ -27683,29 +31800,32 @@ M.extensions.tex_math = function(tex_math_dollars, local inline_math_opening_double = parsers.backslash * parsers.backslash * parsers.lparent - * #(parsers.nonspacechar) local inline_math_closing_double = allowed_before_closing + * parsers.spacechar^0 * parsers.backslash * parsers.backslash * parsers.rparent - local inline_math_double = between(C( backslash_math_content), + local inline_math_double = between(Cs( backslash_math_content), inline_math_opening_double, inline_math_closing_double) + / strip_preceding_whitespaces local display_math_opening_double = parsers.backslash * parsers.backslash * parsers.lbracket local display_math_closing_double = allowed_before_closing + * parsers.spacechar^0 * parsers.backslash * parsers.backslash * parsers.rbracket - local display_math_double = between(C( backslash_math_content), + local display_math_double = between(Cs( backslash_math_content), display_math_opening_double, display_math_closing_double) + / strip_preceding_whitespaces % \end{macrocode} % \begin{markdown} % @@ -27716,26 +31836,29 @@ M.extensions.tex_math = function(tex_math_dollars, % \begin{macrocode} local inline_math_opening_single = parsers.backslash * parsers.lparent - * #(parsers.nonspacechar) local inline_math_closing_single = allowed_before_closing + * parsers.spacechar^0 * parsers.backslash * parsers.rparent - local inline_math_single = between(C( backslash_math_content), + local inline_math_single = between(Cs( backslash_math_content), inline_math_opening_single, inline_math_closing_single) + / strip_preceding_whitespaces local display_math_opening_single = parsers.backslash * parsers.lbracket local display_math_closing_single = allowed_before_closing + * parsers.spacechar^0 * parsers.backslash * parsers.rbracket - local display_math_single = between(C( backslash_math_content), + local display_math_single = between(Cs( backslash_math_content), display_math_opening_single, display_math_closing_single) + / strip_preceding_whitespaces local display_math = parsers.fail @@ -27759,7 +31882,7 @@ M.extensions.tex_math = function(tex_math_dollars, local TexMath = display_math / writer.display_math + inline_math / writer.inline_math - self.insert_pattern("Inline after Emph", + self.insert_pattern("Inline after LinkAndEmph", TexMath, "TexMath") if tex_math_dollars then @@ -27961,6 +32084,30 @@ function M.new(options) % \par % \begin{markdown} % +% If the singleton cache contains a conversion function for the same `options`, +% reuse it. +% +% \end{markdown} +% \begin{macrocode} + if options.singletonCache and singletonCache.convert then + for k, v in pairs(defaultOptions) do + if type(v) == "table" then + for i = 1, math.max(#singletonCache.options[k], #options[k]) do + if singletonCache.options[k][i] ~= options[k][i] then + goto miss + end + end + elseif singletonCache.options[k] ~= options[k] then + goto miss + end + end + return singletonCache.convert + end + ::miss:: +% \end{macrocode} +% \par +% \begin{markdown} +% % Apply built-in syntax extensions based on `options`. % % \end{markdown} @@ -28026,9 +32173,14 @@ function M.new(options) table.insert(extensions, line_block_extension) end + if options.mark then + local mark_extension = M.extensions.mark() + table.insert(extensions, mark_extension) + end + if options.pipeTables then local pipe_tables_extension = M.extensions.pipe_tables( - options.tableCaptions) + options.tableCaptions, options.tableAttributes) table.insert(extensions, pipe_tables_extension) end @@ -28062,19 +32214,9 @@ function M.new(options) table.insert(extensions, tex_math_extension) end -% \end{macrocode} -% \begin{markdown} -% -% The footnotes and inlineFootnotes option has been deprecated and will be -% removed in Markdown 3.0.0. -% -% \end{markdown} -% \begin{macrocode} - if options.footnotes or options.inlineFootnotes or - options.notes or options.inlineNotes then + if options.notes or options.inlineNotes then local notes_extension = M.extensions.notes( - options.footnotes or options.notes, - options.inlineFootnotes or options.inlineNotes) + options.notes, options.inlineNotes) table.insert(extensions, notes_extension) end @@ -28187,14 +32329,51 @@ function M.new(options) % \par % \begin{markdown} % -% Produce and return a conversion function from markdown to plain \TeX. +% Produce a conversion function from markdown to plain \TeX. % % \end{markdown} % \begin{macrocode} local writer = M.writer.new(options) local reader = M.reader.new(writer, options) local convert = reader.finalize_grammar(extensions) - +% \end{macrocode} +% \par +% \begin{markdown} +% +% Force garbage collection to reclaim memory for temporary +% objects created in \luamref{writer.new}, \luamref{reader.new}, +% and \luamref{reader->finalize_grammar}. +% +% \end{markdown} +% \begin{macrocode} + collectgarbage("collect") +% \end{macrocode} +% \par +% \begin{markdown} +% +% Update the singleton cache. +% +% \end{markdown} +% \begin{macrocode} + if options.singletonCache then + local singletonCacheOptions = {} + for k, v in pairs(options) do + singletonCacheOptions[k] = v + end + setmetatable(singletonCacheOptions, + { __index = function (_, key) + return defaultOptions[key] end }) + singletonCache.options = singletonCacheOptions + singletonCache.convert = convert + end +% \end{macrocode} +% \par +% \begin{markdown} +% +% Return the conversion function from markdown to plain \TeX. +% +% \end{markdown} +% \begin{macrocode} return convert end @@ -28246,9 +32425,8 @@ local kpse (function() local should_initialize = package.loaded.kpse == nil or tex.initialize ~= nil - local ran_ok - ran_ok, kpse = pcall(require, "kpse") - if ran_ok and should_initialize then + kpse = require("kpse") + if should_initialize then kpse.set_program_name("luatex") end end)() @@ -28276,6 +32454,14 @@ else assert(io.write(output)) end % \end{macrocode} +% \begin{markdown} +% Remove the `options.cacheDir` directory if it is empty. +% \end{markdown} +% \begin{macrocode} +if options.cacheDir then + lfs.rmdir(options["cacheDir"]) +end +% \end{macrocode} % \iffalse %</lua-cli> %<*tex> @@ -28295,23 +32481,218 @@ end % % \end{markdown} % \begin{macrocode} -\ifx\markdownInfo\undefined - \def\markdownInfo#1{% - \immediate\write-1{(l.\the\inputlineno) markdown.tex info: #1.}}% -\fi -\ifx\markdownWarning\undefined - \def\markdownWarning#1{% - \immediate\write16{(l.\the\inputlineno) markdown.tex warning: #1}}% -\fi -\ifx\markdownError\undefined - \def\markdownError#1#2{% - \errhelp{#2.}% - \errmessage{(l.\the\inputlineno) markdown.tex error: #1}}% -\fi +\ExplSyntaxOn +\cs_if_free:NT + \markdownInfo + { + \cs_new:Npn + \markdownInfo #1 + { + \msg_info:nne + { markdown } + { generic-message } + { #1 } + } + } +\cs_if_free:NT + \markdownWarning + { + \cs_new:Npn + \markdownWarning #1 + { + \msg_warning:nne + { markdown } + { generic-message } + { #1 } + } + } +\cs_if_free:NT + \markdownError + { + \cs_new:Npn + \markdownError #1 #2 + { + \msg_error:nnee + { markdown } + { generic-message-with-help-text } + { #1 } + { #2 } + } + } +\msg_new:nnn + { markdown } + { generic-message } + { #1 } +\msg_new:nnnn + { markdown } + { generic-message-with-help-text } + { #1 } + { #2 } +\cs_generate_variant:Nn + \msg_info:nnn + { nne } +\cs_generate_variant:Nn + \msg_warning:nnn + { nne } +\cs_generate_variant:Nn + \msg_error:nnnn + { nnee } +\ExplSyntaxOff +% \end{macrocode} +% \par +% \begin{markdown} +% +%### Themes {#themes-implementation} +% +% This section implements the theme-loading mechanism and the built-in themes +% provided with the Markdown package. Futhermore, this section also implements +% the built-in plain \TeX{} themes provided with the Markdown package. +% +% \end{markdown} +% \begin{macrocode} +\ExplSyntaxOn +\prop_new:N \g_@@_plain_tex_loaded_themes_linenos_prop +\cs_new:Nn + \@@_plain_tex_load_theme:nn + { + \prop_get:NnNTF + \g_@@_plain_tex_loaded_themes_linenos_prop + { #1 } + \l_tmpa_tl + { + \msg_warning:nnnV + { markdown } + { repeatedly-loaded-plain-tex-theme } + { #1 } + \l_tmpa_tl + } + { + \msg_info:nnn + { markdown } + { loading-plain-tex-theme } + { #1 } + \prop_gput:Nnx + \g_@@_plain_tex_loaded_themes_linenos_prop + { #1 } + { \tex_the:D \tex_inputlineno:D } + \file_input:n + { markdown theme #2 } + } + } +\msg_new:nnn + { markdown } + { loading-plain-tex-theme } + { Loading~plain~TeX~Markdown~theme~#1 } +\msg_new:nnn + { markdown } + { repeatedly-loaded-plain-tex-theme } + { + Plain~TeX~Markdown~theme~#1~was~previously~ + loaded~on~line~#2,~not~loading~it~again + } +\cs_generate_variant:Nn + \prop_gput:Nnn + { Nnx } +\cs_gset_eq:NN + \@@_load_theme:nn + \@@_plain_tex_load_theme:nn +\cs_generate_variant:Nn + \@@_load_theme:nn + { nV } +% \end{macrocode} +% \begin{markdown} +% +% Developers can use the \mref{markdownLoadPlainTeXTheme} macro to load a +% corresponding plain \TeX{} theme from within themes for higher-level \TeX{} +% formats such as \LaTeX{} and \Hologo{ConTeXt}. +% +% \end{markdown} +% \begin{macrocode} +\cs_new:Npn + \markdownLoadPlainTeXTheme + { +% \end{macrocode} +% \begin{markdown} +% +% First, we extract the name of the current theme from the +% \mref{g_@@_current_theme_tl} macro. +% +% \end{markdown} +% \begin{macrocode} + \tl_set:NV + \l_tmpa_tl + \g_@@_current_theme_tl + \tl_reverse:N + \l_tmpa_tl + \tl_set:Ne + \l_tmpb_tl + { + \tl_tail:V + \l_tmpa_tl + } + \tl_reverse:N + \l_tmpb_tl +% \end{macrocode} +% \begin{markdown} +% +% Next, we munge the theme name. +% +% \end{markdown} +% \begin{macrocode} + \str_set:NV + \l_tmpa_str + \l_tmpb_tl + \str_replace_all:Nnn + \l_tmpa_str + { / } + { _ } +% \end{macrocode} +% \begin{markdown} +% +% Finally, we load the plain \TeX{} theme. +% +% \end{markdown} +% \begin{macrocode} + \@@_plain_tex_load_theme:VV + \l_tmpb_tl + \l_tmpa_str + } +\cs_generate_variant:Nn + \tl_set:Nn + { Ne } +\cs_generate_variant:Nn + \@@_plain_tex_load_theme:nn + { VV } +\ExplSyntaxOff % \end{macrocode} +% \iffalse +%</tex> +%<*themes-witiko-tilde> +% \fi % \par % \begin{markdown} % +% The `witiko/tilde` theme redefines the tilde token renderer prototype, +% so that it expands to a non-breaking space: +% +% \end{markdown} +% \begin{macrocode} +\markdownSetup { + rendererPrototypes = { + tilde = {~}, + }, +} +% \end{macrocode} +% \iffalse +%</themes-witiko-tilde> +%<*themes-witiko-markdown-defaults-tex> +% \fi +% \begin{markdown} +% +% The `witiko/markdown/defaults` plain \TeX{} theme provides default +% definitions for token renderer prototypes. See Section +% <#sec:tex-token-renderer-prototypes> for the actual definitions. +% %### Token Renderer Prototypes {#tex-token-renderer-prototypes} % % The following definitions should be considered placeholder. @@ -28319,7 +32700,10 @@ end % \end{markdown} % \begin{macrocode} \def\markdownRendererInterblockSeparatorPrototype{\par}% +\def\markdownRendererParagraphSeparatorPrototype{% + \markdownRendererInterblockSeparator}% \def\markdownRendererHardLineBreakPrototype{\hfil\break}% +\def\markdownRendererSoftLineBreakPrototype{ }% \let\markdownRendererEllipsisPrototype\dots \def\markdownRendererNbspPrototype{~}% \def\markdownRendererLeftBracePrototype{\char`\{}% @@ -28340,7 +32724,7 @@ end \def\markdownRendererContentBlockOnlineImagePrototype{% \markdownRendererImage}% \def\markdownRendererContentBlockCodePrototype#1#2#3#4#5{% - \markdownRendererInputFencedCode{#3}{#2}}% + \markdownRendererInputFencedCode{#3}{#2}{#2}}% \def\markdownRendererImagePrototype#1#2#3#4{#2}% \def\markdownRendererUlBeginPrototype{}% \def\markdownRendererUlBeginTightPrototype{}% @@ -28378,7 +32762,7 @@ end \def\markdownRendererLineBlockEndPrototype{\endgroup}% \def\markdownRendererInputVerbatimPrototype#1{% \par{\tt\input#1\relax{}}\par}% -\def\markdownRendererInputFencedCodePrototype#1#2{% +\def\markdownRendererInputFencedCodePrototype#1#2#3{% \markdownRendererInputVerbatim{#1}}% \def\markdownRendererHeadingOnePrototype#1{#1}% \def\markdownRendererHeadingTwoPrototype#1{#1}% @@ -28431,12 +32815,7 @@ end \markdownRendererHeaderAttributeContextEndPrototype \cs_gset:Npn \markdownRendererReplacementCharacterPrototype - { - % TODO: Replace with `\codepoint_generate:nn` in TeX Live 2023 - \sys_if_engine_pdftex:TF - { ^^ef^^bf^^bd } - { ^^^^fffd } - } + { \codepoint_str_generate:n { fffd } } \ExplSyntaxOff \def\markdownRendererSectionBeginPrototype{}% \def\markdownRendererSectionEndPrototype{}% @@ -28492,7 +32871,7 @@ end % \par % \begin{markdown} % -%#### YAML Metadata Renderer Prototypes {#expl3-yaml-metadata-implementation} +%#### YAML Metadata Renderer Prototypes % % To keep track of the current type of structure we inhabit when we are % traversing a \acro{yaml} document, we will maintain the @@ -28727,6 +33106,35 @@ end } \ExplSyntaxOff % \end{macrocode} +% \iffalse +%</themes-witiko-markdown-defaults-tex> +%<*tex> +% \fi +% \begin{markdown} +% +% If plain \TeX{} is the top layer, we load the `witiko/markdown/defaults` +% plain \TeX{} theme with the default definitions for token renderer +% prototypes unless the option `noDefaults` has been enabled (see Section +% <#sec:plain>). +% +% \end{markdown} +% \begin{macrocode} +\ExplSyntaxOn +\str_if_eq:VVT + \c_@@_top_layer_tl + \c_@@_option_layer_plain_tex_tl + { + \ExplSyntaxOff + \@@_if_option:nF + { noDefaults } + { + \@@_setup:n + {theme = witiko/markdown/defaults} + } + \ExplSyntaxOn + } +\ExplSyntaxOff +% \end{macrocode} % \begin{markdown} % %### Lua Snippets @@ -28849,56 +33257,25 @@ end % \par % \begin{markdown} % -%### Buffering Markdown Input {#buffering} -% -% The -% \mdef{markdownIfOption}`{`\meta{name}`}{`\meta{iftrue}`}{`\meta{iffalse}`}` -% macro is provided for testing, whether the value of -% `\markdownOption`\meta{name} is `true`. If the value is `true`, then -% \meta{iftrue} is expanded, otherwise \meta{iffalse} is expanded. +% The \mdef{markdownCleanup} macro contains the Lua code that is executed +% after any conversion from markdown to plain \TeX{}. % % \end{markdown} % \begin{macrocode} -\ExplSyntaxOn -\prg_new_conditional:Nnn - \@@_if_option:n - { TF, T, F } - { - \@@_get_option_type:nN - { #1 } - \l_tmpa_tl - \str_if_eq:NNF - \l_tmpa_tl - \c_@@_option_type_boolean_tl - { - \msg_error:nnxx - { markdown } - { expected-boolean-option } - { #1 } - { \l_tmpa_tl } - } - \@@_get_option_value:nN - { #1 } - \l_tmpa_tl - \str_if_eq:NNTF - \l_tmpa_tl - \c_@@_option_value_true_tl - { \prg_return_true: } - { \prg_return_false: } - } -\msg_new:nnn - { markdown } - { expected-boolean-option } - { - Option~#1~has~type~#2,~ - but~a~boolean~was~expected. - } -\let\markdownIfOption=\@@_if_option:nTF -\ExplSyntaxOff +\def\markdownCleanup{% +% \end{macrocode} +% \begin{markdown} +% Remove the `options.cacheDir` directory if it is empty. +% \end{markdown} +% \begin{macrocode} + lfs.rmdir(cacheDir) +}% % \end{macrocode} % \par % \begin{markdown} % +%### Buffering Markdown Input {#buffering} +% % The macros \mdef{markdownInputFileStream} and \mdef{markdownOutputFileStream} % contain the number of the input and output file streams that will be used for % the IO operations of the package. @@ -29080,266 +33457,64 @@ end % \par % \begin{markdown} % -% The following two sections of the implementation have been deprecated and -% will be removed in Markdown 3.0.0. The code that corresponds to -% \mref{markdownMode} value of `3` will be the only implementation. +% Use the \pkg{lt3luabridge} library to define the \mdef{markdownLuaExecute} +% macro, which takes in a Lua scripts and expands to the standard output +% produced by its execution. % % \end{markdown} % \begin{macrocode} \ExplSyntaxOn -\int_compare:nT - { \markdownMode = 3 } +\cs_new:Npn + \markdownLuaExecute + #1 { - \markdownInfo{Using~mode~3:~The~lt3luabridge~package} - \file_input:n { lt3luabridge.tex } - \cs_new:Npn - \markdownLuaExecute - { \luabridgeExecute } + \int_compare:nNnT + { \g_luabridge_method_int } + = + { \c_luabridge_method_shell_int } + { + \sys_if_shell_unrestricted:F + { + \sys_if_shell:TF + { + \msg_error:nn + { markdown } + { restricted-shell-access } + } + { + \msg_error:nn + { markdown } + { disabled-shell-access } + } + } + } + \luabridge_now:e + { #1 } + } +\cs_generate_variant:Nn + \msg_new:nnnn + { nnnV } +\tl_set:Nn + \l_tmpa_tl + { + You~may~need~to~run~TeX~with~the~--shell-escape~or~the~ + --enable-write18~flag,~or~write~shell_escape=t~in~the~ + texmf.cnf~file. } +\msg_new:nnnV + { markdown } + { restricted-shell-access } + { Shell~escape~is~restricted } + \l_tmpa_tl +\msg_new:nnnV + { markdown } + { disabled-shell-access } + { Shell~escape~is~disabled } + \l_tmpa_tl \ExplSyntaxOff % \end{macrocode} % \begin{markdown} % -%### Lua Shell Escape Bridge {#lua-bridge} -% -% The following \TeX{} code is intended for \TeX{} engines that do not provide -% direct access to Lua, but expose the shell of the operating system. This -% corresponds to the \mref{markdownMode} values of `0` and `1`. -% -% The \mref{markdownLuaExecute} macro defined here and in Section -% <#sec:direct-lua> are meant to be indistinguishable to the remaining code. -% -% The package assumes that although the user is not using the Lua\TeX{} engine, -% their \TeX{} distribution contains it, and uses shell access to produce and -% execute Lua scripts using the \TeX{}Lua interpreter~[@luatex21, Section -% 4.1.1]. -% -% \end{markdown} -% \begin{macrocode} -\ifnum\markdownMode<2\relax -\ifnum\markdownMode=0\relax - \markdownWarning{Using mode 0: Shell escape via write18 - (deprecated, to be removed in Markdown 3.0.0)}% -\else - \markdownWarning{Using mode 1: Shell escape via os.execute - (deprecated, to be removed in Markdown 3.0.0)}% -\fi -% \end{macrocode} -% \par -% \begin{markdown} -% -% The \mdef{markdownExecuteShellEscape} macro contains the numeric value indicating -% whether the shell access is enabled (`1`), disabled (`0`), or restricted -% (`2`). -% -% Inherit the value of the `\pdfshellescape` (Lua\TeX{}, \Hologo{pdfTeX}) -% or the `\shellescape` (\Hologo{XeTeX}) commands. If neither of these -% commands is defined and Lua is available, attempt to access the -% `status.shell_escape` configuration item. -% -% If you cannot detect, whether the shell access is enabled, act as if it were. -% -% \end{markdown} -% \begin{macrocode} -\ifx\pdfshellescape\undefined - \ifx\shellescape\undefined - \ifnum\markdownMode=0\relax - \def\markdownExecuteShellEscape{1}% - \else - \def\markdownExecuteShellEscape{% - \directlua{tex.sprint(status.shell_escape or "1")}}% - \fi - \else - \let\markdownExecuteShellEscape\shellescape - \fi -\else - \let\markdownExecuteShellEscape\pdfshellescape -\fi -% \end{macrocode} -% \par -% \begin{markdown} -% -% The \mdef{markdownExecuteDirect} macro executes the code it has received as -% its first argument by writing it to the output file stream 18, if Lua is -% unavailable, or by using the Lua `os.execute` method otherwise. -% -% \end{markdown} -% \begin{macrocode} -\ifnum\markdownMode=0\relax - \def\markdownExecuteDirect#1{\immediate\write18{#1}}% -\else - \def\markdownExecuteDirect#1{% - \directlua{os.execute("\luaescapestring{#1}")}}% -\fi -% \end{macrocode} -% \par -% \begin{markdown} -% -% The \mdef{markdownExecute} macro is a wrapper on top of -% \mref{markdownExecuteDirect} that checks the value of -% \mref{markdownExecuteShellEscape} and prints an error message if the shell is -% inaccessible. -% -% \end{markdown} -% \begin{macrocode} -\def\markdownExecute#1{% - \ifnum\markdownExecuteShellEscape=1\relax - \markdownExecuteDirect{#1}% - \else - \markdownError{I can not access the shell}{Either run the TeX - compiler with the --shell-escape or the --enable-write18 flag, - or set shell_escape=t in the texmf.cnf file}% - \fi}% -% \end{macrocode} -% \par -% \begin{markdown} -% -% The \mdef{markdownLuaExecute} macro executes the Lua code it has received as -% its first argument. The Lua code may not directly interact with the \TeX{} -% engine, but it can use the `print` function in the same manner it -% would use the `tex.print` method. -% -% \end{markdown} -% \begin{macrocode} -\begingroup -% \end{macrocode} -% \begin{markdown} -% Swap the category code of the backslash symbol and the pipe symbol, so that -% we may use the backslash symbol freely inside the Lua code. -% \end{markdown} -% \begin{macrocode} - \catcode`|=0% - \catcode`\\=12% - |gdef|markdownLuaExecute#1{% -% \end{macrocode} -% \begin{markdown} -% Create the file \Opt{helperScriptFileName} and fill it with the -% input Lua code prepended with \pkg{kpathsea} initialization, so that Lua -% modules from the \TeX{} distribution are available. -% \end{markdown} -% \begin{macrocode} - |immediate|openout|markdownOutputFileStream=% - |markdownOptionHelperScriptFileName - |markdownInfo{Writing a helper Lua script to the file - "|markdownOptionHelperScriptFileName"}% - |immediate|write|markdownOutputFileStream{% - local ran_ok, error = pcall(function() -% \end{macrocode} -% \begin{markdown} -% -% If \pkg{Kpathsea} has not been loaded before or if Lua\TeX{} has not yet -% been initialized, configure \pkg{Kpathsea} on top of loading it. -% -% \end{markdown} -% \begin{macrocode} - local kpse - (function() - local should_initialize = package.loaded.kpse == nil - or tex.initialize - local ran_ok - ran_ok, kpse = pcall(require, "kpse") - if ran_ok and should_initialize then - kpse.set_program_name("luatex") - end - end)() - #1 - end) -% \end{macrocode} -% \begin{markdown} -% If there was an error, use the file \Opt{errorTempFileName} to -% store the error message. -% \end{markdown} -% \begin{macrocode} - if not ran_ok then - local file = io.open("% - |markdownOptionOutputDir - /|markdownOptionErrorTempFileName", "w") - if file then - file:write(error .. "\n") - file:close() - end - print('\\markdownError{An error was encountered while executing - Lua code}{For further clues, examine the file - "|markdownOptionOutputDir - /|markdownOptionErrorTempFileName"}') - end}% - |immediate|closeout|markdownOutputFileStream -% \end{macrocode} -% \begin{markdown} -% Execute the generated \Opt{helperScriptFileName} Lua script using -% the \TeX{}Lua binary and store the output in the -% \Opt{outputTempFileName} file. -% \end{markdown} -% \begin{macrocode} - |markdownInfo{Executing a helper Lua script from the file - "|markdownOptionHelperScriptFileName" and storing the result in the - file "|markdownOptionOutputTempFileName"}% - |markdownExecute{texlua "|markdownOptionOutputDir - /|markdownOptionHelperScriptFileName" > % - "|markdownOptionOutputDir - /|markdownOptionOutputTempFileName"}% -% \end{macrocode} -% \begin{markdown} -% `\input` the generated \Opt{outputTempFileName} file. -% \end{markdown} -% \begin{macrocode} - |input|markdownOptionOutputTempFileName|relax}% -|endgroup -% \end{macrocode} -% \par -% \begin{markdown} -% -%### Direct Lua Access {#direct-lua} -% -% The following \TeX{} code is intended for \TeX{} engines that provide -% direct access to Lua (Lua\TeX{}). The macro \mref{markdownLuaExecute} defined -% here and in Section <#sec:lua-bridge> are meant to be indistinguishable to -% the remaining code. This corresponds to the \mref{markdownMode} value of `2`. -% -% \end{markdown} -% \begin{macrocode} -\fi -\ifnum\markdownMode=2\relax - \markdownWarning{Using mode 2: Direct Lua access - (deprecated, to be removed in Markdown 3.0.0)}% -% \end{macrocode} -% \par -% \begin{markdown} -% -% The direct Lua access version of the \mref{markdownLuaExecute} macro is defined -% in terms of the `\directlua` primitive. The `print` function is set as -% an alias to the `tex.print` method in order to mimic the behaviour of the -% \mref{markdownLuaExecute} definition from Section <#sec:lua-bridge>, -% -% \end{markdown} -% \begin{macrocode} -\begingroup -% \end{macrocode} -% \begin{markdown} -% Swap the category code of the backslash symbol and the pipe symbol, so that -% we may use the backslash symbol freely inside the Lua code. -% \end{markdown} -% \begin{macrocode} - \catcode`|=0% - \catcode`\\=12% - |gdef|markdownLuaExecute#1{% - |directlua{% - local function print(input) - local output = {} - for line in input:gmatch("[^\r\n]+") do - table.insert(output, line) - end - tex.print(output) - end - #1 - }% - }% -|endgroup -\fi -% \end{macrocode} -% \par -% \begin{markdown} -% %### Typesetting Markdown % % The \mref{markdownInput} macro uses an implementation of the @@ -29413,20 +33588,15 @@ end [[Could not open file "&1" for reading]]) local input = assert(file:read("*a")) assert(file:close()) + print(convert(input)) + |markdownCleanup}% % \end{macrocode} % \begin{markdown} -% Since the Lua converter expects \acro{unix} line endings, normalize the -% input. Also add a line ending at the end of the file in case the input file -% has none. -% \end{markdown} -% \begin{macrocode} - print(convert(input))}% -% \end{macrocode} -% \begin{markdown} -% In case we were finalizing the frozen cache, increment \Opt{frozenCacheCounter}. +% If we are finalizing the frozen cache, increment \Opt{frozenCacheCounter}. % \end{markdown} % \begin{macrocode} - |global|advance|markdownOptionFrozenCacheCounter by 1|relax + |markdownIfOption{finalizeCache}{% + |global|advance|markdownOptionFrozenCacheCounter by 1|relax}{}% }% |endgroup }% @@ -29472,19 +33642,6 @@ end % \par % \begin{markdown} % -% Use reflection to define the `renderers` and `rendererPrototypes` keys of -% \mref{markdownSetup} as well as the keys that correspond to Lua options. -% -% \end{markdown} -% \begin{macrocode} -\ExplSyntaxOn -\@@_latex_define_renderers: -\@@_latex_define_renderer_prototypes: -\ExplSyntaxOff -% \end{macrocode} -% \par -% \begin{markdown} -% %### Logging Facilities % The \LaTeX{} implementation redefines the plain \TeX{} logging macros (see % Section <#sec:tex-interface-logging>) to use the \LaTeX{} `\PackageInfo`, @@ -29519,13 +33676,125 @@ end % % \end{markdown} % \begin{macrocode} -\renewenvironment{markdown}{% - \markdownReadAndConvert@markdown{}}{% - \markdownEnd}% -\renewenvironment{markdown*}[1]{% - \markdownSetup{#1}% - \markdownReadAndConvert@markdown*}{% - \markdownEnd}% +\ExplSyntaxOn +\renewenvironment + { markdown } + { +% \end{macrocode} +% \markdownBegin +% +% In our implementation of the \envmref{markdown} \LaTeX{} environment, we +% want to distinguish between the following two cases: +% ``` tex +% \begin{markdown} [smartEllipses] \begin{markdown} +% \% This is an optional argument ^ [smartEllipses] +% \% ... \% ^ This is link +% \end{markdown} \end{markdown} +% ``````` +% +% Therefore, we cannot use the built-in \LaTeX{} support for environments +% with optional arguments or packages such as \pkg{xparse}. Instead, we +% must read the optional argument manually and prevent reading past the +% end of a line. +% +% To prevent reading past the end of a line when looking for the optional +% argument of the \envmref{markdown} \LaTeX{} environment and accidentally +% tokenizing markdown text, we change the category code of carriage return +% (`\r`, ASCII character 13 in decimal) from 5 (end of line). +% +% While any category code other than 5 (end of line) would work, we switch to +% the category 13 (active), which is also used by the +% \mref{markdownReadAndConvert} macro. This is necessary if we read until the +% end of a line, because then the carriage return character will be +% produced by \TeX{} via the `\endlinechar` plain \TeX{} macro and it needs +% to have the correct category code, so that \mref{markdownReadAndConvert} +% processes it correctly. +% +% \markdownEnd +% \begin{macrocode} + \group_begin: + \char_set_catcode_active:n { 13 } +% \end{macrocode} +% \begin{markdown} +% +% To prevent doubling the hash signs (`#`, ASCII code 35 in decimal), we switch +% its category from 6 (parameter) to 12 (letter). +% +% \end{markdown} +% \begin{macrocode} + \char_set_catcode_letter:n { 35 } +% \end{macrocode} +% \begin{markdown} +% +% After we have matched the opening `[` that begins the optional argument, +% we accept carriage returns as well. +% +% \end{markdown} +% \begin{macrocode} + \peek_regex_replace_once:nnF + { \ *\[([^]]*)\][^\r]* } + { +% \end{macrocode} +% \begin{markdown} +% +% After we have matched the optional argument, we switch back the category +% code of carriage returns and hash signs and we retokenize the content. This +% will cause single new lines to produce a space token and multiple new lines +% to produce `\par` tokens. Furthermore, this will cause hash signs followed +% by a number to be recognized as parameter numbers, which is necessary when +% we use the optional argument to redefine token renderers and token renderer +% prototypes. +% +% \end{markdown} +% \begin{macrocode} + \c { group_end: } + \c { tl_set_rescan:Nnn } \c { l_tmpa_tl } { } { \1 } +% \end{macrocode} +% \begin{markdown} +% +% Then, we pass the retokenized content to the \mref{markdownSetup} macro. +% +% \end{markdown} +% \begin{macrocode} + \c { @@_setup:V } \c { l_tmpa_tl } +% \end{macrocode} +% \begin{markdown} +% +% Finally, regardless of whether or not we have matched the optional argument, +% we let the \mref{markdownReadAndConvert} macro process the rest of the +% \LaTeX{} environment. +% +% \end{markdown} +% \begin{macrocode} + \c { markdownReadAndConvert@markdown } { } + } + { + \group_end: + \markdownReadAndConvert@markdown { } + } + } + { \markdownEnd } +\renewenvironment + { markdown* } + [ 1 ] + { + \msg_warning:nnn + { markdown } + { latex-markdown-star-deprecated } + { #1 } + \@@_setup:n + { #1 } + \markdownReadAndConvert@markdown * + } + { \markdownEnd } +\msg_new:nnn + { markdown } + { latex-markdown-star-deprecated } + { + The~markdown*~LaTeX~environment~has~been~deprecated~and~will~ + be~removed~in~the~next~major~version~of~the~Markdown~package. + } +\ExplSyntaxOff \begingroup % \end{macrocode} % \begin{markdown} @@ -29546,51 +33815,147 @@ end % \par % \begin{markdown} % -%#### \LaTeX{} Themes {#latex-themes-implementation} +%### Options +% The supplied package options are processed using the \mref{markdownSetup} macro. +% +% \end{markdown} +% \begin{macrocode} +\DeclareOption*{% + \expandafter\markdownSetup\expandafter{\CurrentOption}}% +\ProcessOptions\relax +% \end{macrocode} +% \begin{markdown} +% +%### Themes {#latex-themes-implementation} % -% This section implements the theme-loading mechanism and the example themes -% provided with the Markdown package. +% This section overrides the plain \TeX{} implementation of the theme-loading +% mechanism from Section <#sec:themes-implementation>. Futhermore, this section +% also implements the built-in \LaTeX{} themes provided with the Markdown package. % % \end{markdown} % \begin{macrocode} \ExplSyntaxOn +\cs_gset:Nn + \@@_load_theme:nn + { % \end{macrocode} +% \par % \begin{markdown} % -% To keep track of our current place when packages themes have been nested, -% we will maintain the \mdef{g_\@\@_latex_themes_seq} stack of theme names. +% If the Markdown package has already been loaded, determine whether +% a file named `markdowntheme`\meta{munged theme name}`.sty` exists +% and whether we are still in the preamble. % % \end{markdown} % \begin{macrocode} -\newcommand\markdownLaTeXThemeName{} -\seq_new:N \g_@@_latex_themes_seq -\seq_gput_right:NV - \g_@@_latex_themes_seq - \markdownLaTeXThemeName -\newcommand\markdownLaTeXThemeLoad[2]{ - \def\@tempa{% - \def\markdownLaTeXThemeName{#2} - \seq_gput_right:NV - \g_@@_latex_themes_seq - \markdownLaTeXThemeName - \RequirePackage{#1} - \seq_pop_right:NN - \g_@@_latex_themes_seq - \l_tmpa_tl - \seq_get_right:NN - \g_@@_latex_themes_seq - \l_tmpa_tl - \exp_args:NNV - \def - \markdownLaTeXThemeName - \l_tmpa_tl} - \ifmarkdownLaTeXLoaded - \@tempa - \else - \exp_args:No + \ifmarkdownLaTeXLoaded + \ifx\@onlypreamble\@notprerr +% \end{macrocode} +% \begin{markdown} +% +% If both conditions are true does, end with an error, since we cannot load +% \LaTeX{} themes after the preamble. Otherwise, try loading a plain \TeX{} +% theme instead. +% +% \end{markdown} +% \begin{macrocode} + \file_if_exist:nTF + { markdown theme #2.sty } + { + \msg_error:nnn + { markdown } + { latex-theme-after-preamble } + { #1 } + } + { + \@@_plain_tex_load_theme:nn + { #1 } + { #2 } + } + \else +% \end{macrocode} +% \begin{markdown} +% +% If the Markdown package has already been loaded but we are still in the +% preamble, load a \LaTeX{} theme if it exists or load a plain \TeX{} theme +% otherwise. +% +% \end{markdown} +% \begin{macrocode} + \file_if_exist:nTF + { markdown theme #2.sty } + { + \msg_info:nnn + { markdown } + { loading-latex-theme } + { #1 } + \RequirePackage + { markdown theme #2 } + } + { + \@@_plain_tex_load_theme:nn + { #1 } + { #2 } + } + \fi + \else +% \end{macrocode} +% \begin{markdown} +% +% If the Markdown package has not yet been loaded, postpone the loading until +% the Markdown package has finished loading. +% +% \end{markdown} +% \begin{macrocode} + \msg_info:nnn + { markdown } + { theme-loading-postponed } + { #1 } \AtEndOfPackage - { \@tempa } - \fi} + { + \@@_load_theme:nn + { #1 } + { #2 } + } + \fi + } +\msg_new:nnn + { markdown } + { theme-loading-postponed } + { + Postponing~loading~Markdown~theme~#1~until~ + Markdown~package~has~finished~loading + } +\msg_new:nnn + { markdown } + { loading-latex-theme } + { Loading~LaTeX~Markdown~theme~#1 } +\cs_generate_variant:Nn + \msg_new:nnnn + { nnVV } +\tl_set:Nn + \l_tmpa_tl + { Cannot~load~LaTeX~Markdown~theme~#1~after~ } +\tl_put_right:NV + \l_tmpa_tl + \c_backslash_str +\tl_put_right:Nn + \l_tmpa_tl + { begin{document} } +\tl_set:Nn + \l_tmpb_tl + { Load~Markdown~theme~#1~before~ } +\tl_put_right:NV + \l_tmpb_tl + \c_backslash_str +\tl_put_right:Nn + \l_tmpb_tl + { begin{document} } +\msg_new:nnVV + { markdown } + { latex-theme-after-preamble } + \l_tmpa_tl + \l_tmpb_tl \ExplSyntaxOff % \end{macrocode} % \begin{markdown} @@ -29600,7 +33965,7 @@ end % \end{markdown} % \iffalse %</latex> -%<*latex-themes-witiko-dot> +%<*themes-witiko-dot> % \fi % \begin{macrocode} \markdownSetup{fencedCode}% @@ -29632,7 +33997,7 @@ end % % \end{markdown} % \begin{macrocode} -\renewcommand\markdownRendererInputFencedCodePrototype[2]{% +\renewcommand\markdownRendererInputFencedCodePrototype[3]{% \def\next##1 ##2\relax{% \ifthenelse{\equal{##1}{dot}}{% \markdownIfOption{frozenCache}{}{% @@ -29659,14 +34024,14 @@ end % \end{markdown} % \begin{macrocode} }{% - \markdown@witiko@dot@oldRendererInputFencedCodePrototype{#1}{#2}% + \markdown@witiko@dot@oldRendererInputFencedCodePrototype{#1}{#2}{#3}% }% }% \next#2 \relax}% % \end{macrocode} % \iffalse -%</latex-themes-witiko-dot> -%<*latex-themes-witiko-graphicx-http> +%</themes-witiko-dot> +%<*themes-witiko-graphicx-http> % \fi % \par % \begin{markdown} @@ -29802,152 +34167,32 @@ end \endgroup % \end{macrocode} % \iffalse -%</latex-themes-witiko-graphicx-http> -%<*latex-themes-witiko-tilde> +%</themes-witiko-graphicx-http> +%<*themes-witiko-markdown-defaults-latex> % \fi % \par % \begin{markdown} % -% The `witiko/tilde` theme redefines the tilde token renderer prototype, -% so that it expands to a non-breaking space: +% The `witiko/markdown/defaults` \LaTeX{} theme provides default definitions +% for token renderer prototypes. First, the \LaTeX{} theme loads the plain +% \TeX{} theme with the default definitions for plain \TeX{}: % % \end{markdown} % \begin{macrocode} -\renewcommand\markdownRendererTildePrototype{~}% +\markdownLoadPlainTeXTheme % \end{macrocode} -% \iffalse -%</latex-themes-witiko-tilde> -%<*latex> -% \fi % \par % \begin{markdown} % -%### Options -% The supplied package options are processed using the \mref{markdownSetup} macro. -% -% \end{markdown} -% \begin{macrocode} -\DeclareOption*{% - \expandafter\markdownSetup\expandafter{\CurrentOption}}% -\ProcessOptions\relax -% \end{macrocode} -% \begin{markdown} -% -% After processing the options, activate the `jekyllDataRenderes`, `renderers`, -% `rendererPrototypes`, and `code` keys. -% -% \end{markdown} -% \begin{macrocode} -\ExplSyntaxOn -\keys_define:nn - { markdown/latex-options } - { - renderers .code:n = { - \keys_set:nn - { markdown/latex-options/renderers } - { #1 } - }, - } -\@@_with_various_cases:nn - { rendererPrototypes } - { - \keys_define:nn - { markdown/latex-options } - { - #1 .code:n = { - \keys_set:nn - { markdown/latex-options/renderer-prototypes } - { ##1 } - }, - } - } -% \end{macrocode} -% \begin{markdown} -% -% The `code` key is used to immediately expand and execute code, which can be -% especially useful in \LaTeX{} snippets. -% -% \end{markdown} -% \begin{macrocode} -\keys_define:nn - { markdown/latex-options } - { - code .code:n = { #1 }, - } -% \end{macrocode} -% \begin{markdown} -% -% The `jekyllDataRenderers` key can be used as a syntactic sugar for setting -% the `markdown/jekyllData` key--values (see Section <#sec:expl3yamlmetadata>) -% without using the expl3 language. -% -% \end{markdown} -% \begin{macrocode} -\@@_with_various_cases:nn - { jekyllDataRenderers } - { - \keys_define:nn - { markdown/latex-options } - { - #1 .code:n = { - \tl_set:Nn - \l_tmpa_tl - { ##1 } -% \end{macrocode} -% \begin{markdown} -% -% To ensure that keys containing forward slashes get passed correctly, we -% replace all forward slashes in the input with backslash tokens with category -% code letter and then undo the replacement. This means that if any unbraced -% backslash tokens with category code letter exist in the input, they will be -% replaced with forward slashes. However, this should be extremely rare. -% -% \end{markdown} -% \begin{macrocode} - \tl_replace_all:NnV - \l_tmpa_tl - { / } - \c_backslash_str - \keys_set:nV - { markdown/latex-options/jekyll-data-renderers } - \l_tmpa_tl - }, - } - } -\keys_define:nn - { markdown/latex-options/jekyll-data-renderers } - { - unknown .code:n = { - \tl_set_eq:NN - \l_tmpa_tl - \l_keys_key_str - \tl_replace_all:NVn - \l_tmpa_tl - \c_backslash_str - { / } - \tl_put_right:Nn - \l_tmpa_tl - { - .code:n = { #1 } - } - \keys_define:nV - { markdown/jekyllData } - \l_tmpa_tl - } - } -\cs_generate_variant:Nn - \keys_define:nn - { nV } -\ExplSyntaxOff -% \end{macrocode} -% \par -% \begin{markdown} +% Next, the \LaTeX{} theme overrides some of the plain \TeX{} definitions. +% See Section <#sec:latex-token-renderer-prototypes> for the actual +% definitions. % -%### Token Renderer Prototypes {#latex-default-renderer-prototypes} +%### Token Renderer Prototypes {#latex-token-renderer-prototypes} % -% The following configuration should be considered placeholder. If the `plain` -% package option has been enabled (see Section <#sec:latexplain>), none of -% it will take effect. +% The following configuration should be considered placeholder. If the option +% `plain` has been enabled (see Section <#sec:plain>), none of the definitions +% will take effect. % \end{markdown} % \begin{macrocode} \markdownIfOption{plain}{\iffalse}{\iftrue} @@ -29991,7 +34236,7 @@ end { LowerRoman } { \int_to_roman:n { #2 } } { UpperRoman } { \int_to_Roman:n { #2 } } { LowerAlpha } { \int_to_alph:n { #2 } } - { UpperAlpha } { \int_to_alph:n { #2 } } + { UpperAlpha } { \int_to_Alph:n { #2 } } } } \cs_new:Nn @@ -30057,16 +34302,26 @@ end \tl_set:Nn \l_@@_latex_fancy_list_item_label_delimiter_style_tl { #2 } - \tl_set:Nn - \l_tmpa_tl - { \begin{enumerate}[ } - \tl_put_right:Nx - \l_tmpa_tl - { \@@_latex_paralist_style:nn { #1 } { #2 } } - \tl_put_right:Nn + \@@_if_option:nTF + { startNumber } + { + \tl_set:Nn + \l_tmpa_tl + { \begin{enumerate} } + } + { + \tl_set:Nn + \l_tmpa_tl + { \begin{enumerate}[ } + \tl_put_right:Nx + \l_tmpa_tl + { \@@_latex_paralist_style:nn { #1 } { #2 } } + \tl_put_right:Nn + \l_tmpa_tl + { ] } + } + \tl_use:N \l_tmpa_tl - { ] } - \l_tmpa_tl }, fancyOlEnd = { \end{enumerate} @@ -30104,15 +34359,27 @@ end { \plpartopsep=\partopsep \pltopsep=\topsep - \begin{compactenum}[ } - \tl_put_right:Nx - \l_tmpa_tl - { \@@_latex_paralist_style:nn { #1 } { #2 } } - \tl_put_right:Nn + \@@_if_option:nTF + { startNumber } + { + \tl_put_right:Nn + \l_tmpa_tl + { \begin{compactenum} } + } + { + \tl_put_right:Nn + \l_tmpa_tl + { \begin{compactenum}[ } + \tl_put_right:Nx + \l_tmpa_tl + { \@@_latex_paralist_style:nn { #1 } { #2 } } + \tl_put_right:Nn + \l_tmpa_tl + { ] } + } + \tl_use:N \l_tmpa_tl - { ] } - \l_tmpa_tl }, fancyOlEndTight = { \end{compactenum} @@ -30250,7 +34517,7 @@ end image = {% \begin{figure}% \begin{center}% - \includegraphics{#3}% + \includegraphics[alt={#1}]{#3}% \end{center}% \ifx\empty#4\empty\else \caption{#4}% @@ -30267,43 +34534,44 @@ end dlEnd = {\end{description}}, emphasis = {\emph{#1}}, tickedBox = {$\boxtimes$}, - halfTickedBox = {$\boxdot$}, + halfTickedBox = {$\boxdot$}}} % \end{macrocode} % \par % \begin{markdown} % -% If identifier attributes appear at the beginning of a section, we make the -% next heading produce the `\label` macro. +% If identifier attributes appear at the beginning of a section, we make them +% produce the `\label` macro. % % \end{markdown} % \begin{macrocode} - headerAttributeContextBegin = {% - \markdownSetup{ - rendererPrototypes = { - attributeIdentifier = {% - \begingroup - \def\next####1{% - \def####1########1{% - \endgroup - ####1{########1}% - \label{##1}% - }% - }% - \next\markdownRendererHeadingOne - \next\markdownRendererHeadingTwo - \next\markdownRendererHeadingThree - \next\markdownRendererHeadingFour - \next\markdownRendererHeadingFive - \next\markdownRendererHeadingSix - }, - }, - }% +\ExplSyntaxOn +\seq_new:N \l_@@_header_identifiers_seq +\markdownSetup{ + rendererPrototypes = { + headerAttributeContextBegin = { + \seq_clear:N \l_@@_header_identifiers_seq + \markdownSetup + { + renderers = { + attributeIdentifier = { + \seq_put_right:Nn + \l_@@_header_identifiers_seq + { ##1 } + }, + }, + } + }, + headerAttributeContextEnd = { + \seq_map_inline:Nn + \l_@@_header_identifiers_seq + { \label { ##1 } } + }, }, - headerAttributeContextEnd = {}, +} +\ExplSyntaxOff +\markdownSetup{rendererPrototypes={ superscript = {\textsuperscript{#1}}, subscript = {\textsubscript{#1}}, - displayMath = {\begin{displaymath}#1\end{displaymath}}, - inlineMath = {\begin{math}#1\end{math}}, blockQuoteBegin = {\begin{quotation}}, blockQuoteEnd = {\end{quotation}}, inputVerbatim = {\VerbatimInput{#1}}, @@ -30322,7 +34590,7 @@ end \RequirePackage{ltxcmds} \ExplSyntaxOn \cs_gset:Npn - \markdownRendererInputFencedCodePrototype#1#2 + \markdownRendererInputFencedCodePrototype#1#2#3 { \tl_if_empty:nTF { #2 } @@ -30382,7 +34650,7 @@ end % % \end{markdown} % \begin{macrocode} - { \markdownRendererInputFencedCode{#1}{} } + { \markdownRendererInputFencedCode{#1}{}{} } } } } @@ -30419,16 +34687,16 @@ end headingOne = {\section{#1}}, headingTwo = {\subsection{#1}}, headingThree = {\subsubsection{#1}}, - headingFour = {\paragraph{#1}\leavevmode}, - headingFive = {\subparagraph{#1}\leavevmode}}} + headingFour = {\paragraph{#1}}, + headingFive = {\subparagraph{#1}}}} }{% \markdownSetup{rendererPrototypes = { headingOne = {\chapter{#1}}, headingTwo = {\section{#1}}, headingThree = {\subsection{#1}}, headingFour = {\subsubsection{#1}}, - headingFive = {\paragraph{#1}\leavevmode}, - headingSix = {\subparagraph{#1}\leavevmode}}} + headingFive = {\paragraph{#1}}, + headingSix = {\subparagraph{#1}}}} }% % \end{macrocode} % \par @@ -30966,25 +35234,10 @@ end % % \end{markdown} % \begin{macrocode} -% TODO: Remove the command definition in TeX Live 2021. -\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} \markdownSetup{ rendererPrototypes = { jekyllDataEnd = { -% TODO: Remove the else branch in TeX Live 2021. - \IfFormatAtLeastTF - { 2020-10-01 } - { \AddToHook{begindocument/end}{\maketitle} } - { - \ifx\@onlypreamble\@notprerr - % We are in the document - \maketitle - \else - % We are in the preamble - \RequirePackage{etoolbox} - \AfterEndPreamble{\maketitle} - \fi - } + \AddToHook{begindocument/end}{\maketitle} }, }, } @@ -31013,18 +35266,18 @@ end % \par % \begin{markdown} % -%#### Strike-Through -% If the \Opt{strikeThrough} option is enabled, we will load the -% \pkg{soulutf8} package and use it to implement strike-throughs. +%#### Marked Text +% If the \Opt{mark} option is enabled, we will load the \pkg{soulutf8} package +% and use it to implement marked text. % % \end{markdown} % \begin{macrocode} -\markdownIfOption{strikeThrough}{% +\markdownIfOption{mark}{% \RequirePackage{soulutf8}% \markdownSetup{ rendererPrototypes = { - strikeThrough = {% - \st{#1}% + mark = {% + \hl{#1}% }, } } @@ -31120,8 +35373,12 @@ end } } \ExplSyntaxOff -\fi % Closes `\markdownIfOption{Plain}{\iffalse}{iftrue}` +\fi % Closes `\markdownIfOption{plain}{\iffalse}{\iftrue}` % \end{macrocode} +% \iffalse +%</themes-witiko-markdown-defaults-latex> +%<*latex> +% \fi % \par % \begin{markdown} % @@ -31186,7 +35443,7 @@ end % \begin{markdown} % %### Typesetting Markdown -% The \mref{inputmarkdown} is defined to accept an optional argument with +% The \mref{inputmarkdown} macro is defined to accept an optional argument with % options recognized by the \Hologo{ConTeXt} interface (see Section % <#sec:context-options>). % @@ -31198,7 +35455,7 @@ end \long\def\doinputmarkdown[#1]#2{% \begingroup \iffirstargument - \setupmarkdown{#1}% + \setupmarkdown[#1]% \fi \markdownInput{#2}% \endgroup}% @@ -31220,48 +35477,108 @@ end % % \end{markdown} % \begin{macrocode} -\ifx\startluacode\undefined % MkII - \begingroup - \catcode`\|=0% - \catcode`\\=12% - |gdef|startmarkdown{% - |markdownReadAndConvert{\stopmarkdown}% - {|stopmarkdown}}% - |gdef|stopmarkdown{% - |markdownEnd}% - |endgroup -\else % MkIV - \startluacode - document.markdown_buffering = false - local function preserve_trailing_spaces(line) - if document.markdown_buffering then - line = line:gsub("[ \t][ \t]$", "\t\t") - end - return line +\startluacode + document.markdown_buffering = false + local function preserve_trailing_spaces(line) + if document.markdown_buffering then + line = line:gsub("[ \t][ \t]$", "\t\t") end - resolvers.installinputlinehandler(preserve_trailing_spaces) - \stopluacode - \begingroup - \catcode`\|=0% - \catcode`\\=12% - |gdef|startmarkdown{% - |ctxlua{document.markdown_buffering = true}% - |markdownReadAndConvert{\stopmarkdown}% - {|stopmarkdown}}% - |gdef|stopmarkdown{% - |ctxlua{document.markdown_buffering = false}% - |markdownEnd}% - |endgroup -\fi + return line + end + resolvers.installinputlinehandler(preserve_trailing_spaces) +\stopluacode +\begingroup + \catcode`\|=0% + \catcode`\\=12% + |gdef|startmarkdown{% + |ctxlua{document.markdown_buffering = true}% + |markdownReadAndConvert{\stopmarkdown}% + {|stopmarkdown}}% + |gdef|stopmarkdown{% + |ctxlua{document.markdown_buffering = false}% + |markdownEnd}% +|endgroup % \end{macrocode} % \par % \begin{markdown} % -%### Token Renderer Prototypes -% The following configuration should be considered placeholder. +%### Themes {#context-themes-implementation} +% +% This section overrides the plain \TeX{} implementation of the theme-loading +% mechanism from Section <#sec:themes-implementation>. Futhermore, this section +% also implements the built-in \Hologo{ConTeXt} themes provided with the +% Markdown package. +% +% \end{markdown} +% \begin{macrocode} +\ExplSyntaxOn +\cs_gset:Nn + \@@_load_theme:nn + { +% \end{macrocode} +% \par +% \begin{markdown} +% +% Determine whether a file named `t-markdowntheme`\meta{munged theme +% name}`.tex` exists. If it does, load it. Otherwise, try loading a plain +% \TeX{} theme instead. % % \end{markdown} % \begin{macrocode} + \file_if_exist:nTF + { t - markdown theme #2.tex } + { + \msg_info:nnn + { markdown } + { loading-context-theme } + { #1 } + \usemodule + [ t ] + [ markdown theme #2 ] + } + { + \@@_plain_tex_load_theme:nn + { #1 } + { #2 } + } + } +\msg_new:nnn + { markdown } + { loading-context-theme } + { Loading~ConTeXt~Markdown~theme~#1 } +\ExplSyntaxOff +% \end{macrocode} +% \iffalse +%</context> +%<*themes-witiko-markdown-defaults-context> +% \fi +% \par +% \begin{markdown} +% +% The `witiko/markdown/defaults` \Hologo{ConTeXt} theme provides default +% definitions for token renderer prototypes. First, the \Hologo{ConTeXt} theme +% loads the plain \TeX{} theme with the default definitions for plain \TeX{}: +% +% \end{markdown} +% \begin{macrocode} +\markdownLoadPlainTeXTheme +% \end{macrocode} +% \par +% \begin{markdown} +% +% Next, the \Hologo{ConTeXt} theme overrides some of the plain \TeX{} definitions. +% See Section <#sec:context-token-renderer-prototypes> for the actual +% definitions. +% +%### Token Renderer Prototypes {#context-token-renderer-prototypes} +% +% The following configuration should be considered placeholder. If the option +% `plain` has been enabled (see Section <#sec:plain>), none of the definitions +% will take effect. +% +% \end{markdown} +% \begin{macrocode} +\markdownIfOption{plain}{\iffalse}{\iftrue} \def\markdownRendererHardLineBreakPrototype{\blank}% \def\markdownRendererLeftBracePrototype{\textbraceleft}% \def\markdownRendererRightBracePrototype{\textbraceright}% @@ -31356,7 +35673,7 @@ end % \begin{macrocode} \ExplSyntaxOn \cs_gset:Npn - \markdownRendererInputFencedCodePrototype#1#2 + \markdownRendererInputFencedCodePrototype#1#2#3 { \tl_if_empty:nTF { #2 } @@ -31416,7 +35733,6 @@ end \def\markdownRendererSuperscriptPrototype#1{\high{#1}} \def\markdownRendererSubscriptPrototype#1{\low{#1}} \def\markdownRendererDisplayMathPrototype#1{\startformula#1\stopformula}% -\def\markdownRendererInlineMathPrototype#1{$#1$}% % \end{macrocode} % \par % \begin{markdown} @@ -31544,8 +35860,30 @@ end \cs_gset_eq:NN \markdownRendererInputRawBlockPrototype \markdownRendererInputRawInlinePrototype +\fi % Closes `\markdownIfOption{plain}{\iffalse}{\iftrue}` \ExplSyntaxOff -\stopmodule\protect +\stopmodule +\protect +% \end{macrocode} +% \iffalse +%</themes-witiko-markdown-defaults-context> +%<*context> +% \fi +% \par +% \begin{markdown} +% +% At the end of the \Hologo{ConTeXt} module, we load the +% `witiko/markdown/defaults` \Hologo{ConTeXt} theme with the default +% definitions for token renderer prototypes unless the option `noDefaults` +% has been enabled (see Section <#sec:plain>). +% +% \end{markdown} +% \begin{macrocode} +\markdownIfOption{noDefaults}{}{ + \setupmarkdown[theme=witiko/markdown/defaults] +} +\stopmodule +\protect % \end{macrocode} % \iffalse %</context> diff --git a/Master/texmf-dist/source/generic/markdown/markdown.ins b/Master/texmf-dist/source/generic/markdown/markdown.ins index de2f350d50f..8e777f4217c 100644 --- a/Master/texmf-dist/source/generic/markdown/markdown.ins +++ b/Master/texmf-dist/source/generic/markdown/markdown.ins @@ -9,10 +9,13 @@ \file{markdown.tex}{\from{markdown.dtx}{tex}} \file{markdown.sty}{\from{markdown.dtx}{latex}} \file{t-markdown.tex}{\from{markdown.dtx}{context}} - \file{markdownthemewitiko_dot.sty}{\from{markdown.dtx}{latex-themes-witiko-dot}} - \file{markdownthemewitiko_graphicx_http.sty}{\from{markdown.dtx}{latex-themes-witiko-graphicx-http}} - \file{markdownthemewitiko_tilde.sty}{\from{markdown.dtx}{latex-themes-witiko-tilde}} - \file{markdownthemewitiko_markdown_techdoc.sty}{\from{markdown.dtx}{latex-themes-witiko-markdown-techdoc}} + \file{markdownthemewitiko_dot.sty}{\from{markdown.dtx}{themes-witiko-dot}} + \file{markdownthemewitiko_graphicx_http.sty}{\from{markdown.dtx}{themes-witiko-graphicx-http}} + \file{markdownthemewitiko_tilde.tex}{\from{markdown.dtx}{themes-witiko-tilde}} + \file{markdownthemewitiko_markdown_defaults.tex}{\from{markdown.dtx}{themes-witiko-markdown-defaults-tex}} + \file{markdownthemewitiko_markdown_defaults.sty}{\from{markdown.dtx}{themes-witiko-markdown-defaults-latex}} + \file{t-markdownthemewitiko_markdown_defaults.tex}{\from{markdown.dtx}{themes-witiko-markdown-defaults-context}} + \file{markdownthemewitiko_markdown_techdoc.sty}{\from{markdown.dtx}{themes-witiko-markdown-techdoc}} \usepreamble\empty \usepostamble\empty \file{markdown.md}{\from{markdown.dtx}{manual}} diff --git a/Master/texmf-dist/tex/context/third/markdown/t-markdown.tex b/Master/texmf-dist/tex/context/third/markdown/t-markdown.tex index 7185b66c2c5..642d0bcd2da 100644 --- a/Master/texmf-dist/tex/context/third/markdown/t-markdown.tex +++ b/Master/texmf-dist/tex/context/third/markdown/t-markdown.tex @@ -6,7 +6,7 @@ %% %% markdown.dtx (with options: `context') %% -%% Copyright (C) 2016-2023 Vít Novotný +%% Copyright (C) 2016-2024 Vít Starý Novotný %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3c @@ -16,7 +16,7 @@ %% http://www.latex-project.org/lppl.txt %% %% This work has the LPPL maintenance status `maintained'. -%% The Current Maintainer of this work is Vít Novotný. +%% The Current Maintainer of this work is Vít Starý Novotný. %% %% Send bug reports, requests for additions and questions %% either to the GitHub issue tracker at @@ -42,11 +42,25 @@ %% %% The names of the source files used are shown above. %% +\unprotect +\ifx\ExplSyntaxOn\undefined + \input expl3-generic +\fi +\ExplSyntaxOn +\tl_const:Nn \c__markdown_option_layer_context_tl { context } +\cs_generate_variant:Nn + \tl_const:Nn + { NV } +\tl_if_exist:NF + \c__markdown_top_layer_tl + { + \tl_const:NV + \c__markdown_top_layer_tl + \c__markdown_option_layer_context_tl + } +\ExplSyntaxOff \writestatus{loading}{ConTeXt User Module / markdown}% \startmodule[markdown] -\unprotect -\def\markdownInfo#1{\writestatus{markdown}{#1.}}% -\def\markdownWarning#1{\writestatus{markdown\space warn}{#1.}}% \def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\_\do\%\do\~}% \input markdown/markdown @@ -54,39 +68,13 @@ \let\stopmarkdown\relax \let\inputmarkdown\relax \ExplSyntaxOn -\cs_new:Nn - \__markdown_setup:n - { - \keys_set:nn - { markdown/context-options } - { #1 } - } -\long\def\setupmarkdown[#1] +\cs_new:Npn + \setupmarkdown + [ #1 ] { \__markdown_setup:n { #1 } } -\ExplSyntaxOff -\ExplSyntaxOn -\cs_new:Nn \__markdown_context_define_option_commands_and_keyvals: - { - \seq_map_inline:Nn - \g__markdown_option_layers_seq - { - \seq_map_inline:cn - { g__markdown_ ##1 _options_seq } - { - \__markdown_with_various_cases:nn - { ####1 } - { - \__markdown_context_define_option_keyval:nnn - { ##1 } - { ####1 } - { ########1 } - } - } - } - } \cs_new:Nn \__markdown_caseless:N { \regex_replace_all:nnN @@ -98,47 +86,14 @@ { #1 } } \seq_gput_right:Nn \g__markdown_cases_seq { __markdown_caseless:N } -\cs_new:Nn \__markdown_context_define_option_keyval:nnn +\str_if_eq:VVT + \c__markdown_top_layer_tl + \c__markdown_option_layer_context_tl { - \prop_get:cnN - { g__markdown_ #1 _option_types_prop } - { #2 } - \l_tmpa_tl - \keys_define:nn - { markdown/context-options } - { - #3 .code:n = { - \tl_set:Nx - \l_tmpa_tl - { - \str_case:nnF - { ##1 } - { - { yes } { true } - { no } { false } - } - { ##1 } - } - \__markdown_set_option_value:nV - { #2 } - \l_tmpa_tl - }, - } - \str_if_eq:VVT - \l_tmpa_tl - \c__markdown_option_type_boolean_tl - { - \keys_define:nn - { markdown/context-options } - { - #3 .default:n = { true }, - } - } + \__markdown_define_option_commands_and_keyvals: + \__markdown_define_renderers: + \__markdown_define_renderer_prototypes: } -\cs_generate_variant:Nn - \__markdown_set_option_value:nn - { nV } -\__markdown_context_define_option_commands_and_keyvals: \ExplSyntaxOff \def\markdownMakeOther{% \count0=128\relax @@ -153,270 +108,62 @@ \long\def\doinputmarkdown[#1]#2{% \begingroup \iffirstargument - \setupmarkdown{#1}% + \setupmarkdown[#1]% \fi \markdownInput{#2}% \endgroup}% -\ifx\startluacode\undefined % MkII - \begingroup - \catcode`\|=0% - \catcode`\\=12% - |gdef|startmarkdown{% - |markdownReadAndConvert{\stopmarkdown}% - {|stopmarkdown}}% - |gdef|stopmarkdown{% - |markdownEnd}% - |endgroup -\else % MkIV - \startluacode - document.markdown_buffering = false - local function preserve_trailing_spaces(line) - if document.markdown_buffering then - line = line:gsub("[ \t][ \t]$", "\t\t") - end - return line +\startluacode + document.markdown_buffering = false + local function preserve_trailing_spaces(line) + if document.markdown_buffering then + line = line:gsub("[ \t][ \t]$", "\t\t") end - resolvers.installinputlinehandler(preserve_trailing_spaces) - \stopluacode - \begingroup - \catcode`\|=0% - \catcode`\\=12% - |gdef|startmarkdown{% - |ctxlua{document.markdown_buffering = true}% - |markdownReadAndConvert{\stopmarkdown}% - {|stopmarkdown}}% - |gdef|stopmarkdown{% - |ctxlua{document.markdown_buffering = false}% - |markdownEnd}% - |endgroup -\fi -\def\markdownRendererHardLineBreakPrototype{\blank}% -\def\markdownRendererLeftBracePrototype{\textbraceleft}% -\def\markdownRendererRightBracePrototype{\textbraceright}% -\def\markdownRendererDollarSignPrototype{\textdollar}% -\def\markdownRendererPercentSignPrototype{\percent}% -\def\markdownRendererUnderscorePrototype{\textunderscore}% -\def\markdownRendererCircumflexPrototype{\textcircumflex}% -\def\markdownRendererBackslashPrototype{\textbackslash}% -\def\markdownRendererTildePrototype{\textasciitilde}% -\def\markdownRendererPipePrototype{\char`|}% -\def\markdownRendererLinkPrototype#1#2#3#4{% - \useURL[#1][#3][][#4]#1\footnote[#1]{\ifx\empty#4\empty\else#4: - \fi\tt<\hyphenatedurl{#3}>}}% -\usemodule[database] -\defineseparatedlist - [MarkdownConTeXtCSV] - [separator={,}, - before=\bTABLE,after=\eTABLE, - first=\bTR,last=\eTR, - left=\bTD,right=\eTD] -\def\markdownConTeXtCSV{csv} -\def\markdownRendererContentBlockPrototype#1#2#3#4{% - \def\markdownConTeXtCSV@arg{#1}% - \ifx\markdownConTeXtCSV@arg\markdownConTeXtCSV - \placetable[][tab:#1]{#4}{% - \processseparatedfile[MarkdownConTeXtCSV][#3]}% - \else - \markdownInput{#3}% - \fi}% -\def\markdownRendererImagePrototype#1#2#3#4{% - \placefigure[][]{#4}{\externalfigure[#3]}}% -\def\markdownRendererUlBeginPrototype{\startitemize}% -\def\markdownRendererUlBeginTightPrototype{\startitemize[packed]}% -\def\markdownRendererUlItemPrototype{\item}% -\def\markdownRendererUlEndPrototype{\stopitemize}% -\def\markdownRendererUlEndTightPrototype{\stopitemize}% -\def\markdownRendererOlBeginPrototype{\startitemize[n]}% -\def\markdownRendererOlBeginTightPrototype{\startitemize[packed,n]}% -\def\markdownRendererOlItemPrototype{\item}% -\def\markdownRendererOlItemWithNumberPrototype#1{\sym{#1.}}% -\def\markdownRendererOlEndPrototype{\stopitemize}% -\def\markdownRendererOlEndTightPrototype{\stopitemize}% -\definedescription - [MarkdownConTeXtDlItemPrototype] - [location=hanging, - margin=standard, - headstyle=bold]% -\definestartstop - [MarkdownConTeXtDlPrototype] - [before=\blank, - after=\blank]% -\definestartstop - [MarkdownConTeXtDlTightPrototype] - [before=\blank\startpacked, - after=\stoppacked\blank]% -\def\markdownRendererDlBeginPrototype{% - \startMarkdownConTeXtDlPrototype}% -\def\markdownRendererDlBeginTightPrototype{% - \startMarkdownConTeXtDlTightPrototype}% -\def\markdownRendererDlItemPrototype#1{% - \startMarkdownConTeXtDlItemPrototype{#1}}% -\def\markdownRendererDlItemEndPrototype{% - \stopMarkdownConTeXtDlItemPrototype}% -\def\markdownRendererDlEndPrototype{% - \stopMarkdownConTeXtDlPrototype}% -\def\markdownRendererDlEndTightPrototype{% - \stopMarkdownConTeXtDlTightPrototype}% -\def\markdownRendererEmphasisPrototype#1{{\em#1}}% -\def\markdownRendererStrongEmphasisPrototype#1{{\bf#1}}% -\def\markdownRendererBlockQuoteBeginPrototype{\startquotation}% -\def\markdownRendererBlockQuoteEndPrototype{\stopquotation}% -\def\markdownRendererLineBlockBeginPrototype{% - \begingroup - \def\markdownRendererHardLineBreak{ - }% - \startlines -}% -\def\markdownRendererLineBlockEndPrototype{% - \stoplines - \endgroup -}% -\def\markdownRendererInputVerbatimPrototype#1{\typefile{#1}}% -\ExplSyntaxOn -\cs_gset:Npn - \markdownRendererInputFencedCodePrototype#1#2 - { - \tl_if_empty:nTF - { #2 } - { \markdownRendererInputVerbatim{#1} } - { - \regex_extract_once:nnN - { \w* } - { #2 } - \l_tmpa_seq - \seq_pop_left:NN - \l_tmpa_seq - \l_tmpa_tl - \typefile[\l_tmpa_tl][]{#1} - } - } -\ExplSyntaxOff -\def\markdownRendererHeadingOnePrototype#1{\chapter{#1}}% -\def\markdownRendererHeadingTwoPrototype#1{\section{#1}}% -\def\markdownRendererHeadingThreePrototype#1{\subsection{#1}}% -\def\markdownRendererHeadingFourPrototype#1{\subsubsection{#1}}% -\def\markdownRendererHeadingFivePrototype#1{\subsubsubsection{#1}}% -\def\markdownRendererHeadingSixPrototype#1{\subsubsubsubsection{#1}}% -\def\markdownRendererThematicBreakPrototype{% - \blackrule[height=1pt, width=\hsize]}% -\def\markdownRendererNotePrototype#1{\footnote{#1}}% -\def\markdownRendererTickedBoxPrototype{$\boxtimes$} -\def\markdownRendererHalfTickedBoxPrototype{$\boxdot$} -\def\markdownRendererUntickedBoxPrototype{$\square$} -\def\markdownRendererStrikeThroughPrototype#1{\overstrikes{#1}} -\def\markdownRendererSuperscriptPrototype#1{\high{#1}} -\def\markdownRendererSubscriptPrototype#1{\low{#1}} -\def\markdownRendererDisplayMathPrototype#1{\startformula#1\stopformula}% -\def\markdownRendererInlineMathPrototype#1{$#1$}% -\newcount\markdownConTeXtRowCounter -\newcount\markdownConTeXtRowTotal -\newcount\markdownConTeXtColumnCounter -\newcount\markdownConTeXtColumnTotal -\newtoks\markdownConTeXtTable -\newtoks\markdownConTeXtTableFloat -\def\markdownRendererTablePrototype#1#2#3{% - \markdownConTeXtTable={}% - \ifx\empty#1\empty - \markdownConTeXtTableFloat={% - \the\markdownConTeXtTable}% - \else - \markdownConTeXtTableFloat={% - \placetable{#1}{\the\markdownConTeXtTable}}% - \fi - \begingroup - \setupTABLE[r][each][topframe=off, bottomframe=off, leftframe=off, rightframe=off] - \setupTABLE[c][each][topframe=off, bottomframe=off, leftframe=off, rightframe=off] - \setupTABLE[r][1][topframe=on, bottomframe=on] - \setupTABLE[r][#1][bottomframe=on] - \markdownConTeXtRowCounter=0% - \markdownConTeXtRowTotal=#2% - \markdownConTeXtColumnTotal=#3% - \markdownConTeXtRenderTableRow} -\def\markdownConTeXtRenderTableRow#1{% - \markdownConTeXtColumnCounter=0% - \ifnum\markdownConTeXtRowCounter=0\relax - \markdownConTeXtReadAlignments#1% - \markdownConTeXtTable={\bTABLE}% - \else - \markdownConTeXtTable=\expandafter{% - \the\markdownConTeXtTable\bTR}% - \markdownConTeXtRenderTableCell#1% - \markdownConTeXtTable=\expandafter{% - \the\markdownConTeXtTable\eTR}% - \fi - \advance\markdownConTeXtRowCounter by 1\relax - \ifnum\markdownConTeXtRowCounter>\markdownConTeXtRowTotal\relax - \markdownConTeXtTable=\expandafter{% - \the\markdownConTeXtTable\eTABLE}% - \the\markdownConTeXtTableFloat - \endgroup - \expandafter\gobbleoneargument - \fi\markdownConTeXtRenderTableRow} -\def\markdownConTeXtReadAlignments#1{% - \advance\markdownConTeXtColumnCounter by 1\relax - \if#1d% - \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=right] - \fi\if#1l% - \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=right] - \fi\if#1c% - \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=middle] - \fi\if#1r% - \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=left] - \fi - \ifnum\markdownConTeXtColumnCounter<\markdownConTeXtColumnTotal\relax\else - \expandafter\gobbleoneargument - \fi\markdownConTeXtReadAlignments} -\def\markdownConTeXtRenderTableCell#1{% - \advance\markdownConTeXtColumnCounter by 1\relax - \markdownConTeXtTable=\expandafter{% - \the\markdownConTeXtTable\bTD#1\eTD}% - \ifnum\markdownConTeXtColumnCounter<\markdownConTeXtColumnTotal\relax\else - \expandafter\gobbleoneargument - \fi\markdownConTeXtRenderTableCell} + return line + end + resolvers.installinputlinehandler(preserve_trailing_spaces) +\stopluacode +\begingroup + \catcode`\|=0% + \catcode`\\=12% + |gdef|startmarkdown{% + |ctxlua{document.markdown_buffering = true}% + |markdownReadAndConvert{\stopmarkdown}% + {|stopmarkdown}}% + |gdef|stopmarkdown{% + |ctxlua{document.markdown_buffering = false}% + |markdownEnd}% +|endgroup \ExplSyntaxOn -\cs_gset:Npn - \markdownRendererInputRawInlinePrototype#1#2 +\cs_gset:Nn + \__markdown_load_theme:nn { - \str_case:nnF - { #2 } - { - { latex } - { - \__markdown_plain_tex_default_input_raw_inline_renderer_prototype:nn - { #1 } - { context } - } - } + \file_if_exist:nTF + { t - markdown theme #2.tex } { - \__markdown_plain_tex_default_input_raw_inline_renderer_prototype:nn + \msg_info:nnn + { markdown } + { loading-context-theme } { #1 } - { #2 } - } - } -\cs_gset:Npn - \markdownRendererInputRawBlockPrototype#1#2 - { - \str_case:nnF - { #2 } - { - { context } - { - \__markdown_plain_tex_default_input_raw_block_renderer_prototype:nn - { #1 } - { tex } - } + \usemodule + [ t ] + [ markdown theme #2 ] } { - \__markdown_plain_tex_default_input_raw_block_renderer_prototype:nn + \__markdown_plain_tex_load_theme:nn { #1 } { #2 } } } -\cs_gset_eq:NN - \markdownRendererInputRawBlockPrototype - \markdownRendererInputRawInlinePrototype +\msg_new:nnn + { markdown } + { loading-context-theme } + { Loading~ConTeXt~Markdown~theme~#1 } \ExplSyntaxOff -\stopmodule\protect +\markdownIfOption{noDefaults}{}{ + \setupmarkdown[theme=witiko/markdown/defaults] +} +\stopmodule +\protect \endinput %% %% End of file `t-markdown.tex'. diff --git a/Master/texmf-dist/tex/context/third/markdown/t-markdownthemewitiko_markdown_defaults.tex b/Master/texmf-dist/tex/context/third/markdown/t-markdownthemewitiko_markdown_defaults.tex new file mode 100644 index 00000000000..35fd80f89cd --- /dev/null +++ b/Master/texmf-dist/tex/context/third/markdown/t-markdownthemewitiko_markdown_defaults.tex @@ -0,0 +1,279 @@ +%% +%% This is file `t-markdownthemewitiko_markdown_defaults.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% markdown.dtx (with options: `themes-witiko-markdown-defaults-context') +%% +%% Copyright (C) 2016-2024 Vít Starý Novotný +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% +%% http://www.latex-project.org/lppl.txt +%% +%% This work has the LPPL maintenance status `maintained'. +%% The Current Maintainer of this work is Vít Starý Novotný. +%% +%% Send bug reports, requests for additions and questions +%% either to the GitHub issue tracker at +%% +%% https://github.com/Witiko/markdown/issues +%% +%% or to the e-mail address <witiko@mail.muni.cz>. +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\startmodule[markdownthemewitiko_markdown_defaults] +\unprotect +\markdownLoadPlainTeXTheme +\markdownIfOption{plain}{\iffalse}{\iftrue} +\def\markdownRendererHardLineBreakPrototype{\blank}% +\def\markdownRendererLeftBracePrototype{\textbraceleft}% +\def\markdownRendererRightBracePrototype{\textbraceright}% +\def\markdownRendererDollarSignPrototype{\textdollar}% +\def\markdownRendererPercentSignPrototype{\percent}% +\def\markdownRendererUnderscorePrototype{\textunderscore}% +\def\markdownRendererCircumflexPrototype{\textcircumflex}% +\def\markdownRendererBackslashPrototype{\textbackslash}% +\def\markdownRendererTildePrototype{\textasciitilde}% +\def\markdownRendererPipePrototype{\char`|}% +\def\markdownRendererLinkPrototype#1#2#3#4{% + \useURL[#1][#3][][#4]#1\footnote[#1]{\ifx\empty#4\empty\else#4: + \fi\tt<\hyphenatedurl{#3}>}}% +\usemodule[database] +\defineseparatedlist + [MarkdownConTeXtCSV] + [separator={,}, + before=\bTABLE,after=\eTABLE, + first=\bTR,last=\eTR, + left=\bTD,right=\eTD] +\def\markdownConTeXtCSV{csv} +\def\markdownRendererContentBlockPrototype#1#2#3#4{% + \def\markdownConTeXtCSV@arg{#1}% + \ifx\markdownConTeXtCSV@arg\markdownConTeXtCSV + \placetable[][tab:#1]{#4}{% + \processseparatedfile[MarkdownConTeXtCSV][#3]}% + \else + \markdownInput{#3}% + \fi}% +\def\markdownRendererImagePrototype#1#2#3#4{% + \placefigure[][]{#4}{\externalfigure[#3]}}% +\def\markdownRendererUlBeginPrototype{\startitemize}% +\def\markdownRendererUlBeginTightPrototype{\startitemize[packed]}% +\def\markdownRendererUlItemPrototype{\item}% +\def\markdownRendererUlEndPrototype{\stopitemize}% +\def\markdownRendererUlEndTightPrototype{\stopitemize}% +\def\markdownRendererOlBeginPrototype{\startitemize[n]}% +\def\markdownRendererOlBeginTightPrototype{\startitemize[packed,n]}% +\def\markdownRendererOlItemPrototype{\item}% +\def\markdownRendererOlItemWithNumberPrototype#1{\sym{#1.}}% +\def\markdownRendererOlEndPrototype{\stopitemize}% +\def\markdownRendererOlEndTightPrototype{\stopitemize}% +\definedescription + [MarkdownConTeXtDlItemPrototype] + [location=hanging, + margin=standard, + headstyle=bold]% +\definestartstop + [MarkdownConTeXtDlPrototype] + [before=\blank, + after=\blank]% +\definestartstop + [MarkdownConTeXtDlTightPrototype] + [before=\blank\startpacked, + after=\stoppacked\blank]% +\def\markdownRendererDlBeginPrototype{% + \startMarkdownConTeXtDlPrototype}% +\def\markdownRendererDlBeginTightPrototype{% + \startMarkdownConTeXtDlTightPrototype}% +\def\markdownRendererDlItemPrototype#1{% + \startMarkdownConTeXtDlItemPrototype{#1}}% +\def\markdownRendererDlItemEndPrototype{% + \stopMarkdownConTeXtDlItemPrototype}% +\def\markdownRendererDlEndPrototype{% + \stopMarkdownConTeXtDlPrototype}% +\def\markdownRendererDlEndTightPrototype{% + \stopMarkdownConTeXtDlTightPrototype}% +\def\markdownRendererEmphasisPrototype#1{{\em#1}}% +\def\markdownRendererStrongEmphasisPrototype#1{{\bf#1}}% +\def\markdownRendererBlockQuoteBeginPrototype{\startquotation}% +\def\markdownRendererBlockQuoteEndPrototype{\stopquotation}% +\def\markdownRendererLineBlockBeginPrototype{% + \begingroup + \def\markdownRendererHardLineBreak{ + }% + \startlines +}% +\def\markdownRendererLineBlockEndPrototype{% + \stoplines + \endgroup +}% +\def\markdownRendererInputVerbatimPrototype#1{\typefile{#1}}% +\ExplSyntaxOn +\cs_gset:Npn + \markdownRendererInputFencedCodePrototype#1#2#3 + { + \tl_if_empty:nTF + { #2 } + { \markdownRendererInputVerbatim{#1} } + { + \regex_extract_once:nnN + { \w* } + { #2 } + \l_tmpa_seq + \seq_pop_left:NN + \l_tmpa_seq + \l_tmpa_tl + \typefile[\l_tmpa_tl][]{#1} + } + } +\ExplSyntaxOff +\def\markdownRendererHeadingOnePrototype#1{\chapter{#1}}% +\def\markdownRendererHeadingTwoPrototype#1{\section{#1}}% +\def\markdownRendererHeadingThreePrototype#1{\subsection{#1}}% +\def\markdownRendererHeadingFourPrototype#1{\subsubsection{#1}}% +\def\markdownRendererHeadingFivePrototype#1{\subsubsubsection{#1}}% +\def\markdownRendererHeadingSixPrototype#1{\subsubsubsubsection{#1}}% +\def\markdownRendererThematicBreakPrototype{% + \blackrule[height=1pt, width=\hsize]}% +\def\markdownRendererNotePrototype#1{\footnote{#1}}% +\def\markdownRendererTickedBoxPrototype{$\boxtimes$} +\def\markdownRendererHalfTickedBoxPrototype{$\boxdot$} +\def\markdownRendererUntickedBoxPrototype{$\square$} +\def\markdownRendererStrikeThroughPrototype#1{\overstrikes{#1}} +\def\markdownRendererSuperscriptPrototype#1{\high{#1}} +\def\markdownRendererSubscriptPrototype#1{\low{#1}} +\def\markdownRendererDisplayMathPrototype#1{\startformula#1\stopformula}% +\newcount\markdownConTeXtRowCounter +\newcount\markdownConTeXtRowTotal +\newcount\markdownConTeXtColumnCounter +\newcount\markdownConTeXtColumnTotal +\newtoks\markdownConTeXtTable +\newtoks\markdownConTeXtTableFloat +\def\markdownRendererTablePrototype#1#2#3{% + \markdownConTeXtTable={}% + \ifx\empty#1\empty + \markdownConTeXtTableFloat={% + \the\markdownConTeXtTable}% + \else + \markdownConTeXtTableFloat={% + \placetable{#1}{\the\markdownConTeXtTable}}% + \fi + \begingroup + \setupTABLE[r][each][topframe=off, bottomframe=off, leftframe=off, rightframe=off] + \setupTABLE[c][each][topframe=off, bottomframe=off, leftframe=off, rightframe=off] + \setupTABLE[r][1][topframe=on, bottomframe=on] + \setupTABLE[r][#1][bottomframe=on] + \markdownConTeXtRowCounter=0% + \markdownConTeXtRowTotal=#2% + \markdownConTeXtColumnTotal=#3% + \markdownConTeXtRenderTableRow} +\def\markdownConTeXtRenderTableRow#1{% + \markdownConTeXtColumnCounter=0% + \ifnum\markdownConTeXtRowCounter=0\relax + \markdownConTeXtReadAlignments#1% + \markdownConTeXtTable={\bTABLE}% + \else + \markdownConTeXtTable=\expandafter{% + \the\markdownConTeXtTable\bTR}% + \markdownConTeXtRenderTableCell#1% + \markdownConTeXtTable=\expandafter{% + \the\markdownConTeXtTable\eTR}% + \fi + \advance\markdownConTeXtRowCounter by 1\relax + \ifnum\markdownConTeXtRowCounter>\markdownConTeXtRowTotal\relax + \markdownConTeXtTable=\expandafter{% + \the\markdownConTeXtTable\eTABLE}% + \the\markdownConTeXtTableFloat + \endgroup + \expandafter\gobbleoneargument + \fi\markdownConTeXtRenderTableRow} +\def\markdownConTeXtReadAlignments#1{% + \advance\markdownConTeXtColumnCounter by 1\relax + \if#1d% + \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=right] + \fi\if#1l% + \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=right] + \fi\if#1c% + \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=middle] + \fi\if#1r% + \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=left] + \fi + \ifnum\markdownConTeXtColumnCounter<\markdownConTeXtColumnTotal\relax\else + \expandafter\gobbleoneargument + \fi\markdownConTeXtReadAlignments} +\def\markdownConTeXtRenderTableCell#1{% + \advance\markdownConTeXtColumnCounter by 1\relax + \markdownConTeXtTable=\expandafter{% + \the\markdownConTeXtTable\bTD#1\eTD}% + \ifnum\markdownConTeXtColumnCounter<\markdownConTeXtColumnTotal\relax\else + \expandafter\gobbleoneargument + \fi\markdownConTeXtRenderTableCell} +\ExplSyntaxOn +\cs_gset:Npn + \markdownRendererInputRawInlinePrototype#1#2 + { + \str_case:nnF + { #2 } + { + { latex } + { + \__markdown_plain_tex_default_input_raw_inline_renderer_prototype:nn + { #1 } + { context } + } + } + { + \__markdown_plain_tex_default_input_raw_inline_renderer_prototype:nn + { #1 } + { #2 } + } + } +\cs_gset:Npn + \markdownRendererInputRawBlockPrototype#1#2 + { + \str_case:nnF + { #2 } + { + { context } + { + \__markdown_plain_tex_default_input_raw_block_renderer_prototype:nn + { #1 } + { tex } + } + } + { + \__markdown_plain_tex_default_input_raw_block_renderer_prototype:nn + { #1 } + { #2 } + } + } +\cs_gset_eq:NN + \markdownRendererInputRawBlockPrototype + \markdownRendererInputRawInlinePrototype +\fi % Closes `\markdownIfOption{plain}{\iffalse}{\iftrue}` +\ExplSyntaxOff +\stopmodule +\protect +\endinput +%% +%% End of file `t-markdownthemewitiko_markdown_defaults.tex'. diff --git a/Master/texmf-dist/tex/generic/markdown/markdown.tex b/Master/texmf-dist/tex/generic/markdown/markdown.tex index 8ad545ea609..3f692d579e8 100644 --- a/Master/texmf-dist/tex/generic/markdown/markdown.tex +++ b/Master/texmf-dist/tex/generic/markdown/markdown.tex @@ -6,7 +6,7 @@ %% %% markdown.dtx (with options: `tex') %% -%% Copyright (C) 2016-2023 Vít Novotný +%% Copyright (C) 2016-2024 Vít Starý Novotný %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3c @@ -16,7 +16,7 @@ %% http://www.latex-project.org/lppl.txt %% %% This work has the LPPL maintenance status `maintained'. -%% The Current Maintainer of this work is Vít Novotný. +%% The Current Maintainer of this work is Vít Starý Novotný. %% %% Send bug reports, requests for additions and questions %% either to the GitHub issue tracker at @@ -43,7 +43,7 @@ %% The names of the source files used are shown above. %% \ifx\ExplSyntaxOn\undefined - \input expl3-generic\relax + \input expl3-generic \fi \ExplSyntaxOn \seq_new:N \g__markdown_lua_options_seq @@ -321,6 +321,14 @@ } \seq_gput_right:Nn \g__markdown_cases_seq { __markdown_snake_case:N } \__markdown_add_lua_option:nnn + { eagerCache } + { boolean } + { false } +\__markdown_add_lua_option:nnn + { singletonCache } + { boolean } + { true } +\__markdown_add_lua_option:nnn { cacheDir } { path } { \markdownOptionOutputDir / _markdown_\jobname } @@ -337,6 +345,10 @@ { path } { \markdownOptionCacheDir / frozenCache.tex } \__markdown_add_lua_option:nnn + { autoIdentifiers } + { boolean } + { false } +\__markdown_add_lua_option:nnn { blankBeforeBlockquote } { boolean } { false } @@ -353,13 +365,17 @@ { boolean } { false } \__markdown_add_lua_option:nnn + { blankBeforeList } + { boolean } + { false } +\__markdown_add_lua_option:nnn { bracketedSpans } { boolean } { false } \__markdown_add_lua_option:nnn { breakableBlockquotes } { boolean } - { false } + { true } \__markdown_add_lua_option:nnn { citationNbsps } { boolean } @@ -377,6 +393,10 @@ { boolean } { false } \__markdown_add_lua_option:nnn + { contentLevel } + { string } + { block } +\__markdown_add_lua_option:nnn { debugExtensions } { boolean } { false } @@ -385,10 +405,6 @@ { boolean } { false } \__markdown_add_lua_option:nnn - { eagerCache } - { boolean } - { true } -\__markdown_add_lua_option:nnn { expectJekyllData } { boolean } { false } @@ -406,7 +422,7 @@ \__markdown_add_lua_option:nnn { fencedCode } { boolean } - { false } + { true } \__markdown_add_lua_option:nnn { fencedCodeAttributes } { boolean } @@ -424,7 +440,7 @@ { counter } { 0 } \__markdown_add_lua_option:nnn - { hardLineBreaks } + { gfmAutoIdentifiers } { boolean } { false } \__markdown_add_lua_option:nnn @@ -438,7 +454,7 @@ \__markdown_add_lua_option:nnn { html } { boolean } - { false } + { true } \__markdown_add_lua_option:nnn { hybrid } { boolean } @@ -448,10 +464,6 @@ { boolean } { false } \__markdown_add_lua_option:nnn - { inlineFootnotes } - { boolean } - { false } -\__markdown_add_lua_option:nnn { inlineNotes } { boolean } { false } @@ -468,7 +480,7 @@ { boolean } { false } \__markdown_add_lua_option:nnn - { footnotes } + { mark } { boolean } { false } \__markdown_add_lua_option:nnn @@ -482,7 +494,7 @@ \__markdown_add_lua_option:nnn { preserveTabs } { boolean } - { false } + { true } \__markdown_add_lua_option:nnn { rawAttribute } { boolean } @@ -524,6 +536,10 @@ { boolean } { false } \__markdown_add_lua_option:nnn + { tableAttributes } + { boolean } + { false } +\__markdown_add_lua_option:nnn { tableCaptions } { boolean } { false } @@ -556,17 +572,27 @@ { boolean } { true } \ExplSyntaxOff -\def\markdownLastModified{2023-04-27}% -\def\markdownVersion{2.23.0-0-g0b22f91}% +\def\markdownLastModified{2024-02-16}% +\def\markdownVersion{3.4.1-0-g457226ae}% \let\markdownBegin\relax \let\markdownEnd\relax \let\markdownInput\relax \let\markdownEscape\relax \ExplSyntaxOn +\tl_const:Nn \c__markdown_option_layer_plain_tex_tl { plain_tex } +\cs_generate_variant:Nn + \tl_const:Nn + { NV } +\tl_if_exist:NF + \c__markdown_top_layer_tl + { + \tl_const:NV + \c__markdown_top_layer_tl + \c__markdown_option_layer_plain_tex_tl + } \seq_new:N \g__markdown_plain_tex_options_seq \prop_new:N \g__markdown_plain_tex_option_types_prop \prop_new:N \g__markdown_default_plain_tex_options_prop -\tl_const:Nn \c__markdown_option_layer_plain_tex_tl { plain_tex } \seq_gput_right:NV \g__markdown_option_layers_seq \c__markdown_option_layer_plain_tex_tl \cs_new:Nn \__markdown_add_plain_tex_option:nnn @@ -577,46 +603,111 @@ { #2 } { #3 } } +\cs_new:Nn + \__markdown_setup:n + { + \keys_set:nn + { markdown/options } + { #1 } + } +\cs_gset_eq:NN + \markdownSetup + \__markdown_setup:n +\prg_new_conditional:Nnn + \__markdown_if_option:n + { TF, T, F } + { + \__markdown_get_option_type:nN + { #1 } + \l_tmpa_tl + \str_if_eq:NNF + \l_tmpa_tl + \c__markdown_option_type_boolean_tl + { + \msg_error:nnxx + { markdown } + { expected-boolean-option } + { #1 } + { \l_tmpa_tl } + } + \__markdown_get_option_value:nN + { #1 } + \l_tmpa_tl + \str_if_eq:NNTF + \l_tmpa_tl + \c__markdown_option_value_true_tl + { \prg_return_true: } + { \prg_return_false: } + } +\msg_new:nnn + { markdown } + { expected-boolean-option } + { + Option~#1~has~type~#2,~ + but~a~boolean~was~expected. + } +\let\markdownIfOption=\__markdown_if_option:nTF \__markdown_add_plain_tex_option:nnn { frozenCache } { boolean } { false } \__markdown_add_plain_tex_option:nnn - { helperScriptFileName } - { path } - { \jobname.markdown.lua } -\str_new:N - \g_luabridge_helper_script_filename_str -\tl_gset:Nn - \g_luabridge_helper_script_filename_str - { \markdownOptionHelperScriptFileName } -\__markdown_add_plain_tex_option:nnn { inputTempFileName } { path } { \jobname.markdown.in } -\__markdown_add_plain_tex_option:nnn - { outputTempFileName } +\cs_generate_variant:Nn + \__markdown_add_plain_tex_option:nnn + { nnV } +\ExplSyntaxOff +\input lt3luabridge.tex +\ExplSyntaxOn +\bool_if:nTF + { + \cs_if_exist_p:N + \luabridge_tl_set:Nn && + ( + \int_compare_p:nNn + { \g_luabridge_method_int } + = + { \c_luabridge_method_directlua_int } || + \sys_if_shell_unrestricted_p: + ) + } + { + \luabridge_tl_set:Nn + \l_tmpa_tl + { print(os.getenv("TEXMF_OUTPUT_DIRECTORY") or ".") } + } + { + \tl_set:Nn + \l_tmpa_tl + { . } + } +\__markdown_add_plain_tex_option:nnV + { outputDir } { path } - { \jobname.markdown.out } -\str_new:N - \g_luabridge_standard_output_filename_str -\tl_gset:Nn - \g_luabridge_standard_output_filename_str - { \markdownOptionOutputTempFileName } + \l_tmpa_tl \__markdown_add_plain_tex_option:nnn - { errorTempFileName } - { path } - { \jobname.markdown.err } -\str_new:N - \g_luabridge_error_output_filename_str -\tl_gset:Nn - \g_luabridge_error_output_filename_str - { \markdownOptionErrorTempFileName } + { plain } + { boolean } + { false } \__markdown_add_plain_tex_option:nnn - { outputDir } - { path } - { . } -\cs_new:Nn \__markdown_plain_tex_define_option_commands: + { noDefaults } + { boolean } + { false } +\seq_gput_right:Nn + \g__markdown_plain_tex_options_seq + { stripPercentSigns } +\prop_gput:Nnn + \g__markdown_plain_tex_option_types_prop + { stripPercentSigns } + { boolean } +\prop_gput:Nnx + \g__markdown_default_plain_tex_options_prop + { stripPercentSigns } + { false } +\cs_new:Nn + \__markdown_define_option_commands_and_keyvals: { \seq_map_inline:Nn \g__markdown_option_layers_seq @@ -624,19 +715,35 @@ \seq_map_inline:cn { g__markdown_ ##1 _options_seq } { - \__markdown_plain_tex_define_option_command:n + \__markdown_define_option_command:n + { ####1 } + \__markdown_with_various_cases:nn { ####1 } + { + \__markdown_define_option_keyval:nnn + { ##1 } + { ####1 } + { ########1 } + } } } } -\cs_new:Nn \__markdown_plain_tex_define_option_command:n +\cs_new:Nn + \__markdown_define_option_command:n { - \__markdown_get_default_option_value:nN - { #1 } - \l_tmpa_tl - \__markdown_set_option_value:nV + \__markdown_option_tl_to_csname:nN { #1 } \l_tmpa_tl + \cs_if_exist:cF + { \l_tmpa_tl } + { + \__markdown_get_default_option_value:nN + { #1 } + \l_tmpa_tl + \__markdown_set_option_value:nV + { #1 } + \l_tmpa_tl + } } \cs_new:Nn \__markdown_set_option_value:nn @@ -693,19 +800,376 @@ } } } -\__markdown_plain_tex_define_option_commands: -\seq_gput_right:Nn - \g__markdown_plain_tex_options_seq - { stripPercentSigns } -\prop_gput:Nnn - \g__markdown_plain_tex_option_types_prop - { stripPercentSigns } - { boolean } -\prop_gput:Nnx - \g__markdown_default_plain_tex_options_prop - { stripPercentSigns } - { false } -\ExplSyntaxOff +\cs_new:Nn + \__markdown_define_option_keyval:nnn + { + \prop_get:cnN + { g__markdown_ #1 _option_types_prop } + { #2 } + \l_tmpa_tl + \str_if_eq:VVTF + \l_tmpa_tl + \c__markdown_option_type_boolean_tl + { + \keys_define:nn + { markdown/options } + { + #3 .code:n = { + \tl_set:Nx + \l_tmpa_tl + { + \str_case:nnF + { ##1 } + { + { yes } { true } + { no } { false } + } + { ##1 } + } + \__markdown_set_option_value:nV + { #2 } + \l_tmpa_tl + }, + #3 .default:n = { true }, + } + } + { + \keys_define:nn + { markdown/options } + { + #3 .code:n = { + \__markdown_set_option_value:nn + { #2 } + { ##1 } + }, + } + } + \str_if_eq:VVT + \l_tmpa_tl + \c__markdown_option_type_clist_tl + { + \tl_set:Nn + \l_tmpa_tl + { #3 } + \tl_reverse:N + \l_tmpa_tl + \str_if_eq:enF + { + \tl_head:V + \l_tmpa_tl + } + { s } + { + \msg_error:nnn + { markdown } + { malformed-name-for-clist-option } + { #3 } + } + \tl_set:Nx + \l_tmpa_tl + { + \tl_tail:V + \l_tmpa_tl + } + \tl_reverse:N + \l_tmpa_tl + \tl_put_right:Nn + \l_tmpa_tl + { + .code:n = { + \__markdown_get_option_value:nN + { #2 } + \l_tmpa_tl + \clist_set:NV + \l_tmpa_clist + { \l_tmpa_tl, { ##1 } } + \__markdown_set_option_value:nV + { #2 } + \l_tmpa_clist + } + } + \keys_define:nV + { markdown/options } + \l_tmpa_tl + } + } +\cs_generate_variant:Nn + \clist_set:Nn + { NV } +\cs_generate_variant:Nn + \keys_define:nn + { nV } +\cs_generate_variant:Nn + \__markdown_set_option_value:nn + { nV } +\prg_generate_conditional_variant:Nnn + \str_if_eq:nn + { en } + { F } +\msg_new:nnn + { markdown } + { malformed-name-for-clist-option } + { + Clist~option~name~#1~does~not~end~with~-s. + } +\str_if_eq:VVT + \c__markdown_top_layer_tl + \c__markdown_option_layer_plain_tex_tl + { + \__markdown_define_option_commands_and_keyvals: + } +\keys_define:nn + { markdown/options } + { + theme .code:n = { + \__markdown_set_theme:n + { #1 } + }, + import .code:n = { + \tl_set:Nn + \l_tmpa_tl + { #1 } + \tl_replace_all:NnV + \l_tmpa_tl + { / } + \c_backslash_str + \keys_set:nV + { markdown/options/import } + \l_tmpa_tl + }, + } +\seq_new:N + \g__markdown_themes_seq +\tl_new:N + \g__markdown_current_theme_tl +\tl_gset:Nn + \g__markdown_current_theme_tl + { } +\seq_gput_right:NV + \g__markdown_themes_seq + \g__markdown_current_theme_tl +\cs_new:Nn + \__markdown_set_theme:n + { + \str_if_in:nnF + { #1 } + { / } + { + \msg_error:nnn + { markdown } + { unqualified-theme-name } + { #1 } + } + \str_if_in:nnT + { #1 } + { _ } + { + \msg_error:nnn + { markdown } + { underscores-in-theme-name } + { #1 } + } + \str_set:Nn + \l_tmpa_str + { #1 } + \str_replace_all:Nnn + \l_tmpa_str + { / } + { _ } + \tl_gset:Nn + \g__markdown_current_theme_tl + { #1 / } + \seq_gput_right:NV + \g__markdown_themes_seq + \g__markdown_current_theme_tl + \__markdown_load_theme:nV + { #1 } + \l_tmpa_str + \seq_gpop_right:NN + \g__markdown_themes_seq + \l_tmpa_tl + \seq_get_right:NN + \g__markdown_themes_seq + \l_tmpa_tl + \tl_gset:NV + \g__markdown_current_theme_tl + \l_tmpa_tl + } +\msg_new:nnnn + { markdown } + { unqualified-theme-name } + { Won't~load~theme~with~unqualified~name~#1 } + { Theme~names~must~contain~at~least~one~forward~slash } +\msg_new:nnnn + { markdown } + { underscores-in-theme-name } + { Won't~load~theme~with~an~underscore~in~its~name~#1 } + { Theme~names~must~not~contain~underscores~in~their~names } +\cs_generate_variant:Nn + \tl_replace_all:Nnn + { NnV } +\prop_new:N + \g__markdown_snippets_prop +\cs_new:Nn + \__markdown_setup_snippet:nn + { + \tl_if_empty:nT + { #1 } + { + \msg_error:nnn + { markdown } + { empty-snippet-name } + { #1 } + } + \tl_set:NV + \l_tmpa_tl + \g__markdown_current_theme_tl + \tl_put_right:Nn + \l_tmpa_tl + { #1 } + \__markdown_if_snippet_exists:nT + { #1 } + { + \msg_warning:nnV + { markdown } + { redefined-snippet } + \l_tmpa_tl + } + \prop_gput:NVn + \g__markdown_snippets_prop + \l_tmpa_tl + { #2 } + } +\cs_gset_eq:NN + \markdownSetupSnippet + \__markdown_setup_snippet:nn +\msg_new:nnnn + { markdown } + { empty-snippet-name } + { Empty~snippet~name~#1 } + { Pick~a~non-empty~name~for~your~snippet } +\msg_new:nnn + { markdown } + { redefined-snippet } + { Redefined~snippet~#1 } +\prg_new_conditional:Nnn + \__markdown_if_snippet_exists:n + { TF, T, F } + { + \tl_set:NV + \l_tmpa_tl + \g__markdown_current_theme_tl + \tl_put_right:Nn + \l_tmpa_tl + { #1 } + \prop_get:NVNTF + \g__markdown_snippets_prop + \l_tmpa_tl + \l_tmpb_tl + { \prg_return_true: } + { \prg_return_false: } + } +\cs_gset_eq:NN + \markdownIfSnippetExists + \__markdown_if_snippet_exists:nTF +\keys_define:nn + { markdown/options } + { + snippet .code:n = { + \tl_set:NV + \l_tmpa_tl + \g__markdown_current_theme_tl + \tl_put_right:Nn + \l_tmpa_tl + { #1 } + \__markdown_if_snippet_exists:nTF + { #1 } + { + \prop_get:NVN + \g__markdown_snippets_prop + \l_tmpa_tl + \l_tmpb_tl + \__markdown_setup:V + \l_tmpb_tl + } + { + \msg_error:nnV + { markdown } + { undefined-snippet } + \l_tmpa_tl + } + } + } +\msg_new:nnn + { markdown } + { undefined-snippet } + { Can't~invoke~undefined~snippet~#1 } +\cs_generate_variant:Nn + \__markdown_setup:n + { V } +\tl_new:N + \l__markdown_import_current_theme_tl +\keys_define:nn + { markdown/options/import } + { + unknown .default:n = {}, + unknown .code:n = { + \tl_set_eq:NN + \l__markdown_import_current_theme_tl + \l_keys_key_str + \tl_replace_all:NVn + \l__markdown_import_current_theme_tl + \c_backslash_str + { / } + \clist_map_inline:nn + { #1 } + { + \regex_extract_once:nnNTF + { ^(.*?)\s+as\s+(.*?)$ } + { ##1 } + \l_tmpa_seq + { + \seq_pop:NN + \l_tmpa_seq + \l_tmpa_tl + \seq_pop:NN + \l_tmpa_seq + \l_tmpa_tl + \seq_pop:NN + \l_tmpa_seq + \l_tmpb_tl + } + { + \tl_set:Nn + \l_tmpa_tl + { ##1 } + \tl_set:Nn + \l_tmpb_tl + { ##1 } + } + \tl_put_left:Nn + \l_tmpa_tl + { / } + \tl_put_left:NV + \l_tmpa_tl + \l__markdown_import_current_theme_tl + \__markdown_setup_snippet:Vx + \l_tmpb_tl + { snippet = { \l_tmpa_tl } } + } + \__markdown_set_theme:V + \l__markdown_import_current_theme_tl + }, + } +\cs_generate_variant:Nn + \tl_replace_all:Nnn + { NVn } +\cs_generate_variant:Nn + \__markdown_set_theme:n + { V } +\cs_generate_variant:Nn + \__markdown_setup_snippet:nn + { Vx } \ExplSyntaxOn \seq_new:N \g__markdown_renderers_seq \prop_new:N \g__markdown_renderer_arities_prop @@ -853,6 +1317,28 @@ { ulEndTight } { 0 } \ExplSyntaxOff +\def\markdownRendererCite{% + \markdownRendererCitePrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g__markdown_renderers_seq + { cite } +\prop_gput:Nnn + \g__markdown_renderer_arities_prop + { cite } + { 1 } +\ExplSyntaxOff +\def\markdownRendererTextCite{% + \markdownRendererTextCitePrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g__markdown_renderers_seq + { textCite } +\prop_gput:Nnn + \g__markdown_renderer_arities_prop + { textCite } + { 1 } +\ExplSyntaxOff \def\markdownRendererInputVerbatim{% \markdownRendererInputVerbatimPrototype}% \ExplSyntaxOn @@ -873,7 +1359,7 @@ \prop_gput:Nnn \g__markdown_renderer_arities_prop { inputFencedCode } - { 2 } + { 3 } \ExplSyntaxOff \def\markdownRendererCodeSpan{% \markdownRendererCodeSpanPrototype}% @@ -1205,28 +1691,6 @@ { inlineHtmlComment } { 1 } \ExplSyntaxOff -\def\markdownRendererBlockHtmlCommentBegin{% - \markdownRendererBlockHtmlCommentBeginPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g__markdown_renderers_seq - { blockHtmlCommentBegin } -\prop_gput:Nnn - \g__markdown_renderer_arities_prop - { blockHtmlCommentBegin } - { 0 } -\ExplSyntaxOff -\def\markdownRendererBlockHtmlCommentEnd{% - \markdownRendererBlockHtmlCommentEndPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g__markdown_renderers_seq - { blockHtmlCommentEnd } -\prop_gput:Nnn - \g__markdown_renderer_arities_prop - { blockHtmlCommentEnd } - { 0 } -\ExplSyntaxOff \def\markdownRendererInlineHtmlTag{% \markdownRendererInlineHtmlTagPrototype}% \ExplSyntaxOn @@ -1293,6 +1757,17 @@ { interblockSeparator } { 0 } \ExplSyntaxOff +\def\markdownRendererParagraphSeparator{% + \markdownRendererParagraphSeparatorPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g__markdown_renderers_seq + { paragraphSeparator } +\prop_gput:Nnn + \g__markdown_renderer_arities_prop + { paragraphSeparator } + { 0 } +\ExplSyntaxOff \def\markdownRendererLineBlockBegin{% \markdownRendererLineBlockBeginPrototype}% \ExplSyntaxOn @@ -1315,43 +1790,20 @@ { lineBlockEnd } { 0 } \ExplSyntaxOff +\def\markdownRendererSoftLineBreak{% + \markdownRendererSoftLineBreakPrototype}% \ExplSyntaxOn -\cs_new:Npn - \markdownRendererHardLineBreak - { - \cs_if_exist:NTF - \markdownRendererLineBreak - { - \markdownWarning - { - Line~break~renderer~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererLineBreak - } - { - \cs_if_exist:NTF - \markdownRendererLineBreakPrototype - { - \markdownWarning - { - Line~break~renderer~prototype~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererLineBreakPrototype - } - { - \markdownRendererHardLineBreakPrototype - } - } - } \seq_gput_right:Nn \g__markdown_renderers_seq - { lineBreak } + { softLineBreak } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { lineBreak } + { softLineBreak } { 0 } +\ExplSyntaxOff +\def\markdownRendererHardLineBreak{% + \markdownRendererHardLineBreakPrototype}% +\ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq { hardLineBreak } @@ -1393,6 +1845,17 @@ { linkAttributeContextEnd } { 0 } \ExplSyntaxOff +\def\markdownRendererMark{% + \markdownRendererMarkPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g__markdown_renderers_seq + { mark } +\prop_gput:Nnn + \g__markdown_renderer_arities_prop + { mark } + { 1 } +\ExplSyntaxOff \def\markdownRendererDocumentBegin{% \markdownRendererDocumentBeginPrototype}% \ExplSyntaxOn @@ -1426,43 +1889,9 @@ { nbsp } { 0 } \ExplSyntaxOff +\def\markdownRendererNote{% + \markdownRendererNotePrototype}% \ExplSyntaxOn -\cs_new:Npn - \markdownRendererNote - { - \cs_if_exist:NTF - \markdownRendererFootnote - { - \markdownWarning - { - Footnote~renderer~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererFootnote - } - { - \cs_if_exist:NTF - \markdownRendererFootnotePrototype - { - \markdownWarning - { - Footnote~renderer~prototype~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererFootnotePrototype - } - { - \markdownRendererNotePrototype - } - } - } -\seq_gput_right:Nn - \g__markdown_renderers_seq - { footnote } -\prop_gput:Nnn - \g__markdown_renderer_arities_prop - { footnote } - { 1 } \seq_gput_right:Nn \g__markdown_renderers_seq { note } @@ -1625,17 +2054,6 @@ { fancyOlEndTight } { 0 } \ExplSyntaxOff -\def\markdownRendererCite{% - \markdownRendererCitePrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g__markdown_renderers_seq - { cite } -\prop_gput:Nnn - \g__markdown_renderer_arities_prop - { cite } - { 1 } -\ExplSyntaxOff \def\markdownRendererInputRawInline{% \markdownRendererInputRawInlinePrototype}% \ExplSyntaxOn @@ -1844,6 +2262,28 @@ { superscript } { 1 } \ExplSyntaxOff +\def\markdownRendererTableAttributeContextBegin{% + \markdownRendererTableAttributeContextBeginPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g__markdown_renderers_seq + { tableAttributeContextBegin } +\prop_gput:Nnn + \g__markdown_renderer_arities_prop + { tableAttributeContextBegin } + { 0 } +\ExplSyntaxOff +\def\markdownRendererTableAttributeContextEnd{% + \markdownRendererTableAttributeContextEndPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g__markdown_renderers_seq + { tableAttributeContextEnd } +\prop_gput:Nnn + \g__markdown_renderer_arities_prop + { tableAttributeContextEnd } + { 0 } +\ExplSyntaxOff \def\markdownRendererTable{% \markdownRendererTablePrototype}% \ExplSyntaxOn @@ -1877,54 +2317,9 @@ { displayMath } { 1 } \ExplSyntaxOff -\def\markdownRendererTextCite{% - \markdownRendererTextCitePrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g__markdown_renderers_seq - { textCite } -\prop_gput:Nnn - \g__markdown_renderer_arities_prop - { textCite } - { 1 } -\ExplSyntaxOff +\def\markdownRendererThematicBreak{% + \markdownRendererThematicBreakPrototype}% \ExplSyntaxOn -\cs_new:Npn - \markdownRendererThematicBreak - { - \cs_if_exist:NTF - \markdownRendererHorizontalRule - { - \markdownWarning - { - Horizontal~rule~renderer~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererHorizontalRule - } - { - \cs_if_exist:NTF - \markdownRendererHorizontalRulePrototype - { - \markdownWarning - { - Horizontal~rule~renderer~prototype~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererHorizontalRulePrototype - } - { - \markdownRendererThematicBreakPrototype - } - } - } -\seq_gput_right:Nn - \g__markdown_renderers_seq - { horizontalRule } -\prop_gput:Nnn - \g__markdown_renderer_arities_prop - { horizontalRule } - { 0 } \seq_gput_right:Nn \g__markdown_renderers_seq { thematicBreak } @@ -2075,41 +2470,27 @@ \g__markdown_renderer_arities_prop { jekyllDataEmpty } { 1 } -\ExplSyntaxOff -\ExplSyntaxOn -\keys_define:nn - { markdown/jekyllData } - { } -\ExplSyntaxOff -\ExplSyntaxOn -\cs_new:Nn \__markdown_plaintex_define_renderer_prototypes: +\cs_new:Nn \__markdown_define_renderers: { \seq_map_function:NN \g__markdown_renderers_seq - \__markdown_plaintex_define_renderer_prototype:n - \let\markdownRendererBlockHtmlCommentBeginPrototype=\iffalse - \let\markdownRendererBlockHtmlCommentBegin=\iffalse - \let\markdownRendererBlockHtmlCommentEndPrototype=\fi - \let\markdownRendererBlockHtmlCommentEnd=\fi - \cs_undefine:N \markdownRendererFootnote - \cs_undefine:N \markdownRendererFootnotePrototype - \cs_undefine:N \markdownRendererHorizontalRule - \cs_undefine:N \markdownRendererHorizontalRulePrototype - } -\cs_new:Nn \__markdown_plaintex_define_renderer_prototype:n + \__markdown_define_renderer:n + } +\cs_new:Nn \__markdown_define_renderer:n { - \__markdown_renderer_prototype_tl_to_csname:nN + \__markdown_renderer_tl_to_csname:nN { #1 } \l_tmpa_tl \prop_get:NnN \g__markdown_renderer_arities_prop { #1 } \l_tmpb_tl - \__markdown_plaintex_define_renderer_prototype:cV + \__markdown_define_renderer:ncV + { #1 } { \l_tmpa_tl } \l_tmpb_tl } -\cs_new:Nn \__markdown_renderer_prototype_tl_to_csname:nN +\cs_new:Nn \__markdown_renderer_tl_to_csname:nN { \tl_set:Nn \l_tmpa_tl @@ -2120,351 +2501,534 @@ markdownRenderer \tl_head:f { \l_tmpa_tl } \tl_tail:n { #1 } - Prototype } } -\cs_new:Nn \__markdown_plaintex_define_renderer_prototype:Nn +\tl_new:N + \l__markdown_renderer_definition_tl +\cs_new:Nn \__markdown_define_renderer:nNn { - \cs_generate_from_arg_count:NNnn - #1 - \cs_set:Npn - { #2 } - { } + \keys_define:nn + { markdown/options/renderers } + { + #1 .code:n = { + \tl_set:Nn + \l__markdown_renderer_definition_tl + { ##1 } + \regex_replace_all:nnN + { \cP\#0 } + { #1 } + \l__markdown_renderer_definition_tl + \cs_generate_from_arg_count:NNnV + #2 + \cs_set:Npn + { #3 } + \l__markdown_renderer_definition_tl + }, + } } \cs_generate_variant:Nn - \__markdown_plaintex_define_renderer_prototype:Nn - { cV } -\__markdown_plaintex_define_renderer_prototypes: -\ExplSyntaxOff -\let\markdownMakeOther\relax -\let\markdownReadAndConvert\relax -\begingroup - \catcode`\|=0\catcode`\\=12% - |gdef|markdownBegin{% - |markdownReadAndConvert{\markdownEnd}% - {|markdownEnd}}% -|endgroup -\ExplSyntaxOn -\cs_if_exist:NF - \markdownMode + \__markdown_define_renderer:nNn + { ncV } +\cs_generate_variant:Nn + \cs_generate_from_arg_count:NNnn + { NNnV } +\keys_define:nn + { markdown/options } + { + renderers .code:n = { + \keys_set:nn + { markdown/options/renderers } + { #1 } + }, + } +\prop_new:N + \g__markdown_glob_cache_prop +\tl_new:N + \l__markdown_current_glob_tl +\cs_new:Nn + \__markdown_glob_seq:nnN { - \file_if_exist:nTF - { lt3luabridge.tex } + \tl_set:Nn + \l__markdown_current_glob_tl + { ^ #1 $ } + \prop_get:NeNTF + \g__markdown_glob_cache_prop + { #2 / \l__markdown_current_glob_tl } + \l_tmpa_clist { - \cs_new:Npn - \markdownMode - { 3 } + \seq_set_from_clist:NN + #3 + \l_tmpa_clist } { - \cs_if_exist:NTF - \directlua - { - \cs_new:Npn - \markdownMode - { 2 } - } + \seq_clear:N + #3 + \regex_replace_all:nnN + { \* } + { .* } + \l__markdown_current_glob_tl + \regex_set:NV + \l_tmpa_regex + \l__markdown_current_glob_tl + \seq_map_inline:cn + { #2 } { - \cs_new:Npn - \markdownMode - { 0 } + \regex_match:NnT + \l_tmpa_regex + { ##1 } + { + \seq_put_right:Nn + #3 + { ##1 } + } } + \clist_set_from_seq:NN + \l_tmpa_clist + #3 + \prop_gput:NeV + \g__markdown_glob_cache_prop + { #2 / \l__markdown_current_glob_tl } + \l_tmpa_clist } } -\ExplSyntaxOff -\def\markdownLuaRegisterIBCallback#1{\relax}% -\def\markdownLuaUnregisterIBCallback#1{\relax}% -\ifx\markdownInfo\undefined - \def\markdownInfo#1{% - \immediate\write-1{(l.\the\inputlineno) markdown.tex info: #1.}}% -\fi -\ifx\markdownWarning\undefined - \def\markdownWarning#1{% - \immediate\write16{(l.\the\inputlineno) markdown.tex warning: #1}}% -\fi -\ifx\markdownError\undefined - \def\markdownError#1#2{% - \errhelp{#2.}% - \errmessage{(l.\the\inputlineno) markdown.tex error: #1}}% -\fi -\def\markdownRendererInterblockSeparatorPrototype{\par}% -\def\markdownRendererHardLineBreakPrototype{\hfil\break}% -\let\markdownRendererEllipsisPrototype\dots -\def\markdownRendererNbspPrototype{~}% -\def\markdownRendererLeftBracePrototype{\char`\{}% -\def\markdownRendererRightBracePrototype{\char`\}}% -\def\markdownRendererDollarSignPrototype{\char`$}% -\def\markdownRendererPercentSignPrototype{\char`\%}% -\def\markdownRendererAmpersandPrototype{\&}% -\def\markdownRendererUnderscorePrototype{\char`_}% -\def\markdownRendererHashPrototype{\char`\#}% -\def\markdownRendererCircumflexPrototype{\char`^}% -\def\markdownRendererBackslashPrototype{\char`\\}% -\def\markdownRendererTildePrototype{\char`~}% -\def\markdownRendererPipePrototype{|}% -\def\markdownRendererCodeSpanPrototype#1{{\tt#1}}% -\def\markdownRendererLinkPrototype#1#2#3#4{#2}% -\def\markdownRendererContentBlockPrototype#1#2#3#4{% - \markdownInput{#3}}% -\def\markdownRendererContentBlockOnlineImagePrototype{% - \markdownRendererImage}% -\def\markdownRendererContentBlockCodePrototype#1#2#3#4#5{% - \markdownRendererInputFencedCode{#3}{#2}}% -\def\markdownRendererImagePrototype#1#2#3#4{#2}% -\def\markdownRendererUlBeginPrototype{}% -\def\markdownRendererUlBeginTightPrototype{}% -\def\markdownRendererUlItemPrototype{}% -\def\markdownRendererUlItemEndPrototype{}% -\def\markdownRendererUlEndPrototype{}% -\def\markdownRendererUlEndTightPrototype{}% -\def\markdownRendererOlBeginPrototype{}% -\def\markdownRendererOlBeginTightPrototype{}% -\def\markdownRendererFancyOlBeginPrototype#1#2{\markdownRendererOlBegin}% -\def\markdownRendererFancyOlBeginTightPrototype#1#2{\markdownRendererOlBeginTight}% -\def\markdownRendererOlItemPrototype{}% -\def\markdownRendererOlItemWithNumberPrototype#1{}% -\def\markdownRendererOlItemEndPrototype{}% -\def\markdownRendererFancyOlItemPrototype{\markdownRendererOlItem}% -\def\markdownRendererFancyOlItemWithNumberPrototype{\markdownRendererOlItemWithNumber}% -\def\markdownRendererFancyOlItemEndPrototype{}% -\def\markdownRendererOlEndPrototype{}% -\def\markdownRendererOlEndTightPrototype{}% -\def\markdownRendererFancyOlEndPrototype{\markdownRendererOlEnd}% -\def\markdownRendererFancyOlEndTightPrototype{\markdownRendererOlEndTight}% -\def\markdownRendererDlBeginPrototype{}% -\def\markdownRendererDlBeginTightPrototype{}% -\def\markdownRendererDlItemPrototype#1{#1}% -\def\markdownRendererDlItemEndPrototype{}% -\def\markdownRendererDlDefinitionBeginPrototype{}% -\def\markdownRendererDlDefinitionEndPrototype{\par}% -\def\markdownRendererDlEndPrototype{}% -\def\markdownRendererDlEndTightPrototype{}% -\def\markdownRendererEmphasisPrototype#1{{\it#1}}% -\def\markdownRendererStrongEmphasisPrototype#1{{\bf#1}}% -\def\markdownRendererBlockQuoteBeginPrototype{\begingroup\it}% -\def\markdownRendererBlockQuoteEndPrototype{\endgroup\par}% -\def\markdownRendererLineBlockBeginPrototype{\begingroup\parindent=0pt}% -\def\markdownRendererLineBlockEndPrototype{\endgroup}% -\def\markdownRendererInputVerbatimPrototype#1{% - \par{\tt\input#1\relax{}}\par}% -\def\markdownRendererInputFencedCodePrototype#1#2{% - \markdownRendererInputVerbatim{#1}}% -\def\markdownRendererHeadingOnePrototype#1{#1}% -\def\markdownRendererHeadingTwoPrototype#1{#1}% -\def\markdownRendererHeadingThreePrototype#1{#1}% -\def\markdownRendererHeadingFourPrototype#1{#1}% -\def\markdownRendererHeadingFivePrototype#1{#1}% -\def\markdownRendererHeadingSixPrototype#1{#1}% -\def\markdownRendererThematicBreakPrototype{}% -\def\markdownRendererNotePrototype#1{#1}% -\def\markdownRendererCitePrototype#1{}% -\def\markdownRendererTextCitePrototype#1{}% -\def\markdownRendererTickedBoxPrototype{[X]}% -\def\markdownRendererHalfTickedBoxPrototype{[/]}% -\def\markdownRendererUntickedBoxPrototype{[ ]}% -\def\markdownRendererStrikeThroughPrototype#1{#1}% -\def\markdownRendererSuperscriptPrototype#1{#1}% -\def\markdownRendererSubscriptPrototype#1{#1}% -\def\markdownRendererDisplayMathPrototype#1{$$#1$$}% -\def\markdownRendererInlineMathPrototype#1{$#1$}% -\ExplSyntaxOn -\cs_gset:Npn - \markdownRendererHeaderAttributeContextBeginPrototype - { - \group_begin: - \color_group_begin: - } -\cs_gset:Npn - \markdownRendererHeaderAttributeContextEndPrototype - { - \color_group_end: - \group_end: +\prg_generate_conditional_variant:Nnn + \prop_get:NnN + { NeN } + { TF } +\cs_generate_variant:Nn + \regex_set:Nn + { NV } +\cs_generate_variant:Nn + \prop_gput:Nnn + { NeV } +\seq_new:N + \l__markdown_renderer_glob_results_seq +\keys_define:nn + { markdown/options/renderers } + { + unknown .code:n = { + \__markdown_glob_seq:VnN + \l_keys_key_str + { g__markdown_renderers_seq } + \l__markdown_renderer_glob_results_seq + \seq_if_empty:NTF + \l__markdown_renderer_glob_results_seq + { + \msg_error:nnV + { markdown } + { undefined-renderer } + \l_keys_key_str + } + { + \tl_set:Nn + \l__markdown_renderer_definition_tl + { #1 } + \seq_map_inline:Nn + \l__markdown_renderer_glob_results_seq + { + \__markdown_renderer_tl_to_csname:nN + { ##1 } + \l_tmpa_tl + \prop_get:NnN + \g__markdown_renderer_arities_prop + { ##1 } + \l_tmpb_tl + \int_set:Nn + \l_tmpa_int + \l_tmpb_tl + \tl_set:NV + \l_tmpb_tl + \l__markdown_renderer_definition_tl + \regex_replace_all:nnN + { \cP\#0 } + { ##1 } + \l_tmpb_tl + \cs_generate_from_arg_count:cNVV + { \l_tmpa_tl } + \cs_set:Npn + \l_tmpa_int + \l_tmpb_tl + } + } + }, } -\cs_gset_eq:NN - \markdownRendererBracketedSpanAttributeContextBeginPrototype - \markdownRendererHeaderAttributeContextBeginPrototype -\cs_gset_eq:NN - \markdownRendererBracketedSpanAttributeContextEndPrototype - \markdownRendererHeaderAttributeContextEndPrototype -\cs_gset_eq:NN - \markdownRendererFencedDivAttributeContextBeginPrototype - \markdownRendererHeaderAttributeContextBeginPrototype -\cs_gset_eq:NN - \markdownRendererFencedDivAttributeContextEndPrototype - \markdownRendererHeaderAttributeContextEndPrototype -\cs_gset_eq:NN - \markdownRendererFencedCodeAttributeContextBeginPrototype - \markdownRendererHeaderAttributeContextBeginPrototype -\cs_gset_eq:NN - \markdownRendererFencedCodeAttributeContextEndPrototype - \markdownRendererHeaderAttributeContextEndPrototype -\cs_gset:Npn - \markdownRendererReplacementCharacterPrototype +\msg_new:nnn + { markdown } + { undefined-renderer } { - % TODO: Replace with `\codepoint_generate:nn` in TeX Live 2023 - \sys_if_engine_pdftex:TF - { ^^ef^^bf^^bd } - { ^^^^fffd } + Renderer~#1~is~undefined. } -\ExplSyntaxOff -\def\markdownRendererSectionBeginPrototype{}% -\def\markdownRendererSectionEndPrototype{}% -\ExplSyntaxOn -\cs_new:Nn - \__markdown_plain_tex_default_input_raw_inline_renderer_prototype:nn +\cs_generate_variant:Nn + \__markdown_glob_seq:nnN + { VnN } +\cs_generate_variant:Nn + \cs_generate_from_arg_count:NNnn + { cNVV } +\cs_generate_variant:Nn + \msg_error:nnn + { nnV } +\str_if_eq:VVT + \c__markdown_top_layer_tl + \c__markdown_option_layer_plain_tex_tl { - \str_case:nn - { #2 } - { - { md } { \markdownInput{#1} } - { tex } { \markdownEscape{#1} \unskip } - } + \__markdown_define_renderers: } -\cs_new:Nn - \__markdown_plain_tex_default_input_raw_block_renderer_prototype:nn +\keys_define:nn + { markdown/jekyllData } + { } +\__markdown_with_various_cases:nn + { jekyllDataRenderers } { - \str_case:nn - { #2 } + \keys_define:nn + { markdown/options } { - { md } { \markdownInput{#1} } - { tex } { \markdownEscape{#1} } + #1 .code:n = { + \tl_set:Nn + \l_tmpa_tl + { ##1 } + \tl_replace_all:NnV + \l_tmpa_tl + { / } + \c_backslash_str + \keys_set:nV + { markdown/options/jekyll-data-renderers } + \l_tmpa_tl + }, } } -\cs_gset:Npn - \markdownRendererInputRawInlinePrototype#1#2 +\keys_define:nn + { markdown/options/jekyll-data-renderers } { - \__markdown_plain_tex_default_input_raw_inline_renderer_prototype:nn - { #1 } - { #2 } + unknown .code:n = { + \tl_set_eq:NN + \l_tmpa_tl + \l_keys_key_str + \tl_replace_all:NVn + \l_tmpa_tl + \c_backslash_str + { / } + \tl_put_right:Nn + \l_tmpa_tl + { + .code:n = { #1 } + } + \keys_define:nV + { markdown/jekyllData } + \l_tmpa_tl + } } -\cs_gset:Npn - \markdownRendererInputRawBlockPrototype#1#2 +\cs_generate_variant:Nn + \keys_define:nn + { nV } +\cs_new:Nn \__markdown_define_renderer_prototypes: { - \__markdown_plain_tex_default_input_raw_block_renderer_prototype:nn + \seq_map_function:NN + \g__markdown_renderers_seq + \__markdown_define_renderer_prototype:n + } +\cs_new:Nn \__markdown_define_renderer_prototype:n + { + \__markdown_renderer_prototype_tl_to_csname:nN { #1 } - { #2 } + \l_tmpa_tl + \prop_get:NnN + \g__markdown_renderer_arities_prop + { #1 } + \l_tmpb_tl + \__markdown_define_renderer_prototype:ncV + { #1 } + { \l_tmpa_tl } + \l_tmpb_tl } -\ExplSyntaxOff -\ExplSyntaxOn -\seq_new:N \g__markdown_jekyll_data_datatypes_seq -\tl_const:Nn \c__markdown_jekyll_data_sequence_tl { sequence } -\tl_const:Nn \c__markdown_jekyll_data_mapping_tl { mapping } -\tl_const:Nn \c__markdown_jekyll_data_scalar_tl { scalar } -\seq_new:N \g__markdown_jekyll_data_wildcard_absolute_address_seq -\cs_new:Nn \markdown_jekyll_data_push_address_segment:n +\cs_new:Nn \__markdown_renderer_prototype_tl_to_csname:nN { - \seq_if_empty:NF - \g__markdown_jekyll_data_datatypes_seq + \tl_set:Nn + \l_tmpa_tl + { \str_uppercase:n { #1 } } + \tl_set:Nx + #2 { - \seq_get_right:NN - \g__markdown_jekyll_data_datatypes_seq - \l_tmpa_tl - \str_if_eq:NNTF - \l_tmpa_tl - \c__markdown_jekyll_data_sequence_tl + markdownRenderer + \tl_head:f { \l_tmpa_tl } + \tl_tail:n { #1 } + Prototype + } + } +\tl_new:N + \l__markdown_renderer_prototype_definition_tl +\cs_new:Nn \__markdown_define_renderer_prototype:nNn + { + \keys_define:nn + { markdown/options/renderer-prototypes } + { + #1 .code:n = { + \tl_set:Nn + \l__markdown_renderer_prototype_definition_tl + { ##1 } + \regex_replace_all:nnN + { \cP\#0 } + { #1 } + \l__markdown_renderer_prototype_definition_tl + \cs_generate_from_arg_count:NNnV + #2 + \cs_set:Npn + { #3 } + \l__markdown_renderer_prototype_definition_tl + }, + } + \cs_if_free:NT + #2 + { + \cs_generate_from_arg_count:NNnn + #2 + \cs_set:Npn + { #3 } + { } + } + } +\cs_generate_variant:Nn + \__markdown_define_renderer_prototype:nNn + { ncV } +\seq_new:N + \l__markdown_renderer_prototype_glob_results_seq +\keys_define:nn + { markdown/options/renderer-prototypes } + { + unknown .code:n = { + \__markdown_glob_seq:VnN + \l_keys_key_str + { g__markdown_renderers_seq } + \l__markdown_renderer_prototype_glob_results_seq + \seq_if_empty:NTF + \l__markdown_renderer_prototype_glob_results_seq { - \seq_put_right:Nn - \g__markdown_jekyll_data_wildcard_absolute_address_seq - { * } + \msg_error:nnV + { markdown } + { undefined-renderer-prototype } + \l_keys_key_str } { - \seq_put_right:Nn - \g__markdown_jekyll_data_wildcard_absolute_address_seq + \tl_set:Nn + \l__markdown_renderer_prototype_definition_tl { #1 } + \seq_map_inline:Nn + \l__markdown_renderer_prototype_glob_results_seq + { + \__markdown_renderer_prototype_tl_to_csname:nN + { ##1 } + \l_tmpa_tl + \prop_get:NnN + \g__markdown_renderer_arities_prop + { ##1 } + \l_tmpb_tl + \int_set:Nn + \l_tmpa_int + \l_tmpb_tl + \tl_set:NV + \l_tmpb_tl + \l__markdown_renderer_prototype_definition_tl + \regex_replace_all:nnN + { \cP\#0 } + { ##1 } + \l_tmpb_tl + \cs_generate_from_arg_count:cNVV + { \l_tmpa_tl } + \cs_set:Npn + \l_tmpa_int + \l_tmpb_tl + } } + }, + } +\msg_new:nnn + { markdown } + { undefined-renderer-prototype } + { + Renderer~prototype~#1~is~undefined. + } +\__markdown_with_various_cases:nn + { rendererPrototypes } + { + \keys_define:nn + { markdown/options } + { + #1 .code:n = { + \keys_set:nn + { markdown/options/renderer-prototypes } + { ##1 } + }, } } -\tl_new:N \g__markdown_jekyll_data_wildcard_absolute_address_tl -\tl_new:N \g__markdown_jekyll_data_wildcard_relative_address_tl -\cs_new:Nn \markdown_jekyll_data_concatenate_address:NN +\str_if_eq:VVT + \c__markdown_top_layer_tl + \c__markdown_option_layer_plain_tex_tl { - \seq_pop_left:NN #1 \l_tmpa_tl - \tl_set:Nx #2 { / \seq_use:Nn #1 { / } } - \seq_put_left:NV #1 \l_tmpa_tl + \__markdown_define_renderer_prototypes: } -\cs_new:Nn \markdown_jekyll_data_update_address_tls: +\ExplSyntaxOff +\let\markdownMakeOther\relax +\let\markdownReadAndConvert\relax +\begingroup + \catcode`\|=0\catcode`\\=12% + |gdef|markdownBegin{% + |markdownReadAndConvert{\markdownEnd}% + {|markdownEnd}}% +|endgroup +\ExplSyntaxOn +\keys_define:nn + { markdown/options } { - \markdown_jekyll_data_concatenate_address:NN - \g__markdown_jekyll_data_wildcard_absolute_address_seq - \g__markdown_jekyll_data_wildcard_absolute_address_tl - \seq_get_right:NN - \g__markdown_jekyll_data_wildcard_absolute_address_seq - \g__markdown_jekyll_data_wildcard_relative_address_tl + code .code:n = { #1 }, } -\cs_new:Nn \markdown_jekyll_data_push:nN +\cs_if_free:NT + \markdownInfo { - \markdown_jekyll_data_push_address_segment:n - { #1 } - \seq_put_right:NV - \g__markdown_jekyll_data_datatypes_seq - #2 - \markdown_jekyll_data_update_address_tls: + \cs_new:Npn + \markdownInfo #1 + { + \msg_info:nne + { markdown } + { generic-message } + { #1 } + } } -\cs_new:Nn \markdown_jekyll_data_pop: +\cs_if_free:NT + \markdownWarning { - \seq_pop_right:NN - \g__markdown_jekyll_data_wildcard_absolute_address_seq - \l_tmpa_tl - \seq_pop_right:NN - \g__markdown_jekyll_data_datatypes_seq - \l_tmpa_tl - \markdown_jekyll_data_update_address_tls: + \cs_new:Npn + \markdownWarning #1 + { + \msg_warning:nne + { markdown } + { generic-message } + { #1 } + } } -\cs_new:Nn \markdown_jekyll_data_set_keyval:nn +\cs_if_free:NT + \markdownError { - \keys_set_known:nn - { markdown/jekyllData } - { { #1 } = { #2 } } + \cs_new:Npn + \markdownError #1 #2 + { + \msg_error:nnee + { markdown } + { generic-message-with-help-text } + { #1 } + { #2 } + } } +\msg_new:nnn + { markdown } + { generic-message } + { #1 } +\msg_new:nnnn + { markdown } + { generic-message-with-help-text } + { #1 } + { #2 } \cs_generate_variant:Nn - \markdown_jekyll_data_set_keyval:nn - { Vn } -\cs_new:Nn \markdown_jekyll_data_set_keyvals:nn + \msg_info:nnn + { nne } +\cs_generate_variant:Nn + \msg_warning:nnn + { nne } +\cs_generate_variant:Nn + \msg_error:nnnn + { nnee } +\prop_new:N \g__markdown_plain_tex_loaded_themes_linenos_prop +\cs_new:Nn + \__markdown_plain_tex_load_theme:nn { - \markdown_jekyll_data_push:nN + \prop_get:NnNTF + \g__markdown_plain_tex_loaded_themes_linenos_prop { #1 } - \c__markdown_jekyll_data_scalar_tl - \markdown_jekyll_data_set_keyval:Vn - \g__markdown_jekyll_data_wildcard_absolute_address_tl - { #2 } - \markdown_jekyll_data_set_keyval:Vn - \g__markdown_jekyll_data_wildcard_relative_address_tl - { #2 } - \markdown_jekyll_data_pop: - } -\def\markdownRendererJekyllDataSequenceBeginPrototype#1#2{ - \markdown_jekyll_data_push:nN - { #1 } - \c__markdown_jekyll_data_sequence_tl -} -\def\markdownRendererJekyllDataMappingBeginPrototype#1#2{ - \markdown_jekyll_data_push:nN - { #1 } - \c__markdown_jekyll_data_mapping_tl -} -\def\markdownRendererJekyllDataSequenceEndPrototype{ - \markdown_jekyll_data_pop: -} -\def\markdownRendererJekyllDataMappingEndPrototype{ - \markdown_jekyll_data_pop: -} -\def\markdownRendererJekyllDataBooleanPrototype#1#2{ - \markdown_jekyll_data_set_keyvals:nn - { #1 } - { #2 } -} -\def\markdownRendererJekyllDataEmptyPrototype#1{} -\def\markdownRendererJekyllDataNumberPrototype#1#2{ - \markdown_jekyll_data_set_keyvals:nn - { #1 } - { #2 } -} -\def\markdownRendererJekyllDataStringPrototype#1#2{ - \markdown_jekyll_data_set_keyvals:nn - { #1 } - { #2 } -} -\ExplSyntaxOff -\ExplSyntaxOn + \l_tmpa_tl + { + \msg_warning:nnnV + { markdown } + { repeatedly-loaded-plain-tex-theme } + { #1 } + \l_tmpa_tl + } + { + \msg_info:nnn + { markdown } + { loading-plain-tex-theme } + { #1 } + \prop_gput:Nnx + \g__markdown_plain_tex_loaded_themes_linenos_prop + { #1 } + { \tex_the:D \tex_inputlineno:D } + \file_input:n + { markdown theme #2 } + } + } +\msg_new:nnn + { markdown } + { loading-plain-tex-theme } + { Loading~plain~TeX~Markdown~theme~#1 } +\msg_new:nnn + { markdown } + { repeatedly-loaded-plain-tex-theme } + { + Plain~TeX~Markdown~theme~#1~was~previously~ + loaded~on~line~#2,~not~loading~it~again + } +\cs_generate_variant:Nn + \prop_gput:Nnn + { Nnx } +\cs_gset_eq:NN + \__markdown_load_theme:nn + \__markdown_plain_tex_load_theme:nn +\cs_generate_variant:Nn + \__markdown_load_theme:nn + { nV } +\cs_new:Npn + \markdownLoadPlainTeXTheme + { + \tl_set:NV + \l_tmpa_tl + \g__markdown_current_theme_tl + \tl_reverse:N + \l_tmpa_tl + \tl_set:Ne + \l_tmpb_tl + { + \tl_tail:V + \l_tmpa_tl + } + \tl_reverse:N + \l_tmpb_tl + \str_set:NV + \l_tmpa_str + \l_tmpb_tl + \str_replace_all:Nnn + \l_tmpa_str + { / } + { _ } + \__markdown_plain_tex_load_theme:VV + \l_tmpb_tl + \l_tmpa_str + } +\cs_generate_variant:Nn + \tl_set:Nn + { Ne } +\cs_generate_variant:Nn + \__markdown_plain_tex_load_theme:nn + { VV } +\str_if_eq:VVT + \c__markdown_top_layer_tl + \c__markdown_option_layer_plain_tex_tl + { + \ExplSyntaxOff + \__markdown_if_option:nF + { noDefaults } + { + \__markdown_setup:n + {theme = witiko/markdown/defaults} + } + \ExplSyntaxOn + } \tl_new:N \g__markdown_formatted_lua_options_tl \cs_new:Nn \__markdown_format_lua_options: { @@ -2550,42 +3114,9 @@ local md = require("markdown") local convert = md.new(\markdownLuaOptions) }% -\ExplSyntaxOn -\prg_new_conditional:Nnn - \__markdown_if_option:n - { TF, T, F } - { - \__markdown_get_option_type:nN - { #1 } - \l_tmpa_tl - \str_if_eq:NNF - \l_tmpa_tl - \c__markdown_option_type_boolean_tl - { - \msg_error:nnxx - { markdown } - { expected-boolean-option } - { #1 } - { \l_tmpa_tl } - } - \__markdown_get_option_value:nN - { #1 } - \l_tmpa_tl - \str_if_eq:NNTF - \l_tmpa_tl - \c__markdown_option_value_true_tl - { \prg_return_true: } - { \prg_return_false: } - } -\msg_new:nnn - { markdown } - { expected-boolean-option } - { - Option~#1~has~type~#2,~ - but~a~boolean~was~expected. - } -\let\markdownIfOption=\__markdown_if_option:nTF -\ExplSyntaxOff +\def\markdownCleanup{% + lfs.rmdir(cacheDir) +}% \csname newread\endcsname\markdownInputFileStream \csname newwrite\endcsname\markdownOutputFileStream \begingroup @@ -2656,118 +3187,54 @@ ^^M}@ |endgroup \ExplSyntaxOn -\int_compare:nT - { \markdownMode = 3 } +\cs_new:Npn + \markdownLuaExecute + #1 { - \markdownInfo{Using~mode~3:~The~lt3luabridge~package} - \file_input:n { lt3luabridge.tex } - \cs_new:Npn - \markdownLuaExecute - { \luabridgeExecute } + \int_compare:nNnT + { \g_luabridge_method_int } + = + { \c_luabridge_method_shell_int } + { + \sys_if_shell_unrestricted:F + { + \sys_if_shell:TF + { + \msg_error:nn + { markdown } + { restricted-shell-access } + } + { + \msg_error:nn + { markdown } + { disabled-shell-access } + } + } + } + \luabridge_now:e + { #1 } } +\cs_generate_variant:Nn + \msg_new:nnnn + { nnnV } +\tl_set:Nn + \l_tmpa_tl + { + You~may~need~to~run~TeX~with~the~--shell-escape~or~the~ + --enable-write18~flag,~or~write~shell_escape=t~in~the~ + texmf.cnf~file. + } +\msg_new:nnnV + { markdown } + { restricted-shell-access } + { Shell~escape~is~restricted } + \l_tmpa_tl +\msg_new:nnnV + { markdown } + { disabled-shell-access } + { Shell~escape~is~disabled } + \l_tmpa_tl \ExplSyntaxOff -\ifnum\markdownMode<2\relax -\ifnum\markdownMode=0\relax - \markdownWarning{Using mode 0: Shell escape via write18 - (deprecated, to be removed in Markdown 3.0.0)}% -\else - \markdownWarning{Using mode 1: Shell escape via os.execute - (deprecated, to be removed in Markdown 3.0.0)}% -\fi -\ifx\pdfshellescape\undefined - \ifx\shellescape\undefined - \ifnum\markdownMode=0\relax - \def\markdownExecuteShellEscape{1}% - \else - \def\markdownExecuteShellEscape{% - \directlua{tex.sprint(status.shell_escape or "1")}}% - \fi - \else - \let\markdownExecuteShellEscape\shellescape - \fi -\else - \let\markdownExecuteShellEscape\pdfshellescape -\fi -\ifnum\markdownMode=0\relax - \def\markdownExecuteDirect#1{\immediate\write18{#1}}% -\else - \def\markdownExecuteDirect#1{% - \directlua{os.execute("\luaescapestring{#1}")}}% -\fi -\def\markdownExecute#1{% - \ifnum\markdownExecuteShellEscape=1\relax - \markdownExecuteDirect{#1}% - \else - \markdownError{I can not access the shell}{Either run the TeX - compiler with the --shell-escape or the --enable-write18 flag, - or set shell_escape=t in the texmf.cnf file}% - \fi}% -\begingroup - \catcode`|=0% - \catcode`\\=12% - |gdef|markdownLuaExecute#1{% - |immediate|openout|markdownOutputFileStream=% - |markdownOptionHelperScriptFileName - |markdownInfo{Writing a helper Lua script to the file - "|markdownOptionHelperScriptFileName"}% - |immediate|write|markdownOutputFileStream{% - local ran_ok, error = pcall(function() - local kpse - (function() - local should_initialize = package.loaded.kpse == nil - or tex.initialize - local ran_ok - ran_ok, kpse = pcall(require, "kpse") - if ran_ok and should_initialize then - kpse.set_program_name("luatex") - end - end)() - #1 - end) - if not ran_ok then - local file = io.open("% - |markdownOptionOutputDir - /|markdownOptionErrorTempFileName", "w") - if file then - file:write(error .. "\n") - file:close() - end - print('\\markdownError{An error was encountered while executing - Lua code}{For further clues, examine the file - "|markdownOptionOutputDir - /|markdownOptionErrorTempFileName"}') - end}% - |immediate|closeout|markdownOutputFileStream - |markdownInfo{Executing a helper Lua script from the file - "|markdownOptionHelperScriptFileName" and storing the result in the - file "|markdownOptionOutputTempFileName"}% - |markdownExecute{texlua "|markdownOptionOutputDir - /|markdownOptionHelperScriptFileName" > % - "|markdownOptionOutputDir - /|markdownOptionOutputTempFileName"}% - |input|markdownOptionOutputTempFileName|relax}% -|endgroup -\fi -\ifnum\markdownMode=2\relax - \markdownWarning{Using mode 2: Direct Lua access - (deprecated, to be removed in Markdown 3.0.0)}% -\begingroup - \catcode`|=0% - \catcode`\\=12% - |gdef|markdownLuaExecute#1{% - |directlua{% - local function print(input) - local output = {} - for line in input:gmatch("[^\r\n]+") do - table.insert(output, line) - end - tex.print(output) - end - #1 - }% - }% -|endgroup -\fi \begingroup \catcode`|=0% \catcode`\\=12% @@ -2797,8 +3264,10 @@ [[Could not open file "&1" for reading]]) local input = assert(file:read("*a")) assert(file:close()) - print(convert(input))}% - |global|advance|markdownOptionFrozenCacheCounter by 1|relax + print(convert(input)) + |markdownCleanup}% + |markdownIfOption{finalizeCache}{% + |global|advance|markdownOptionFrozenCacheCounter by 1|relax}{}% }% |endgroup }% diff --git a/Master/texmf-dist/tex/generic/markdown/markdownthemewitiko_markdown_defaults.tex b/Master/texmf-dist/tex/generic/markdown/markdownthemewitiko_markdown_defaults.tex new file mode 100644 index 00000000000..dc8a90917f6 --- /dev/null +++ b/Master/texmf-dist/tex/generic/markdown/markdownthemewitiko_markdown_defaults.tex @@ -0,0 +1,321 @@ +%% +%% This is file `markdownthemewitiko_markdown_defaults.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% markdown.dtx (with options: `themes-witiko-markdown-defaults-tex') +%% +%% Copyright (C) 2016-2024 Vít Starý Novotný +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% +%% http://www.latex-project.org/lppl.txt +%% +%% This work has the LPPL maintenance status `maintained'. +%% The Current Maintainer of this work is Vít Starý Novotný. +%% +%% Send bug reports, requests for additions and questions +%% either to the GitHub issue tracker at +%% +%% https://github.com/Witiko/markdown/issues +%% +%% or to the e-mail address <witiko@mail.muni.cz>. +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\def\markdownRendererInterblockSeparatorPrototype{\par}% +\def\markdownRendererParagraphSeparatorPrototype{% + \markdownRendererInterblockSeparator}% +\def\markdownRendererHardLineBreakPrototype{\hfil\break}% +\def\markdownRendererSoftLineBreakPrototype{ }% +\let\markdownRendererEllipsisPrototype\dots +\def\markdownRendererNbspPrototype{~}% +\def\markdownRendererLeftBracePrototype{\char`\{}% +\def\markdownRendererRightBracePrototype{\char`\}}% +\def\markdownRendererDollarSignPrototype{\char`$}% +\def\markdownRendererPercentSignPrototype{\char`\%}% +\def\markdownRendererAmpersandPrototype{\&}% +\def\markdownRendererUnderscorePrototype{\char`_}% +\def\markdownRendererHashPrototype{\char`\#}% +\def\markdownRendererCircumflexPrototype{\char`^}% +\def\markdownRendererBackslashPrototype{\char`\\}% +\def\markdownRendererTildePrototype{\char`~}% +\def\markdownRendererPipePrototype{|}% +\def\markdownRendererCodeSpanPrototype#1{{\tt#1}}% +\def\markdownRendererLinkPrototype#1#2#3#4{#2}% +\def\markdownRendererContentBlockPrototype#1#2#3#4{% + \markdownInput{#3}}% +\def\markdownRendererContentBlockOnlineImagePrototype{% + \markdownRendererImage}% +\def\markdownRendererContentBlockCodePrototype#1#2#3#4#5{% + \markdownRendererInputFencedCode{#3}{#2}{#2}}% +\def\markdownRendererImagePrototype#1#2#3#4{#2}% +\def\markdownRendererUlBeginPrototype{}% +\def\markdownRendererUlBeginTightPrototype{}% +\def\markdownRendererUlItemPrototype{}% +\def\markdownRendererUlItemEndPrototype{}% +\def\markdownRendererUlEndPrototype{}% +\def\markdownRendererUlEndTightPrototype{}% +\def\markdownRendererOlBeginPrototype{}% +\def\markdownRendererOlBeginTightPrototype{}% +\def\markdownRendererFancyOlBeginPrototype#1#2{\markdownRendererOlBegin}% +\def\markdownRendererFancyOlBeginTightPrototype#1#2{\markdownRendererOlBeginTight}% +\def\markdownRendererOlItemPrototype{}% +\def\markdownRendererOlItemWithNumberPrototype#1{}% +\def\markdownRendererOlItemEndPrototype{}% +\def\markdownRendererFancyOlItemPrototype{\markdownRendererOlItem}% +\def\markdownRendererFancyOlItemWithNumberPrototype{\markdownRendererOlItemWithNumber}% +\def\markdownRendererFancyOlItemEndPrototype{}% +\def\markdownRendererOlEndPrototype{}% +\def\markdownRendererOlEndTightPrototype{}% +\def\markdownRendererFancyOlEndPrototype{\markdownRendererOlEnd}% +\def\markdownRendererFancyOlEndTightPrototype{\markdownRendererOlEndTight}% +\def\markdownRendererDlBeginPrototype{}% +\def\markdownRendererDlBeginTightPrototype{}% +\def\markdownRendererDlItemPrototype#1{#1}% +\def\markdownRendererDlItemEndPrototype{}% +\def\markdownRendererDlDefinitionBeginPrototype{}% +\def\markdownRendererDlDefinitionEndPrototype{\par}% +\def\markdownRendererDlEndPrototype{}% +\def\markdownRendererDlEndTightPrototype{}% +\def\markdownRendererEmphasisPrototype#1{{\it#1}}% +\def\markdownRendererStrongEmphasisPrototype#1{{\bf#1}}% +\def\markdownRendererBlockQuoteBeginPrototype{\begingroup\it}% +\def\markdownRendererBlockQuoteEndPrototype{\endgroup\par}% +\def\markdownRendererLineBlockBeginPrototype{\begingroup\parindent=0pt}% +\def\markdownRendererLineBlockEndPrototype{\endgroup}% +\def\markdownRendererInputVerbatimPrototype#1{% + \par{\tt\input#1\relax{}}\par}% +\def\markdownRendererInputFencedCodePrototype#1#2#3{% + \markdownRendererInputVerbatim{#1}}% +\def\markdownRendererHeadingOnePrototype#1{#1}% +\def\markdownRendererHeadingTwoPrototype#1{#1}% +\def\markdownRendererHeadingThreePrototype#1{#1}% +\def\markdownRendererHeadingFourPrototype#1{#1}% +\def\markdownRendererHeadingFivePrototype#1{#1}% +\def\markdownRendererHeadingSixPrototype#1{#1}% +\def\markdownRendererThematicBreakPrototype{}% +\def\markdownRendererNotePrototype#1{#1}% +\def\markdownRendererCitePrototype#1{}% +\def\markdownRendererTextCitePrototype#1{}% +\def\markdownRendererTickedBoxPrototype{[X]}% +\def\markdownRendererHalfTickedBoxPrototype{[/]}% +\def\markdownRendererUntickedBoxPrototype{[ ]}% +\def\markdownRendererStrikeThroughPrototype#1{#1}% +\def\markdownRendererSuperscriptPrototype#1{#1}% +\def\markdownRendererSubscriptPrototype#1{#1}% +\def\markdownRendererDisplayMathPrototype#1{$$#1$$}% +\def\markdownRendererInlineMathPrototype#1{$#1$}% +\ExplSyntaxOn +\cs_gset:Npn + \markdownRendererHeaderAttributeContextBeginPrototype + { + \group_begin: + \color_group_begin: + } +\cs_gset:Npn + \markdownRendererHeaderAttributeContextEndPrototype + { + \color_group_end: + \group_end: + } +\cs_gset_eq:NN + \markdownRendererBracketedSpanAttributeContextBeginPrototype + \markdownRendererHeaderAttributeContextBeginPrototype +\cs_gset_eq:NN + \markdownRendererBracketedSpanAttributeContextEndPrototype + \markdownRendererHeaderAttributeContextEndPrototype +\cs_gset_eq:NN + \markdownRendererFencedDivAttributeContextBeginPrototype + \markdownRendererHeaderAttributeContextBeginPrototype +\cs_gset_eq:NN + \markdownRendererFencedDivAttributeContextEndPrototype + \markdownRendererHeaderAttributeContextEndPrototype +\cs_gset_eq:NN + \markdownRendererFencedCodeAttributeContextBeginPrototype + \markdownRendererHeaderAttributeContextBeginPrototype +\cs_gset_eq:NN + \markdownRendererFencedCodeAttributeContextEndPrototype + \markdownRendererHeaderAttributeContextEndPrototype +\cs_gset:Npn + \markdownRendererReplacementCharacterPrototype + { \codepoint_str_generate:n { fffd } } +\ExplSyntaxOff +\def\markdownRendererSectionBeginPrototype{}% +\def\markdownRendererSectionEndPrototype{}% +\ExplSyntaxOn +\cs_new:Nn + \__markdown_plain_tex_default_input_raw_inline_renderer_prototype:nn + { + \str_case:nn + { #2 } + { + { md } { \markdownInput{#1} } + { tex } { \markdownEscape{#1} \unskip } + } + } +\cs_new:Nn + \__markdown_plain_tex_default_input_raw_block_renderer_prototype:nn + { + \str_case:nn + { #2 } + { + { md } { \markdownInput{#1} } + { tex } { \markdownEscape{#1} } + } + } +\cs_gset:Npn + \markdownRendererInputRawInlinePrototype#1#2 + { + \__markdown_plain_tex_default_input_raw_inline_renderer_prototype:nn + { #1 } + { #2 } + } +\cs_gset:Npn + \markdownRendererInputRawBlockPrototype#1#2 + { + \__markdown_plain_tex_default_input_raw_block_renderer_prototype:nn + { #1 } + { #2 } + } +\seq_new:N \g__markdown_jekyll_data_datatypes_seq +\tl_const:Nn \c__markdown_jekyll_data_sequence_tl { sequence } +\tl_const:Nn \c__markdown_jekyll_data_mapping_tl { mapping } +\tl_const:Nn \c__markdown_jekyll_data_scalar_tl { scalar } +\seq_new:N \g__markdown_jekyll_data_wildcard_absolute_address_seq +\cs_new:Nn \markdown_jekyll_data_push_address_segment:n + { + \seq_if_empty:NF + \g__markdown_jekyll_data_datatypes_seq + { + \seq_get_right:NN + \g__markdown_jekyll_data_datatypes_seq + \l_tmpa_tl + \str_if_eq:NNTF + \l_tmpa_tl + \c__markdown_jekyll_data_sequence_tl + { + \seq_put_right:Nn + \g__markdown_jekyll_data_wildcard_absolute_address_seq + { * } + } + { + \seq_put_right:Nn + \g__markdown_jekyll_data_wildcard_absolute_address_seq + { #1 } + } + } + } +\tl_new:N \g__markdown_jekyll_data_wildcard_absolute_address_tl +\tl_new:N \g__markdown_jekyll_data_wildcard_relative_address_tl +\cs_new:Nn \markdown_jekyll_data_concatenate_address:NN + { + \seq_pop_left:NN #1 \l_tmpa_tl + \tl_set:Nx #2 { / \seq_use:Nn #1 { / } } + \seq_put_left:NV #1 \l_tmpa_tl + } +\cs_new:Nn \markdown_jekyll_data_update_address_tls: + { + \markdown_jekyll_data_concatenate_address:NN + \g__markdown_jekyll_data_wildcard_absolute_address_seq + \g__markdown_jekyll_data_wildcard_absolute_address_tl + \seq_get_right:NN + \g__markdown_jekyll_data_wildcard_absolute_address_seq + \g__markdown_jekyll_data_wildcard_relative_address_tl + } +\cs_new:Nn \markdown_jekyll_data_push:nN + { + \markdown_jekyll_data_push_address_segment:n + { #1 } + \seq_put_right:NV + \g__markdown_jekyll_data_datatypes_seq + #2 + \markdown_jekyll_data_update_address_tls: + } +\cs_new:Nn \markdown_jekyll_data_pop: + { + \seq_pop_right:NN + \g__markdown_jekyll_data_wildcard_absolute_address_seq + \l_tmpa_tl + \seq_pop_right:NN + \g__markdown_jekyll_data_datatypes_seq + \l_tmpa_tl + \markdown_jekyll_data_update_address_tls: + } +\cs_new:Nn \markdown_jekyll_data_set_keyval:nn + { + \keys_set_known:nn + { markdown/jekyllData } + { { #1 } = { #2 } } + } +\cs_generate_variant:Nn + \markdown_jekyll_data_set_keyval:nn + { Vn } +\cs_new:Nn \markdown_jekyll_data_set_keyvals:nn + { + \markdown_jekyll_data_push:nN + { #1 } + \c__markdown_jekyll_data_scalar_tl + \markdown_jekyll_data_set_keyval:Vn + \g__markdown_jekyll_data_wildcard_absolute_address_tl + { #2 } + \markdown_jekyll_data_set_keyval:Vn + \g__markdown_jekyll_data_wildcard_relative_address_tl + { #2 } + \markdown_jekyll_data_pop: + } +\def\markdownRendererJekyllDataSequenceBeginPrototype#1#2{ + \markdown_jekyll_data_push:nN + { #1 } + \c__markdown_jekyll_data_sequence_tl +} +\def\markdownRendererJekyllDataMappingBeginPrototype#1#2{ + \markdown_jekyll_data_push:nN + { #1 } + \c__markdown_jekyll_data_mapping_tl +} +\def\markdownRendererJekyllDataSequenceEndPrototype{ + \markdown_jekyll_data_pop: +} +\def\markdownRendererJekyllDataMappingEndPrototype{ + \markdown_jekyll_data_pop: +} +\def\markdownRendererJekyllDataBooleanPrototype#1#2{ + \markdown_jekyll_data_set_keyvals:nn + { #1 } + { #2 } +} +\def\markdownRendererJekyllDataEmptyPrototype#1{} +\def\markdownRendererJekyllDataNumberPrototype#1#2{ + \markdown_jekyll_data_set_keyvals:nn + { #1 } + { #2 } +} +\def\markdownRendererJekyllDataStringPrototype#1#2{ + \markdown_jekyll_data_set_keyvals:nn + { #1 } + { #2 } +} +\ExplSyntaxOff +\endinput +%% +%% End of file `markdownthemewitiko_markdown_defaults.tex'. diff --git a/Master/texmf-dist/tex/latex/markdown/markdownthemewitiko_tilde.sty b/Master/texmf-dist/tex/generic/markdown/markdownthemewitiko_tilde.tex index 83dcd4015bf..90d34446f00 100644 --- a/Master/texmf-dist/tex/latex/markdown/markdownthemewitiko_tilde.sty +++ b/Master/texmf-dist/tex/generic/markdown/markdownthemewitiko_tilde.tex @@ -1,12 +1,12 @@ %% -%% This is file `markdownthemewitiko_tilde.sty', +%% This is file `markdownthemewitiko_tilde.tex', %% generated with the docstrip utility. %% %% The original source files were: %% -%% markdown.dtx (with options: `latex-themes-witiko-tilde') +%% markdown.dtx (with options: `themes-witiko-tilde') %% -%% Copyright (C) 2016-2023 Vít Novotný +%% Copyright (C) 2016-2024 Vít Starý Novotný %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3c @@ -16,7 +16,7 @@ %% http://www.latex-project.org/lppl.txt %% %% This work has the LPPL maintenance status `maintained'. -%% The Current Maintainer of this work is Vít Novotný. +%% The Current Maintainer of this work is Vít Starý Novotný. %% %% Send bug reports, requests for additions and questions %% either to the GitHub issue tracker at @@ -42,8 +42,11 @@ %% %% The names of the source files used are shown above. %% -\ProvidesPackage{markdownthemewitiko_tilde}[2021/03/22]% -\renewcommand\markdownRendererTildePrototype{~}% +\markdownSetup { + rendererPrototypes = { + tilde = {~}, + }, +} \endinput %% -%% End of file `markdownthemewitiko_tilde.sty'. +%% End of file `markdownthemewitiko_tilde.tex'. diff --git a/Master/texmf-dist/tex/latex/markdown/markdown.sty b/Master/texmf-dist/tex/latex/markdown/markdown.sty index 661ea377553..4f2bcd4bdba 100644 --- a/Master/texmf-dist/tex/latex/markdown/markdown.sty +++ b/Master/texmf-dist/tex/latex/markdown/markdown.sty @@ -6,7 +6,7 @@ %% %% markdown.dtx (with options: `latex') %% -%% Copyright (C) 2016-2023 Vít Novotný +%% Copyright (C) 2016-2024 Vít Starý Novotný %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3c @@ -16,7 +16,7 @@ %% http://www.latex-project.org/lppl.txt %% %% This work has the LPPL maintenance status `maintained'. -%% The Current Maintainer of this work is Vít Novotný. +%% The Current Maintainer of this work is Vít Starý Novotný. %% %% Send bug reports, requests for additions and questions %% either to the GitHub issue tracker at @@ -43,649 +43,93 @@ %% The names of the source files used are shown above. %% \RequirePackage{expl3} -\newcommand\markdownInfo[1]{\PackageInfo{markdown}{#1}}% -\newcommand\markdownWarning[1]{\PackageWarning{markdown}{#1}}% -\newcommand\markdownError[2]{\PackageError{markdown}{#1}{#2.}}% -\input markdown/markdown -\newenvironment{markdown}\relax\relax -\newenvironment{markdown*}[1]\relax\relax \ExplSyntaxOn -\cs_new:Nn - \__markdown_setup:n - { - \keys_set:nn - { markdown/latex-options } - { #1 } - } -\let\markdownSetup=\__markdown_setup:n -\ExplSyntaxOff -\ExplSyntaxOn -\cs_new:Nn - \__markdown_latex_setup_snippet:nn - { - \markdownIfSnippetExists - { #1 } - { - \markdownWarning - {Redefined~snippet~\markdownLaTeXThemeName#1} - \csname markdownLaTeXSetupSnippet% - \markdownLaTeXThemeName#1\endcsname={#2} - } - { - \newtoks\next - \next={#2} - \expandafter\let\csname markdownLaTeXSetupSnippet% - \markdownLaTeXThemeName#1\endcsname=\next - } - } -\let\markdownSetupSnippet=\__markdown_latex_setup_snippet:nn -\ExplSyntaxOff -\newcommand\markdownIfSnippetExists[3]{% - \@ifundefined - {markdownLaTeXSetupSnippet\markdownLaTeXThemeName#1}% - {#3}{#2}}% -\ExplSyntaxOn -\seq_new:N \g__markdown_latex_options_seq -\prop_new:N \g__markdown_latex_option_types_prop -\prop_new:N \g__markdown_default_latex_options_prop \tl_const:Nn \c__markdown_option_layer_latex_tl { latex } -\seq_gput_right:NV \g__markdown_option_layers_seq \c__markdown_option_layer_latex_tl -\cs_new:Nn - \__markdown_add_latex_option:nnn - { - \__markdown_add_option:Vnnn - \c__markdown_option_layer_latex_tl - { #1 } - { #2 } - { #3 } - } -\__markdown_add_latex_option:nnn - { plain } - { boolean } - { false } -\ExplSyntaxOff -\newif\ifmarkdownLaTeXLoaded - \markdownLaTeXLoadedfalse -\AtEndOfPackage{\markdownLaTeXLoadedtrue} -\ExplSyntaxOn -\tl_new:N \markdownLaTeXThemePackageName -\cs_new:Nn - \__markdown_set_latex_theme:n - { - \str_if_in:nnF - { #1 } - { / } - { - \markdownError - { Won't~load~theme~with~unqualified~name~#1 } - { Theme~names~must~contain~at~least~one~forward~slash } - } - \str_if_in:nnT - { #1 } - { _ } - { - \markdownError - { Won't~load~theme~with~an~underscore~in~its~name~#1 } - { Theme~names~must~not~contain~underscores~in~their~names } - } - \tl_set:Nn \markdownLaTeXThemePackageName { #1 } - \str_replace_all:Nnn - \markdownLaTeXThemePackageName - { / } - { _ } - \edef\markdownLaTeXThemePackageName{ - markdowntheme\markdownLaTeXThemePackageName} - \expandafter\markdownLaTeXThemeLoad\expandafter{ - \markdownLaTeXThemePackageName}{#1/} - } -\keys_define:nn - { markdown/latex-options } - { - import .code:n = { - \tl_set:Nn - \l_tmpa_tl - { #1 } - \tl_replace_all:NnV - \l_tmpa_tl - { / } - \c_backslash_str - \keys_set:nV - { markdown/latex-options/import } - \l_tmpa_tl - }, - } -\cs_generate_variant:Nn - \tl_replace_all:Nnn - { NnV } -\keys_define:nn - { markdown/latex-options } - { - theme .code:n = { \__markdown_set_latex_theme:n { #1 } }, - } -\ExplSyntaxOff -\ExplSyntaxOn -\@onlypreamble - \__markdown_set_latex_theme:n -\ExplSyntaxOff -\ExplSyntaxOn -\keys_define:nn - { markdown/latex-options } - { - snippet .code:n = { - \markdownIfSnippetExists{#1} - { - \expandafter\markdownSetup\expandafter{ - \the\csname markdownLaTeXSetupSnippet - \markdownLaTeXThemeName#1\endcsname} - }{ - \markdownError - {Can't~invoke~setup~snippet~#1} - {The~setup~snippet~is~undefined} - } - } - } -\ExplSyntaxOff -\ExplSyntaxOn -\tl_new:N - \l__markdown_latex_import_current_theme_tl -\keys_define:nn - { markdown/latex-options/import } - { - unknown .default:n = {}, - unknown .code:n = { - \tl_set_eq:NN - \l__markdown_latex_import_current_theme_tl - \l_keys_key_str - \tl_replace_all:NVn - \l__markdown_latex_import_current_theme_tl - \c_backslash_str - { / } - \__markdown_set_latex_theme:V - \l__markdown_latex_import_current_theme_tl - \clist_map_inline:nn - { #1 } - { - \regex_extract_once:nnNTF - { ^(.*?)\s+as\s+(.*?)$ } - { ##1 } - \l_tmpa_seq - { - \seq_pop:NN - \l_tmpa_seq - \l_tmpa_tl - \seq_pop:NN - \l_tmpa_seq - \l_tmpa_tl - \seq_pop:NN - \l_tmpa_seq - \l_tmpb_tl - } - { - \tl_set:Nn - \l_tmpa_tl - { ##1 } - \tl_set:Nn - \l_tmpb_tl - { ##1 } - } - \tl_put_left:Nn - \l_tmpa_tl - { / } - \tl_put_left:NV - \l_tmpa_tl - \l__markdown_latex_import_current_theme_tl - \__markdown_latex_setup_snippet:Vx - \l_tmpb_tl - { snippet = { \l_tmpa_tl } } - } - }, - } -\cs_generate_variant:Nn - \tl_replace_all:Nnn - { NVn } -\cs_generate_variant:Nn - \__markdown_set_latex_theme:n - { V } -\cs_generate_variant:Nn - \__markdown_latex_setup_snippet:nn - { Vx } -\ExplSyntaxOff -\ExplSyntaxOn -\cs_new:Nn \__markdown_latex_define_option_commands_and_keyvals: - { - \seq_map_inline:Nn - \g__markdown_latex_options_seq - { - \__markdown_plain_tex_define_option_command:n - { ##1 } - } - \seq_map_inline:Nn - \g__markdown_option_layers_seq - { - \seq_map_inline:cn - { g__markdown_ ##1 _options_seq } - { - \__markdown_with_various_cases:nn - { ####1 } - { - \__markdown_latex_define_option_keyval:nnn - { ##1 } - { ####1 } - { ########1 } - } - } - } - } -\cs_new:Nn \__markdown_latex_define_option_keyval:nnn - { - \prop_get:cnN - { g__markdown_ #1 _option_types_prop } - { #2 } - \l_tmpa_tl - \keys_define:nn - { markdown/latex-options } - { - #3 .code:n = { - \__markdown_set_option_value:nn - { #2 } - { ##1 } - }, - } - \str_if_eq:VVT - \l_tmpa_tl - \c__markdown_option_type_boolean_tl - { - \keys_define:nn - { markdown/latex-options } - { - #3 .default:n = { true }, - } - } - \str_if_eq:VVT - \l_tmpa_tl - \c__markdown_option_type_clist_tl - { - \tl_set:Nn - \l_tmpa_tl - { #3 } - \tl_reverse:N - \l_tmpa_tl - \str_if_eq:enF - { - \tl_head:V - \l_tmpa_tl - } - { s } - { - \msg_error:nnn - { markdown } - { malformed-name-for-clist-option } - { #3 } - } - \tl_set:Nx - \l_tmpa_tl - { - \tl_tail:V - \l_tmpa_tl - } - \tl_reverse:N - \l_tmpa_tl - \tl_put_right:Nn - \l_tmpa_tl - { - .code:n = { - \__markdown_get_option_value:nN - { #2 } - \l_tmpa_tl - \clist_set:NV - \l_tmpa_clist - { \l_tmpa_tl, { ##1 } } - \__markdown_set_option_value:nV - { #2 } - \l_tmpa_clist - } - } - \keys_define:nV - { markdown/latex-options } - \l_tmpa_tl - } - } \cs_generate_variant:Nn - \clist_set:Nn + \tl_const:Nn { NV } -\cs_generate_variant:Nn - \keys_define:nn - { nV } -\cs_generate_variant:Nn - \__markdown_set_option_value:nn - { nV } -\prg_generate_conditional_variant:Nnn - \str_if_eq:nn - { en } - { F } -\msg_new:nnn - { markdown } - { malformed-name-for-clist-option } +\tl_if_exist:NF + \c__markdown_top_layer_tl { - Clist~option~name~#1~does~not~end~with~-s. + \tl_const:NV + \c__markdown_top_layer_tl + \c__markdown_option_layer_latex_tl } -\__markdown_latex_define_option_commands_and_keyvals: \ExplSyntaxOff +\input markdown/markdown +\newenvironment{markdown}\relax\relax +\newenvironment{markdown*}[1]\relax\relax \DeclareOption{finalizecache}{\markdownSetup{finalizeCache}} \DeclareOption{frozencache}{\markdownSetup{frozenCache}} \ExplSyntaxOn -\cs_new:Nn \__markdown_latex_define_renderers: +\str_if_eq:VVT + \c__markdown_top_layer_tl + \c__markdown_option_layer_latex_tl { - \seq_map_function:NN - \g__markdown_renderers_seq - \__markdown_latex_define_renderer:n + \__markdown_define_option_commands_and_keyvals: + \__markdown_define_renderers: + \__markdown_define_renderer_prototypes: } -\cs_new:Nn \__markdown_latex_define_renderer:n - { - \__markdown_renderer_tl_to_csname:nN - { #1 } - \l_tmpa_tl - \prop_get:NnN - \g__markdown_renderer_arities_prop - { #1 } - \l_tmpb_tl - \__markdown_latex_define_renderer:ncV - { #1 } - { \l_tmpa_tl } - \l_tmpb_tl +\ExplSyntaxOff +\newif\ifmarkdownLaTeXLoaded + \markdownLaTeXLoadedfalse +\AtEndOfPackage{ + \markdownLaTeXLoadedtrue + \markdownIfOption{noDefaults}{}{ + \markdownSetup{theme=witiko/markdown/defaults} } -\cs_new:Nn \__markdown_renderer_tl_to_csname:nN +} +\def\markdownVersionSpace{ }% +\ProvidesPackage{markdown}[\markdownLastModified\markdownVersionSpace v% + \markdownVersion\markdownVersionSpace markdown renderer]% +\let\markdownInputPlainTeX\markdownInput +\renewcommand\markdownInput[2][]{% + \begingroup + \markdownSetup{#1}% + \markdownInputPlainTeX{#2}% + \endgroup}% +\ExplSyntaxOn +\renewenvironment + { markdown } { - \tl_set:Nn - \l_tmpa_tl - { \str_uppercase:n { #1 } } - \tl_set:Nx - #2 + \group_begin: + \char_set_catcode_active:n { 13 } + \char_set_catcode_letter:n { 35 } + \peek_regex_replace_once:nnF + { \ *\[([^]]*)\][^\r]* } { - markdownRenderer - \tl_head:f { \l_tmpa_tl } - \tl_tail:n { #1 } + \c { group_end: } + \c { tl_set_rescan:Nnn } \c { l_tmpa_tl } { } { \1 } + \c { __markdown_setup:V } \c { l_tmpa_tl } + \c { markdownReadAndConvert@markdown } { } } - } -\cs_new:Nn \__markdown_latex_define_renderer:nNn - { - \__markdown_with_various_cases:nn - { #1 } { - \keys_define:nn - { markdown/latex-options/renderers } - { - ##1 .code:n = { - \cs_generate_from_arg_count:NNnn - #2 - \cs_set:Npn - { #3 } - { ####1 } - }, - } + \group_end: + \markdownReadAndConvert@markdown { } } } -\cs_generate_variant:Nn - \__markdown_latex_define_renderer:nNn - { ncV } -\ExplSyntaxOff -\ExplSyntaxOn -\tl_new:N - \l__markdown_renderer_definition_tl -\keys_define:nn - { markdown/latex-options/renderers } + { \markdownEnd } +\renewenvironment + { markdown* } + [ 1 ] { - unknown .code:n = { - \regex_match:nVTF - { \* } - \l_keys_key_str - { - \tl_set:Nn - \l__markdown_renderer_definition_tl - { #1 } - \tl_set:NV - \l_tmpa_tl - \l_keys_key_str - \regex_replace_all:nnN - { \* } - { .* } - \l_tmpa_tl - \regex_set:NV - \l_tmpa_regex - \l_tmpa_tl - \int_zero:N - \l_tmpa_int - \seq_map_inline:Nn - \g__markdown_renderers_seq - { - \__markdown_with_various_cases:nn - { ##1 } - { - \regex_match:NnT - \l_tmpa_regex - { ####1 } - { - \__markdown_renderer_tl_to_csname:nN - { ##1 } - \l_tmpa_tl - \prop_get:NnN - \g__markdown_renderer_arities_prop - { ##1 } - \l_tmpb_tl - \cs_generate_from_arg_count:cNVV - { \l_tmpa_tl } - \cs_set:Npn - \l_tmpb_tl - \l__markdown_renderer_definition_tl - \int_incr:N - \l_tmpa_int - \__markdown_with_various_cases_break: - } - } - } - \int_compare:nNnT - { \l_tmpa_int } = { 0 } - { - \msg_error:nnV - { markdown } - { nonmatched-renderer-wildcard } - \l_keys_key_str - } - } - { - \msg_error:nnV - { markdown } - { undefined-renderer } - \l_keys_key_str - } - }, - } -\msg_new:nnn - { markdown } - { undefined-renderer } - { - Renderer~#1~is~undefined. - } -\msg_new:nnn - { markdown } - { nonmatched-renderer-wildcard } - { - Wildcard~#1~matches~no~renderers. - } -\cs_generate_variant:Nn - \regex_set:Nn - { NV } -\cs_generate_variant:Nn - \cs_generate_from_arg_count:NNnn - { cNVV } -\cs_generate_variant:Nn - \msg_error:nnn - { nnV } -\prg_generate_conditional_variant:Nnn - \regex_match:nn - { nV } - { TF } -\ExplSyntaxOff -\ExplSyntaxOn -\cs_new:Nn \__markdown_latex_define_renderer_prototypes: - { - \seq_map_function:NN - \g__markdown_renderers_seq - \__markdown_latex_define_renderer_prototype:n - } -\cs_new:Nn \__markdown_latex_define_renderer_prototype:n - { - \__markdown_renderer_prototype_tl_to_csname:nN - { #1 } - \l_tmpa_tl - \prop_get:NnN - \g__markdown_renderer_arities_prop + \msg_warning:nnn + { markdown } + { latex-markdown-star-deprecated } { #1 } - \l_tmpb_tl - \__markdown_latex_define_renderer_prototype:ncV - { #1 } - { \l_tmpa_tl } - \l_tmpb_tl - } -\cs_new:Nn \__markdown_latex_define_renderer_prototype:nNn - { - \__markdown_with_various_cases:nn + \__markdown_setup:n { #1 } - { - \keys_define:nn - { markdown/latex-options/renderer-prototypes } - { - ##1 .code:n = { - \cs_generate_from_arg_count:NNnn - #2 - \cs_set:Npn - { #3 } - { ####1 } - }, - } - } - } -\cs_generate_variant:Nn - \__markdown_latex_define_renderer_prototype:nNn - { ncV } -\ExplSyntaxOff -\ExplSyntaxOn -\tl_new:N - \l__markdown_renderer_prototype_definition_tl -\keys_define:nn - { markdown/latex-options/renderer-prototypes } - { - unknown .code:n = { - \regex_match:nVTF - { \* } - \l_keys_key_str - { - \tl_set:Nn - \l__markdown_renderer_prototype_definition_tl - { #1 } - \tl_set:NV - \l_tmpa_tl - \l_keys_key_str - \regex_replace_all:nnN - { \* } - { .* } - \l_tmpa_tl - \regex_set:NV - \l_tmpa_regex - \l_tmpa_tl - \int_zero:N - \l_tmpa_int - \seq_map_inline:Nn - \g__markdown_renderers_seq - { - \__markdown_with_various_cases:nn - { ##1 } - { - \regex_match:NnT - \l_tmpa_regex - { ####1 } - { - \__markdown_renderer_prototype_tl_to_csname:nN - { ##1 } - \l_tmpa_tl - \prop_get:NnN - \g__markdown_renderer_arities_prop - { ##1 } - \l_tmpb_tl - \cs_generate_from_arg_count:cNVV - { \l_tmpa_tl } - \cs_set:Npn - \l_tmpb_tl - \l__markdown_renderer_prototype_definition_tl - \int_incr:N - \l_tmpa_int - \__markdown_with_various_cases_break: - } - } - } - \int_compare:nNnT - { \l_tmpa_int } = { 0 } - { - \msg_error:nnV - { markdown } - { nonmatched-renderer-prototype-wildcard } - \l_keys_key_str - } - } - { - \msg_error:nnV - { markdown } - { undefined-renderer-prototype } - \l_keys_key_str - } - }, + \markdownReadAndConvert@markdown * } + { \markdownEnd } \msg_new:nnn { markdown } - { undefined-renderer-prototype } + { latex-markdown-star-deprecated } { - Renderer~prototype~#1~is~undefined. + The~markdown*~LaTeX~environment~has~been~deprecated~and~will~ + be~removed~in~the~next~major~version~of~the~Markdown~package. } -\msg_new:nnn - { markdown } - { nonmatched-renderer-prototype-wildcard } - { - Wildcard~#1~matches~no~renderer~prototypes. - } -\cs_generate_variant:Nn - \regex_set:Nn - { NV } -\cs_generate_variant:Nn - \cs_generate_from_arg_count:NNnn - { cNVV } -\cs_generate_variant:Nn - \msg_error:nnn - { nnV } -\prg_generate_conditional_variant:Nnn - \regex_match:nn - { nV } - { TF } \ExplSyntaxOff -\def\markdownVersionSpace{ }% -\ProvidesPackage{markdown}[\markdownLastModified\markdownVersionSpace v% - \markdownVersion\markdownVersionSpace markdown renderer]% -\ExplSyntaxOn -\__markdown_latex_define_renderers: -\__markdown_latex_define_renderer_prototypes: -\ExplSyntaxOff -\let\markdownInputPlainTeX\markdownInput -\renewcommand\markdownInput[2][]{% - \begingroup - \markdownSetup{#1}% - \markdownInputPlainTeX{#2}% - \endgroup}% -\renewenvironment{markdown}{% - \markdownReadAndConvert@markdown{}}{% - \markdownEnd}% -\renewenvironment{markdown*}[1]{% - \markdownSetup{#1}% - \markdownReadAndConvert@markdown*}{% - \markdownEnd}% \begingroup \catcode`\|=0\catcode`\<=1\catcode`\>=2% \catcode`\\=12|catcode`|{=12|catcode`|}=12% @@ -693,991 +137,96 @@ |markdownReadAndConvert<\end{markdown#1}>% <|end<markdown#1>>>% |endgroup -\ExplSyntaxOn -\newcommand\markdownLaTeXThemeName{} -\seq_new:N \g__markdown_latex_themes_seq -\seq_gput_right:NV - \g__markdown_latex_themes_seq - \markdownLaTeXThemeName -\newcommand\markdownLaTeXThemeLoad[2]{ - \def\@tempa{% - \def\markdownLaTeXThemeName{#2} - \seq_gput_right:NV - \g__markdown_latex_themes_seq - \markdownLaTeXThemeName - \RequirePackage{#1} - \seq_pop_right:NN - \g__markdown_latex_themes_seq - \l_tmpa_tl - \seq_get_right:NN - \g__markdown_latex_themes_seq - \l_tmpa_tl - \exp_args:NNV - \def - \markdownLaTeXThemeName - \l_tmpa_tl} - \ifmarkdownLaTeXLoaded - \@tempa - \else - \exp_args:No - \AtEndOfPackage - { \@tempa } - \fi} -\ExplSyntaxOff \DeclareOption*{% \expandafter\markdownSetup\expandafter{\CurrentOption}}% \ProcessOptions\relax \ExplSyntaxOn -\keys_define:nn - { markdown/latex-options } - { - renderers .code:n = { - \keys_set:nn - { markdown/latex-options/renderers } - { #1 } - }, - } -\__markdown_with_various_cases:nn - { rendererPrototypes } - { - \keys_define:nn - { markdown/latex-options } - { - #1 .code:n = { - \keys_set:nn - { markdown/latex-options/renderer-prototypes } - { ##1 } - }, - } - } -\keys_define:nn - { markdown/latex-options } - { - code .code:n = { #1 }, - } -\__markdown_with_various_cases:nn - { jekyllDataRenderers } +\cs_gset:Nn + \__markdown_load_theme:nn { - \keys_define:nn - { markdown/latex-options } - { - #1 .code:n = { - \tl_set:Nn - \l_tmpa_tl - { ##1 } - \tl_replace_all:NnV - \l_tmpa_tl - { / } - \c_backslash_str - \keys_set:nV - { markdown/latex-options/jekyll-data-renderers } - \l_tmpa_tl - }, - } - } -\keys_define:nn - { markdown/latex-options/jekyll-data-renderers } - { - unknown .code:n = { - \tl_set_eq:NN - \l_tmpa_tl - \l_keys_key_str - \tl_replace_all:NVn - \l_tmpa_tl - \c_backslash_str - { / } - \tl_put_right:Nn - \l_tmpa_tl - { - .code:n = { #1 } - } - \keys_define:nV - { markdown/jekyllData } - \l_tmpa_tl - } - } -\cs_generate_variant:Nn - \keys_define:nn - { nV } -\ExplSyntaxOff -\markdownIfOption{plain}{\iffalse}{\iftrue} -\@ifclassloaded{beamer}{}{% - \markdownIfOption{tightLists}{\RequirePackage{paralist}}{}% - \markdownIfOption{fancyLists}{\RequirePackage{paralist}}{}% -} -\ExplSyntaxOn -\@ifpackageloaded{paralist}{ - \tl_new:N - \l__markdown_latex_fancy_list_item_label_number_style_tl - \tl_new:N - \l__markdown_latex_fancy_list_item_label_delimiter_style_tl - \cs_new:Nn - \__markdown_latex_fancy_list_item_label_number:nn - { - \str_case:nn - { #1 } - { - { Decimal } { #2 } - { LowerRoman } { \int_to_roman:n { #2 } } - { UpperRoman } { \int_to_Roman:n { #2 } } - { LowerAlpha } { \int_to_alph:n { #2 } } - { UpperAlpha } { \int_to_alph:n { #2 } } - } - } - \cs_new:Nn - \__markdown_latex_fancy_list_item_label_delimiter:n - { - \str_case:nn - { #1 } - { - { Default } { . } - { OneParen } { ) } - { Period } { . } - } - } - \cs_new:Nn - \__markdown_latex_fancy_list_item_label:nnn - { - \__markdown_latex_fancy_list_item_label_number:nn - { #1 } - { #3 } - \__markdown_latex_fancy_list_item_label_delimiter:n - { #2 } - } - \cs_new:Nn - \__markdown_latex_paralist_style:nn - { - \str_case:nn - { #1 } - { - { Decimal } { 1 } - { LowerRoman } { i } - { UpperRoman } { I } - { LowerAlpha } { a } - { UpperAlpha } { A } - } - \__markdown_latex_fancy_list_item_label_delimiter:n - { #2 } - } - \markdownSetup{rendererPrototypes={ - ulBeginTight = {% - \group_begin: - \pltopsep=\topsep - \plpartopsep=\partopsep - \begin{compactitem} - }, - ulEndTight = { - \end{compactitem} - \group_end: - }, - fancyOlBegin = { - \group_begin: - \tl_set:Nn - \l__markdown_latex_fancy_list_item_label_number_style_tl - { #1 } - \tl_set:Nn - \l__markdown_latex_fancy_list_item_label_delimiter_style_tl - { #2 } - \tl_set:Nn - \l_tmpa_tl - { \begin{enumerate}[ } - \tl_put_right:Nx - \l_tmpa_tl - { \__markdown_latex_paralist_style:nn { #1 } { #2 } } - \tl_put_right:Nn - \l_tmpa_tl - { ] } - \l_tmpa_tl - }, - fancyOlEnd = { - \end{enumerate} - \group_end: - }, - olBeginTight = {% - \group_begin: - \plpartopsep=\partopsep - \pltopsep=\topsep - \begin{compactenum} - }, - olEndTight = { - \end{compactenum} - \group_end: - }, - fancyOlBeginTight = { - \group_begin: - \tl_set:Nn - \l__markdown_latex_fancy_list_item_label_number_style_tl - { #1 } - \tl_set:Nn - \l__markdown_latex_fancy_list_item_label_delimiter_style_tl - { #2 } - \tl_set:Nn - \l_tmpa_tl - { - \plpartopsep=\partopsep - \pltopsep=\topsep - \begin{compactenum}[ - } - \tl_put_right:Nx - \l_tmpa_tl - { \__markdown_latex_paralist_style:nn { #1 } { #2 } } - \tl_put_right:Nn - \l_tmpa_tl - { ] } - \l_tmpa_tl - }, - fancyOlEndTight = { - \end{compactenum} - \group_end: - }, - fancyOlItemWithNumber = { - \item - [ - \__markdown_latex_fancy_list_item_label:VVn - \l__markdown_latex_fancy_list_item_label_number_style_tl - \l__markdown_latex_fancy_list_item_label_delimiter_style_tl - { #1 } - ] - }, - dlBeginTight = { - \group_begin: - \plpartopsep=\partopsep - \pltopsep=\topsep - \begin{compactdesc} - }, - dlEndTight = { - \end{compactdesc} - \group_end: - }}} - \cs_generate_variant:Nn - \__markdown_latex_fancy_list_item_label:nnn - { VVn } -}{ - \markdownSetup{rendererPrototypes={ - ulBeginTight = {\markdownRendererUlBegin}, - ulEndTight = {\markdownRendererUlEnd}, - fancyOlBegin = {\markdownRendererOlBegin}, - fancyOlEnd = {\markdownRendererOlEnd}, - olBeginTight = {\markdownRendererOlBegin}, - olEndTight = {\markdownRendererOlEnd}, - fancyOlBeginTight = {\markdownRendererOlBegin}, - fancyOlEndTight = {\markdownRendererOlEnd}, - dlBeginTight = {\markdownRendererDlBegin}, - dlEndTight = {\markdownRendererDlEnd}}} -} -\ExplSyntaxOff -\RequirePackage{amsmath} -\@ifpackageloaded{unicode-math}{ - \markdownSetup{rendererPrototypes={ - untickedBox = {$\mdlgwhtsquare$}, - }} -}{ - \RequirePackage{amssymb} - \markdownSetup{rendererPrototypes={ - untickedBox = {$\square$}, - }} -} -\RequirePackage{csvsimple} -\RequirePackage{fancyvrb} -\RequirePackage{graphicx} -\markdownSetup{rendererPrototypes={ - hardLineBreak = {\\}, - leftBrace = {\textbraceleft}, - rightBrace = {\textbraceright}, - dollarSign = {\textdollar}, - underscore = {\textunderscore}, - circumflex = {\textasciicircum}, - backslash = {\textbackslash}, - tilde = {\textasciitilde}, - pipe = {\textbar}, - codeSpan = {% - \ifmmode - \text{#1}% - \else - \texttt{#1}% - \fi - }}} -\ExplSyntaxOn -\markdownSetup{ - rendererPrototypes = { - contentBlock = { - \str_case:nnF - { #1 } - { - { csv } - { - \begin{table} - \begin{center} - \csvautotabular{#3} - \end{center} - \tl_if_empty:nF - { #4 } - { \caption{#4} } - \end{table} - } - { tex } { \markdownEscape{#3} } - } - { \markdownInput{#3} } - }, - }, -} -\ExplSyntaxOff -\markdownSetup{rendererPrototypes={ - image = {% - \begin{figure}% - \begin{center}% - \includegraphics{#3}% - \end{center}% - \ifx\empty#4\empty\else - \caption{#4}% - \fi - \end{figure}}, - ulBegin = {\begin{itemize}}, - ulEnd = {\end{itemize}}, - olBegin = {\begin{enumerate}}, - olItem = {\item{}}, - olItemWithNumber = {\item[#1.]}, - olEnd = {\end{enumerate}}, - dlBegin = {\begin{description}}, - dlItem = {\item[#1]}, - dlEnd = {\end{description}}, - emphasis = {\emph{#1}}, - tickedBox = {$\boxtimes$}, - halfTickedBox = {$\boxdot$}, - headerAttributeContextBegin = {% - \markdownSetup{ - rendererPrototypes = { - attributeIdentifier = {% - \begingroup - \def\next####1{% - \def####1########1{% - \endgroup - ####1{########1}% - \label{##1}% - }% - }% - \next\markdownRendererHeadingOne - \next\markdownRendererHeadingTwo - \next\markdownRendererHeadingThree - \next\markdownRendererHeadingFour - \next\markdownRendererHeadingFive - \next\markdownRendererHeadingSix - }, - }, - }% - }, - headerAttributeContextEnd = {}, - superscript = {\textsuperscript{#1}}, - subscript = {\textsubscript{#1}}, - displayMath = {\begin{displaymath}#1\end{displaymath}}, - inlineMath = {\begin{math}#1\end{math}}, - blockQuoteBegin = {\begin{quotation}}, - blockQuoteEnd = {\end{quotation}}, - inputVerbatim = {\VerbatimInput{#1}}, - thematicBreak = {\noindent\rule[0.5ex]{\linewidth}{1pt}}, - note = {\footnote{#1}}}} -\RequirePackage{ltxcmds} -\ExplSyntaxOn -\cs_gset:Npn - \markdownRendererInputFencedCodePrototype#1#2 - { - \tl_if_empty:nTF - { #2 } - { \markdownRendererInputVerbatim{#1} } - { - \regex_extract_once:nnN - { \w* } - { #2 } - \l_tmpa_seq - \seq_pop_left:NN - \l_tmpa_seq - \l_tmpa_tl - \ltx@ifpackageloaded - { minted } + \ifmarkdownLaTeXLoaded + \ifx\@onlypreamble\@notprerr + \file_if_exist:nTF + { markdown theme #2.sty } { - \catcode`\#=6\relax - \exp_args:NV - \inputminted - \l_tmpa_tl + \msg_error:nnn + { markdown } + { latex-theme-after-preamble } { #1 } - \catcode`\#=12\relax } { - \ltx@ifpackageloaded - { listings } - { \lstinputlisting[language=\l_tmpa_tl]{#1} } - { \markdownRendererInputFencedCode{#1}{} } + \__markdown_plain_tex_load_theme:nn + { #1 } + { #2 } } - } - } -\ExplSyntaxOff -\ExplSyntaxOn -\def\markdownLATEXStrongEmphasis#1{% - \str_if_in:NnTF - \f@series - { b } - { \textnormal{#1} } - { \textbf{#1} } -} -\ExplSyntaxOff -\markdownSetup{rendererPrototypes={strongEmphasis={% - \protect\markdownLATEXStrongEmphasis{#1}}}} -\@ifundefined{chapter}{% - \markdownSetup{rendererPrototypes = { - headingOne = {\section{#1}}, - headingTwo = {\subsection{#1}}, - headingThree = {\subsubsection{#1}}, - headingFour = {\paragraph{#1}\leavevmode}, - headingFive = {\subparagraph{#1}\leavevmode}}} -}{% - \markdownSetup{rendererPrototypes = { - headingOne = {\chapter{#1}}, - headingTwo = {\section{#1}}, - headingThree = {\subsection{#1}}, - headingFour = {\subsubsection{#1}}, - headingFive = {\paragraph{#1}\leavevmode}, - headingSix = {\subparagraph{#1}\leavevmode}}} -}% -\markdownSetup{ - rendererPrototypes = { - ulItem = {% - \futurelet\markdownLaTeXCheckbox\markdownLaTeXUlItem - }, - }, -} -\def\markdownLaTeXUlItem{% - \ifx\markdownLaTeXCheckbox\markdownRendererTickedBox - \item[\markdownLaTeXCheckbox]% - \expandafter\@gobble - \else - \ifx\markdownLaTeXCheckbox\markdownRendererHalfTickedBox - \item[\markdownLaTeXCheckbox]% - \expandafter\expandafter\expandafter\@gobble - \else - \ifx\markdownLaTeXCheckbox\markdownRendererUntickedBox - \item[\markdownLaTeXCheckbox]% - \expandafter\expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\@gobble \else - \item{}% - \fi - \fi - \fi -} -\@ifundefined{HCode}{}{ - \markdownSetup{ - rendererPrototypes = { - inlineHtmlTag = {% - \ifvmode - \IgnorePar - \EndP - \fi - \HCode{#1}% - }, - inputBlockHtmlElement = {% - \ifvmode - \IgnorePar - \fi - \EndP - \special{t4ht*<#1}% - \par - \ShowPar - }, - }, - } -} -\newcount\markdownLaTeXCitationsCounter - -\RequirePackage{gobble} -\def\markdownLaTeXBasicCitations#1#2#3#4#5#6{% - \advance\markdownLaTeXCitationsCounter by 1\relax - \ifx\relax#4\relax - \ifx\relax#5\relax - \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax - \cite{#1#2#6}% Without prenotes and postnotes, just accumulate cites - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter - \@gobblethree - \fi - \else% Before a postnote (#5), dump the accumulator - \ifx\relax#1\relax\else - \cite{#1}% - \fi - \cite[#5]{#6}% - \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax - \else - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter - \markdownLaTeXBasicCitations - \fi - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter{% - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter}% - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter{% - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter}% - \expandafter\expandafter\expandafter - \@gobblethree - \fi - \else% Before a prenote (#4), dump the accumulator - \ifx\relax#1\relax\else - \cite{#1}% - \fi - \ifnum\markdownLaTeXCitationsCounter>1\relax - \space % Insert a space before the prenote in later citations - \fi - #4~\expandafter\cite\ifx\relax#5\relax{#6}\else[#5]{#6}\fi - \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax - \else - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter - \markdownLaTeXBasicCitations - \fi - \expandafter\expandafter\expandafter{% - \expandafter\expandafter\expandafter}% - \expandafter\expandafter\expandafter{% - \expandafter\expandafter\expandafter}% - \expandafter - \@gobblethree - \fi\markdownLaTeXBasicCitations{#1#2#6},} -\let\markdownLaTeXBasicTextCitations\markdownLaTeXBasicCitations - -\def\markdownLaTeXNatbibCitations#1#2#3#4#5{% - \advance\markdownLaTeXCitationsCounter by 1\relax - \ifx\relax#3\relax - \ifx\relax#4\relax - \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax - \citep{#1,#5}% Without prenotes and postnotes, just accumulate cites - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter - \@gobbletwo - \fi - \else% Before a postnote (#4), dump the accumulator - \ifx\relax#1\relax\else - \citep{#1}% - \fi - \citep[][#4]{#5}% - \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax - \else - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter - \markdownLaTeXNatbibCitations - \fi - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter{% - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter}% - \expandafter\expandafter\expandafter - \@gobbletwo - \fi - \else% Before a prenote (#3), dump the accumulator - \ifx\relax#1\relax\relax\else - \citep{#1}% - \fi - \citep[#3][#4]{#5}% - \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax - \else - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter - \markdownLaTeXNatbibCitations - \fi - \expandafter\expandafter\expandafter{% - \expandafter\expandafter\expandafter}% - \expandafter - \@gobbletwo - \fi\markdownLaTeXNatbibCitations{#1,#5}} -\def\markdownLaTeXNatbibTextCitations#1#2#3#4#5{% - \advance\markdownLaTeXCitationsCounter by 1\relax - \ifx\relax#3\relax - \ifx\relax#4\relax - \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax - \citet{#1,#5}% Without prenotes and postnotes, just accumulate cites - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter - \@gobbletwo - \fi - \else% After a prenote or a postnote, dump the accumulator - \ifx\relax#1\relax\else - \citet{#1}% - \fi - , \citet[#3][#4]{#5}% - \ifnum\markdownLaTeXCitationsCounter<\markdownLaTeXCitationsTotal\relax - , - \else - \ifnum\markdownLaTeXCitationsCounter=\markdownLaTeXCitationsTotal\relax - , - \fi + \file_if_exist:nTF + { markdown theme #2.sty } + { + \msg_info:nnn + { markdown } + { loading-latex-theme } + { #1 } + \RequirePackage + { markdown theme #2 } + } + { + \__markdown_plain_tex_load_theme:nn + { #1 } + { #2 } + } \fi - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter - \markdownLaTeXNatbibTextCitations - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter{% - \expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter\expandafter}% - \expandafter\expandafter\expandafter - \@gobbletwo - \fi - \else% After a prenote or a postnote, dump the accumulator - \ifx\relax#1\relax\relax\else - \citet{#1}% - \fi - , \citet[#3][#4]{#5}% - \ifnum\markdownLaTeXCitationsCounter<\markdownLaTeXCitationsTotal\relax - , \else - \ifnum\markdownLaTeXCitationsCounter=\markdownLaTeXCitationsTotal\relax - , - \fi - \fi - \expandafter\expandafter\expandafter - \markdownLaTeXNatbibTextCitations - \expandafter\expandafter\expandafter{% - \expandafter\expandafter\expandafter}% - \expandafter - \@gobbletwo - \fi\markdownLaTeXNatbibTextCitations{#1,#5}} - -\def\markdownLaTeXBibLaTeXCitations#1#2#3#4#5{% - \advance\markdownLaTeXCitationsCounter by 1\relax - \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax - \autocites#1[#3][#4]{#5}% - \expandafter\@gobbletwo - \fi\markdownLaTeXBibLaTeXCitations{#1[#3][#4]{#5}}} -\def\markdownLaTeXBibLaTeXTextCitations#1#2#3#4#5{% - \advance\markdownLaTeXCitationsCounter by 1\relax - \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax - \textcites#1[#3][#4]{#5}% - \expandafter\@gobbletwo - \fi\markdownLaTeXBibLaTeXTextCitations{#1[#3][#4]{#5}}} - -\markdownSetup{rendererPrototypes = { - cite = {% - \markdownLaTeXCitationsCounter=1% - \def\markdownLaTeXCitationsTotal{#1}% - \@ifundefined{autocites}{% - \@ifundefined{citep}{% - \expandafter\expandafter\expandafter - \markdownLaTeXBasicCitations - \expandafter\expandafter\expandafter{% - \expandafter\expandafter\expandafter}% - \expandafter\expandafter\expandafter{% - \expandafter\expandafter\expandafter}% - }{% - \expandafter\expandafter\expandafter - \markdownLaTeXNatbibCitations - \expandafter\expandafter\expandafter{% - \expandafter\expandafter\expandafter}% - }% - }{% - \expandafter\expandafter\expandafter - \markdownLaTeXBibLaTeXCitations - \expandafter{\expandafter}% - }}, - textCite = {% - \markdownLaTeXCitationsCounter=1% - \def\markdownLaTeXCitationsTotal{#1}% - \@ifundefined{autocites}{% - \@ifundefined{citep}{% - \expandafter\expandafter\expandafter - \markdownLaTeXBasicTextCitations - \expandafter\expandafter\expandafter{% - \expandafter\expandafter\expandafter}% - \expandafter\expandafter\expandafter{% - \expandafter\expandafter\expandafter}% - }{% - \expandafter\expandafter\expandafter - \markdownLaTeXNatbibTextCitations - \expandafter\expandafter\expandafter{% - \expandafter\expandafter\expandafter}% - }% - }{% - \expandafter\expandafter\expandafter - \markdownLaTeXBibLaTeXTextCitations - \expandafter{\expandafter}% - }}}} -\RequirePackage{url} -\RequirePackage{expl3} -\ExplSyntaxOn -\def\markdownRendererLinkPrototype#1#2#3#4{ - \tl_set:Nn \l_tmpa_tl { #1 } - \tl_set:Nn \l_tmpb_tl { #2 } - \bool_set:Nn - \l_tmpa_bool - { - \tl_if_eq_p:NN - \l_tmpa_tl - \l_tmpb_tl - } - \tl_set:Nn \l_tmpa_tl { #4 } - \bool_set:Nn - \l_tmpb_bool - { - \tl_if_empty_p:N - \l_tmpa_tl - } - \bool_if:nTF - { - \l_tmpa_bool && \l_tmpb_bool - } - { - \markdownLaTeXRendererAutolink { #2 } { #3 } - }{ - \markdownLaTeXRendererDirectOrIndirectLink { #1 } { #2 } { #3 } { #4 } - } -} -\def\markdownLaTeXRendererAutolink#1#2{% - \tl_set:Nn - \l_tmpa_tl - { #2 } - \tl_trim_spaces:N - \l_tmpa_tl - \tl_set:Nx - \l_tmpb_tl - { - \tl_range:Nnn - \l_tmpa_tl - { 1 } - { 1 } - } - \str_if_eq:NNTF - \l_tmpb_tl - \c_hash_str - { - \tl_set:Nx - \l_tmpb_tl + \msg_info:nnn + { markdown } + { theme-loading-postponed } + { #1 } + \AtEndOfPackage { - \tl_range:Nnn - \l_tmpa_tl - { 2 } - { -1 } + \__markdown_load_theme:nn + { #1 } + { #2 } } - \exp_args:NV - \ref - \l_tmpb_tl - }{ - \url { #2 } - } -} -\ExplSyntaxOff -\def\markdownLaTeXRendererDirectOrIndirectLink#1#2#3#4{% - #1\footnote{\ifx\empty#4\empty\else#4: \fi\url{#3}}} -\newcount\markdownLaTeXRowCounter -\newcount\markdownLaTeXRowTotal -\newcount\markdownLaTeXColumnCounter -\newcount\markdownLaTeXColumnTotal -\newtoks\markdownLaTeXTable -\newtoks\markdownLaTeXTableAlignment -\newtoks\markdownLaTeXTableEnd -\AtBeginDocument{% - \@ifpackageloaded{booktabs}{% - \def\markdownLaTeXTopRule{\toprule}% - \def\markdownLaTeXMidRule{\midrule}% - \def\markdownLaTeXBottomRule{\bottomrule}% - }{% - \def\markdownLaTeXTopRule{\hline}% - \def\markdownLaTeXMidRule{\hline}% - \def\markdownLaTeXBottomRule{\hline}% - }% -} -\markdownSetup{rendererPrototypes={ - table = {% - \markdownLaTeXTable={}% - \markdownLaTeXTableAlignment={}% - \markdownLaTeXTableEnd={% - \markdownLaTeXBottomRule - \end{tabular}}% - \ifx\empty#1\empty\else - \addto@hook\markdownLaTeXTable{% - \begin{table} - \centering}% - \addto@hook\markdownLaTeXTableEnd{% - \caption{#1} - \end{table}}% \fi - \addto@hook\markdownLaTeXTable{\begin{tabular}}% - \markdownLaTeXRowCounter=0% - \markdownLaTeXRowTotal=#2% - \markdownLaTeXColumnTotal=#3% - \markdownLaTeXRenderTableRow - } -}} -\def\markdownLaTeXRenderTableRow#1{% - \markdownLaTeXColumnCounter=0% - \ifnum\markdownLaTeXRowCounter=0\relax - \markdownLaTeXReadAlignments#1% - \markdownLaTeXTable=\expandafter\expandafter\expandafter{% - \expandafter\the\expandafter\markdownLaTeXTable\expandafter{% - \the\markdownLaTeXTableAlignment}}% - \addto@hook\markdownLaTeXTable{\markdownLaTeXTopRule}% - \else - \markdownLaTeXRenderTableCell#1% - \fi - \ifnum\markdownLaTeXRowCounter=1\relax - \addto@hook\markdownLaTeXTable\markdownLaTeXMidRule - \fi - \advance\markdownLaTeXRowCounter by 1\relax - \ifnum\markdownLaTeXRowCounter>\markdownLaTeXRowTotal\relax - \the\markdownLaTeXTable - \the\markdownLaTeXTableEnd - \expandafter\@gobble - \fi\markdownLaTeXRenderTableRow} -\def\markdownLaTeXReadAlignments#1{% - \advance\markdownLaTeXColumnCounter by 1\relax - \if#1d% - \addto@hook\markdownLaTeXTableAlignment{l}% - \else - \addto@hook\markdownLaTeXTableAlignment{#1}% - \fi - \ifnum\markdownLaTeXColumnCounter<\markdownLaTeXColumnTotal\relax\else - \expandafter\@gobble - \fi\markdownLaTeXReadAlignments} -\def\markdownLaTeXRenderTableCell#1{% - \advance\markdownLaTeXColumnCounter by 1\relax - \ifnum\markdownLaTeXColumnCounter<\markdownLaTeXColumnTotal\relax - \addto@hook\markdownLaTeXTable{#1&}% - \else - \addto@hook\markdownLaTeXTable{#1\\}% - \expandafter\@gobble - \fi\markdownLaTeXRenderTableCell} - -\markdownIfOption{lineBlocks}{% - \RequirePackage{verse} - \markdownSetup{rendererPrototypes={ - lineBlockBegin = {% - \begingroup - \def\markdownRendererHardLineBreak{\\}% - \begin{verse}% - }, - lineBlockEnd = {% - \end{verse}% - \endgroup - }, - }} -}{} - -\ExplSyntaxOn -\keys_define:nn - { markdown/jekyllData } - { - author .code:n = { \author{#1} }, - date .code:n = { \date{#1} }, - title .code:n = { \title{#1} }, - } -\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} -\markdownSetup{ - rendererPrototypes = { - jekyllDataEnd = { - \IfFormatAtLeastTF - { 2020-10-01 } - { \AddToHook{begindocument/end}{\maketitle} } - { - \ifx\@onlypreamble\@notprerr - % We are in the document - \maketitle - \else - % We are in the preamble - \RequirePackage{etoolbox} - \AfterEndPreamble{\maketitle} - \fi - } - }, - }, -} -\ExplSyntaxOff -\markdownIfOption{strikeThrough}{% - \RequirePackage{soulutf8}% - \markdownSetup{ - rendererPrototypes = { - strikeThrough = {% - \st{#1}% - }, - } - } -}{} -\markdownIfOption{strikeThrough}{% - \RequirePackage{soulutf8}% - \markdownSetup{ - rendererPrototypes = { - strikeThrough = {% - \st{#1}% - }, - } - } -}{} -\ExplSyntaxOn -\__markdown_if_option:nT - { linkAttributes } - { - \RequirePackage{graphicx} - \markdownSetup{ - rendererPrototypes = { - imageAttributeContextBegin = { - \group_begin: - \markdownSetup{ - rendererPrototypes = { - attributeKeyValue = { - \setkeys - { Gin } - { { ##1 } = { ##2 } } - }, - }, - } - }, - imageAttributeContextEnd = { - \group_end: - }, - }, - } - } -\ExplSyntaxOff -\ExplSyntaxOn -\cs_gset:Npn - \markdownRendererInputRawInlinePrototype#1#2 - { - \str_case:nnF - { #2 } - { - { latex } - { - \__markdown_plain_tex_default_input_raw_inline_renderer_prototype:nn - { #1 } - { tex } - } - } - { - \__markdown_plain_tex_default_input_raw_inline_renderer_prototype:nn - { #1 } - { #2 } - } } -\cs_gset:Npn - \markdownRendererInputRawBlockPrototype#1#2 +\msg_new:nnn + { markdown } + { theme-loading-postponed } { - \str_case:nnF - { #2 } - { - { latex } - { - \__markdown_plain_tex_default_input_raw_block_renderer_prototype:nn - { #1 } - { tex } - } - } - { - \__markdown_plain_tex_default_input_raw_block_renderer_prototype:nn - { #1 } - { #2 } - } + Postponing~loading~Markdown~theme~#1~until~ + Markdown~package~has~finished~loading } +\msg_new:nnn + { markdown } + { loading-latex-theme } + { Loading~LaTeX~Markdown~theme~#1 } +\cs_generate_variant:Nn + \msg_new:nnnn + { nnVV } +\tl_set:Nn + \l_tmpa_tl + { Cannot~load~LaTeX~Markdown~theme~#1~after~ } +\tl_put_right:NV + \l_tmpa_tl + \c_backslash_str +\tl_put_right:Nn + \l_tmpa_tl + { begin{document} } +\tl_set:Nn + \l_tmpb_tl + { Load~Markdown~theme~#1~before~ } +\tl_put_right:NV + \l_tmpb_tl + \c_backslash_str +\tl_put_right:Nn + \l_tmpb_tl + { begin{document} } +\msg_new:nnVV + { markdown } + { latex-theme-after-preamble } + \l_tmpa_tl + \l_tmpb_tl \ExplSyntaxOff -\fi % Closes `\markdownIfOption{Plain}{\iffalse}{iftrue}` \newcommand\markdownMakeOther{% \count0=128\relax \loop diff --git a/Master/texmf-dist/tex/latex/markdown/markdownthemewitiko_dot.sty b/Master/texmf-dist/tex/latex/markdown/markdownthemewitiko_dot.sty index 54aa163371a..a6ebbd6f1d9 100644 --- a/Master/texmf-dist/tex/latex/markdown/markdownthemewitiko_dot.sty +++ b/Master/texmf-dist/tex/latex/markdown/markdownthemewitiko_dot.sty @@ -4,9 +4,9 @@ %% %% The original source files were: %% -%% markdown.dtx (with options: `latex-themes-witiko-dot') +%% markdown.dtx (with options: `themes-witiko-dot') %% -%% Copyright (C) 2016-2023 Vít Novotný +%% Copyright (C) 2016-2024 Vít Starý Novotný %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3c @@ -16,7 +16,7 @@ %% http://www.latex-project.org/lppl.txt %% %% This work has the LPPL maintenance status `maintained'. -%% The Current Maintainer of this work is Vít Novotný. +%% The Current Maintainer of this work is Vít Starý Novotný. %% %% Send bug reports, requests for additions and questions %% either to the GitHub issue tracker at @@ -47,7 +47,7 @@ \RequirePackage{ifthen,grffile} \let\markdown@witiko@dot@oldRendererInputFencedCodePrototype \markdownRendererInputFencedCodePrototype -\renewcommand\markdownRendererInputFencedCodePrototype[2]{% +\renewcommand\markdownRendererInputFencedCodePrototype[3]{% \def\next##1 ##2\relax{% \ifthenelse{\equal{##1}{dot}}{% \markdownIfOption{frozenCache}{}{% @@ -59,7 +59,7 @@ fi}}% \markdownRendererImage{Graphviz image}{#1.pdf}{#1.pdf}{##2}% }{% - \markdown@witiko@dot@oldRendererInputFencedCodePrototype{#1}{#2}% + \markdown@witiko@dot@oldRendererInputFencedCodePrototype{#1}{#2}{#3}% }% }% \next#2 \relax}% diff --git a/Master/texmf-dist/tex/latex/markdown/markdownthemewitiko_graphicx_http.sty b/Master/texmf-dist/tex/latex/markdown/markdownthemewitiko_graphicx_http.sty index 57d27069ab0..a962d1d8cd0 100644 --- a/Master/texmf-dist/tex/latex/markdown/markdownthemewitiko_graphicx_http.sty +++ b/Master/texmf-dist/tex/latex/markdown/markdownthemewitiko_graphicx_http.sty @@ -4,9 +4,9 @@ %% %% The original source files were: %% -%% markdown.dtx (with options: `latex-themes-witiko-graphicx-http') +%% markdown.dtx (with options: `themes-witiko-graphicx-http') %% -%% Copyright (C) 2016-2023 Vít Novotný +%% Copyright (C) 2016-2024 Vít Starý Novotný %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3c @@ -16,7 +16,7 @@ %% http://www.latex-project.org/lppl.txt %% %% This work has the LPPL maintenance status `maintained'. -%% The Current Maintainer of this work is Vít Novotný. +%% The Current Maintainer of this work is Vít Starý Novotný. %% %% Send bug reports, requests for additions and questions %% either to the GitHub issue tracker at diff --git a/Master/texmf-dist/tex/latex/markdown/markdownthemewitiko_markdown_defaults.sty b/Master/texmf-dist/tex/latex/markdown/markdownthemewitiko_markdown_defaults.sty new file mode 100644 index 00000000000..99de31845a7 --- /dev/null +++ b/Master/texmf-dist/tex/latex/markdown/markdownthemewitiko_markdown_defaults.sty @@ -0,0 +1,933 @@ +%% +%% This is file `markdownthemewitiko_markdown_defaults.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% markdown.dtx (with options: `themes-witiko-markdown-defaults-latex') +%% +%% Copyright (C) 2016-2024 Vít Starý Novotný +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% +%% http://www.latex-project.org/lppl.txt +%% +%% This work has the LPPL maintenance status `maintained'. +%% The Current Maintainer of this work is Vít Starý Novotný. +%% +%% Send bug reports, requests for additions and questions +%% either to the GitHub issue tracker at +%% +%% https://github.com/Witiko/markdown/issues +%% +%% or to the e-mail address <witiko@mail.muni.cz>. +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\ProvidesPackage{markdownthemewitiko_markdown_defaults}[2024/01/03]% +\markdownLoadPlainTeXTheme +\markdownIfOption{plain}{\iffalse}{\iftrue} +\@ifclassloaded{beamer}{}{% + \markdownIfOption{tightLists}{\RequirePackage{paralist}}{}% + \markdownIfOption{fancyLists}{\RequirePackage{paralist}}{}% +} +\ExplSyntaxOn +\@ifpackageloaded{paralist}{ + \tl_new:N + \l__markdown_latex_fancy_list_item_label_number_style_tl + \tl_new:N + \l__markdown_latex_fancy_list_item_label_delimiter_style_tl + \cs_new:Nn + \__markdown_latex_fancy_list_item_label_number:nn + { + \str_case:nn + { #1 } + { + { Decimal } { #2 } + { LowerRoman } { \int_to_roman:n { #2 } } + { UpperRoman } { \int_to_Roman:n { #2 } } + { LowerAlpha } { \int_to_alph:n { #2 } } + { UpperAlpha } { \int_to_Alph:n { #2 } } + } + } + \cs_new:Nn + \__markdown_latex_fancy_list_item_label_delimiter:n + { + \str_case:nn + { #1 } + { + { Default } { . } + { OneParen } { ) } + { Period } { . } + } + } + \cs_new:Nn + \__markdown_latex_fancy_list_item_label:nnn + { + \__markdown_latex_fancy_list_item_label_number:nn + { #1 } + { #3 } + \__markdown_latex_fancy_list_item_label_delimiter:n + { #2 } + } + \cs_new:Nn + \__markdown_latex_paralist_style:nn + { + \str_case:nn + { #1 } + { + { Decimal } { 1 } + { LowerRoman } { i } + { UpperRoman } { I } + { LowerAlpha } { a } + { UpperAlpha } { A } + } + \__markdown_latex_fancy_list_item_label_delimiter:n + { #2 } + } + \markdownSetup{rendererPrototypes={ + ulBeginTight = {% + \group_begin: + \pltopsep=\topsep + \plpartopsep=\partopsep + \begin{compactitem} + }, + ulEndTight = { + \end{compactitem} + \group_end: + }, + fancyOlBegin = { + \group_begin: + \tl_set:Nn + \l__markdown_latex_fancy_list_item_label_number_style_tl + { #1 } + \tl_set:Nn + \l__markdown_latex_fancy_list_item_label_delimiter_style_tl + { #2 } + \__markdown_if_option:nTF + { startNumber } + { + \tl_set:Nn + \l_tmpa_tl + { \begin{enumerate} } + } + { + \tl_set:Nn + \l_tmpa_tl + { \begin{enumerate}[ } + \tl_put_right:Nx + \l_tmpa_tl + { \__markdown_latex_paralist_style:nn { #1 } { #2 } } + \tl_put_right:Nn + \l_tmpa_tl + { ] } + } + \tl_use:N + \l_tmpa_tl + }, + fancyOlEnd = { + \end{enumerate} + \group_end: + }, + olBeginTight = {% + \group_begin: + \plpartopsep=\partopsep + \pltopsep=\topsep + \begin{compactenum} + }, + olEndTight = { + \end{compactenum} + \group_end: + }, + fancyOlBeginTight = { + \group_begin: + \tl_set:Nn + \l__markdown_latex_fancy_list_item_label_number_style_tl + { #1 } + \tl_set:Nn + \l__markdown_latex_fancy_list_item_label_delimiter_style_tl + { #2 } + \tl_set:Nn + \l_tmpa_tl + { + \plpartopsep=\partopsep + \pltopsep=\topsep + } + \__markdown_if_option:nTF + { startNumber } + { + \tl_put_right:Nn + \l_tmpa_tl + { \begin{compactenum} } + } + { + \tl_put_right:Nn + \l_tmpa_tl + { \begin{compactenum}[ } + \tl_put_right:Nx + \l_tmpa_tl + { \__markdown_latex_paralist_style:nn { #1 } { #2 } } + \tl_put_right:Nn + \l_tmpa_tl + { ] } + } + \tl_use:N + \l_tmpa_tl + }, + fancyOlEndTight = { + \end{compactenum} + \group_end: + }, + fancyOlItemWithNumber = { + \item + [ + \__markdown_latex_fancy_list_item_label:VVn + \l__markdown_latex_fancy_list_item_label_number_style_tl + \l__markdown_latex_fancy_list_item_label_delimiter_style_tl + { #1 } + ] + }, + dlBeginTight = { + \group_begin: + \plpartopsep=\partopsep + \pltopsep=\topsep + \begin{compactdesc} + }, + dlEndTight = { + \end{compactdesc} + \group_end: + }}} + \cs_generate_variant:Nn + \__markdown_latex_fancy_list_item_label:nnn + { VVn } +}{ + \markdownSetup{rendererPrototypes={ + ulBeginTight = {\markdownRendererUlBegin}, + ulEndTight = {\markdownRendererUlEnd}, + fancyOlBegin = {\markdownRendererOlBegin}, + fancyOlEnd = {\markdownRendererOlEnd}, + olBeginTight = {\markdownRendererOlBegin}, + olEndTight = {\markdownRendererOlEnd}, + fancyOlBeginTight = {\markdownRendererOlBegin}, + fancyOlEndTight = {\markdownRendererOlEnd}, + dlBeginTight = {\markdownRendererDlBegin}, + dlEndTight = {\markdownRendererDlEnd}}} +} +\ExplSyntaxOff +\RequirePackage{amsmath} +\@ifpackageloaded{unicode-math}{ + \markdownSetup{rendererPrototypes={ + untickedBox = {$\mdlgwhtsquare$}, + }} +}{ + \RequirePackage{amssymb} + \markdownSetup{rendererPrototypes={ + untickedBox = {$\square$}, + }} +} +\RequirePackage{csvsimple} +\RequirePackage{fancyvrb} +\RequirePackage{graphicx} +\markdownSetup{rendererPrototypes={ + hardLineBreak = {\\}, + leftBrace = {\textbraceleft}, + rightBrace = {\textbraceright}, + dollarSign = {\textdollar}, + underscore = {\textunderscore}, + circumflex = {\textasciicircum}, + backslash = {\textbackslash}, + tilde = {\textasciitilde}, + pipe = {\textbar}, + codeSpan = {% + \ifmmode + \text{#1}% + \else + \texttt{#1}% + \fi + }}} +\ExplSyntaxOn +\markdownSetup{ + rendererPrototypes = { + contentBlock = { + \str_case:nnF + { #1 } + { + { csv } + { + \begin{table} + \begin{center} + \csvautotabular{#3} + \end{center} + \tl_if_empty:nF + { #4 } + { \caption{#4} } + \end{table} + } + { tex } { \markdownEscape{#3} } + } + { \markdownInput{#3} } + }, + }, +} +\ExplSyntaxOff +\markdownSetup{rendererPrototypes={ + image = {% + \begin{figure}% + \begin{center}% + \includegraphics[alt={#1}]{#3}% + \end{center}% + \ifx\empty#4\empty\else + \caption{#4}% + \fi + \end{figure}}, + ulBegin = {\begin{itemize}}, + ulEnd = {\end{itemize}}, + olBegin = {\begin{enumerate}}, + olItem = {\item{}}, + olItemWithNumber = {\item[#1.]}, + olEnd = {\end{enumerate}}, + dlBegin = {\begin{description}}, + dlItem = {\item[#1]}, + dlEnd = {\end{description}}, + emphasis = {\emph{#1}}, + tickedBox = {$\boxtimes$}, + halfTickedBox = {$\boxdot$}}} +\ExplSyntaxOn +\seq_new:N \l__markdown_header_identifiers_seq +\markdownSetup{ + rendererPrototypes = { + headerAttributeContextBegin = { + \seq_clear:N \l__markdown_header_identifiers_seq + \markdownSetup + { + renderers = { + attributeIdentifier = { + \seq_put_right:Nn + \l__markdown_header_identifiers_seq + { ##1 } + }, + }, + } + }, + headerAttributeContextEnd = { + \seq_map_inline:Nn + \l__markdown_header_identifiers_seq + { \label { ##1 } } + }, + }, +} +\ExplSyntaxOff +\markdownSetup{rendererPrototypes={ + superscript = {\textsuperscript{#1}}, + subscript = {\textsubscript{#1}}, + blockQuoteBegin = {\begin{quotation}}, + blockQuoteEnd = {\end{quotation}}, + inputVerbatim = {\VerbatimInput{#1}}, + thematicBreak = {\noindent\rule[0.5ex]{\linewidth}{1pt}}, + note = {\footnote{#1}}}} +\RequirePackage{ltxcmds} +\ExplSyntaxOn +\cs_gset:Npn + \markdownRendererInputFencedCodePrototype#1#2#3 + { + \tl_if_empty:nTF + { #2 } + { \markdownRendererInputVerbatim{#1} } + { + \regex_extract_once:nnN + { \w* } + { #2 } + \l_tmpa_seq + \seq_pop_left:NN + \l_tmpa_seq + \l_tmpa_tl + \ltx@ifpackageloaded + { minted } + { + \catcode`\#=6\relax + \exp_args:NV + \inputminted + \l_tmpa_tl + { #1 } + \catcode`\#=12\relax + } + { + \ltx@ifpackageloaded + { listings } + { \lstinputlisting[language=\l_tmpa_tl]{#1} } + { \markdownRendererInputFencedCode{#1}{}{} } + } + } + } +\def\markdownLATEXStrongEmphasis#1{% + \str_if_in:NnTF + \f@series + { b } + { \textnormal{#1} } + { \textbf{#1} } +} +\ExplSyntaxOff +\markdownSetup{rendererPrototypes={strongEmphasis={% + \protect\markdownLATEXStrongEmphasis{#1}}}} +\@ifundefined{chapter}{% + \markdownSetup{rendererPrototypes = { + headingOne = {\section{#1}}, + headingTwo = {\subsection{#1}}, + headingThree = {\subsubsection{#1}}, + headingFour = {\paragraph{#1}}, + headingFive = {\subparagraph{#1}}}} +}{% + \markdownSetup{rendererPrototypes = { + headingOne = {\chapter{#1}}, + headingTwo = {\section{#1}}, + headingThree = {\subsection{#1}}, + headingFour = {\subsubsection{#1}}, + headingFive = {\paragraph{#1}}, + headingSix = {\subparagraph{#1}}}} +}% +\markdownSetup{ + rendererPrototypes = { + ulItem = {% + \futurelet\markdownLaTeXCheckbox\markdownLaTeXUlItem + }, + }, +} +\def\markdownLaTeXUlItem{% + \ifx\markdownLaTeXCheckbox\markdownRendererTickedBox + \item[\markdownLaTeXCheckbox]% + \expandafter\@gobble + \else + \ifx\markdownLaTeXCheckbox\markdownRendererHalfTickedBox + \item[\markdownLaTeXCheckbox]% + \expandafter\expandafter\expandafter\@gobble + \else + \ifx\markdownLaTeXCheckbox\markdownRendererUntickedBox + \item[\markdownLaTeXCheckbox]% + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\@gobble + \else + \item{}% + \fi + \fi + \fi +} +\@ifundefined{HCode}{}{ + \markdownSetup{ + rendererPrototypes = { + inlineHtmlTag = {% + \ifvmode + \IgnorePar + \EndP + \fi + \HCode{#1}% + }, + inputBlockHtmlElement = {% + \ifvmode + \IgnorePar + \fi + \EndP + \special{t4ht*<#1}% + \par + \ShowPar + }, + }, + } +} +\newcount\markdownLaTeXCitationsCounter + +\RequirePackage{gobble} +\def\markdownLaTeXBasicCitations#1#2#3#4#5#6{% + \advance\markdownLaTeXCitationsCounter by 1\relax + \ifx\relax#4\relax + \ifx\relax#5\relax + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \cite{#1#2#6}% Without prenotes and postnotes, just accumulate cites + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \@gobblethree + \fi + \else% Before a postnote (#5), dump the accumulator + \ifx\relax#1\relax\else + \cite{#1}% + \fi + \cite[#5]{#6}% + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \else + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \markdownLaTeXBasicCitations + \fi + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter}% + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter}% + \expandafter\expandafter\expandafter + \@gobblethree + \fi + \else% Before a prenote (#4), dump the accumulator + \ifx\relax#1\relax\else + \cite{#1}% + \fi + \ifnum\markdownLaTeXCitationsCounter>1\relax + \space % Insert a space before the prenote in later citations + \fi + #4~\expandafter\cite\ifx\relax#5\relax{#6}\else[#5]{#6}\fi + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \else + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \markdownLaTeXBasicCitations + \fi + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \expandafter + \@gobblethree + \fi\markdownLaTeXBasicCitations{#1#2#6},} +\let\markdownLaTeXBasicTextCitations\markdownLaTeXBasicCitations + +\def\markdownLaTeXNatbibCitations#1#2#3#4#5{% + \advance\markdownLaTeXCitationsCounter by 1\relax + \ifx\relax#3\relax + \ifx\relax#4\relax + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \citep{#1,#5}% Without prenotes and postnotes, just accumulate cites + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \@gobbletwo + \fi + \else% Before a postnote (#4), dump the accumulator + \ifx\relax#1\relax\else + \citep{#1}% + \fi + \citep[][#4]{#5}% + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \else + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \markdownLaTeXNatbibCitations + \fi + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter}% + \expandafter\expandafter\expandafter + \@gobbletwo + \fi + \else% Before a prenote (#3), dump the accumulator + \ifx\relax#1\relax\relax\else + \citep{#1}% + \fi + \citep[#3][#4]{#5}% + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \else + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \markdownLaTeXNatbibCitations + \fi + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \expandafter + \@gobbletwo + \fi\markdownLaTeXNatbibCitations{#1,#5}} +\def\markdownLaTeXNatbibTextCitations#1#2#3#4#5{% + \advance\markdownLaTeXCitationsCounter by 1\relax + \ifx\relax#3\relax + \ifx\relax#4\relax + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \citet{#1,#5}% Without prenotes and postnotes, just accumulate cites + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \@gobbletwo + \fi + \else% After a prenote or a postnote, dump the accumulator + \ifx\relax#1\relax\else + \citet{#1}% + \fi + , \citet[#3][#4]{#5}% + \ifnum\markdownLaTeXCitationsCounter<\markdownLaTeXCitationsTotal\relax + , + \else + \ifnum\markdownLaTeXCitationsCounter=\markdownLaTeXCitationsTotal\relax + , + \fi + \fi + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \markdownLaTeXNatbibTextCitations + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter}% + \expandafter\expandafter\expandafter + \@gobbletwo + \fi + \else% After a prenote or a postnote, dump the accumulator + \ifx\relax#1\relax\relax\else + \citet{#1}% + \fi + , \citet[#3][#4]{#5}% + \ifnum\markdownLaTeXCitationsCounter<\markdownLaTeXCitationsTotal\relax + , + \else + \ifnum\markdownLaTeXCitationsCounter=\markdownLaTeXCitationsTotal\relax + , + \fi + \fi + \expandafter\expandafter\expandafter + \markdownLaTeXNatbibTextCitations + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \expandafter + \@gobbletwo + \fi\markdownLaTeXNatbibTextCitations{#1,#5}} + +\def\markdownLaTeXBibLaTeXCitations#1#2#3#4#5{% + \advance\markdownLaTeXCitationsCounter by 1\relax + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \autocites#1[#3][#4]{#5}% + \expandafter\@gobbletwo + \fi\markdownLaTeXBibLaTeXCitations{#1[#3][#4]{#5}}} +\def\markdownLaTeXBibLaTeXTextCitations#1#2#3#4#5{% + \advance\markdownLaTeXCitationsCounter by 1\relax + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \textcites#1[#3][#4]{#5}% + \expandafter\@gobbletwo + \fi\markdownLaTeXBibLaTeXTextCitations{#1[#3][#4]{#5}}} + +\markdownSetup{rendererPrototypes = { + cite = {% + \markdownLaTeXCitationsCounter=1% + \def\markdownLaTeXCitationsTotal{#1}% + \@ifundefined{autocites}{% + \@ifundefined{citep}{% + \expandafter\expandafter\expandafter + \markdownLaTeXBasicCitations + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + }{% + \expandafter\expandafter\expandafter + \markdownLaTeXNatbibCitations + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + }% + }{% + \expandafter\expandafter\expandafter + \markdownLaTeXBibLaTeXCitations + \expandafter{\expandafter}% + }}, + textCite = {% + \markdownLaTeXCitationsCounter=1% + \def\markdownLaTeXCitationsTotal{#1}% + \@ifundefined{autocites}{% + \@ifundefined{citep}{% + \expandafter\expandafter\expandafter + \markdownLaTeXBasicTextCitations + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + }{% + \expandafter\expandafter\expandafter + \markdownLaTeXNatbibTextCitations + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + }% + }{% + \expandafter\expandafter\expandafter + \markdownLaTeXBibLaTeXTextCitations + \expandafter{\expandafter}% + }}}} +\RequirePackage{url} +\RequirePackage{expl3} +\ExplSyntaxOn +\def\markdownRendererLinkPrototype#1#2#3#4{ + \tl_set:Nn \l_tmpa_tl { #1 } + \tl_set:Nn \l_tmpb_tl { #2 } + \bool_set:Nn + \l_tmpa_bool + { + \tl_if_eq_p:NN + \l_tmpa_tl + \l_tmpb_tl + } + \tl_set:Nn \l_tmpa_tl { #4 } + \bool_set:Nn + \l_tmpb_bool + { + \tl_if_empty_p:N + \l_tmpa_tl + } + \bool_if:nTF + { + \l_tmpa_bool && \l_tmpb_bool + } + { + \markdownLaTeXRendererAutolink { #2 } { #3 } + }{ + \markdownLaTeXRendererDirectOrIndirectLink { #1 } { #2 } { #3 } { #4 } + } +} +\def\markdownLaTeXRendererAutolink#1#2{% + \tl_set:Nn + \l_tmpa_tl + { #2 } + \tl_trim_spaces:N + \l_tmpa_tl + \tl_set:Nx + \l_tmpb_tl + { + \tl_range:Nnn + \l_tmpa_tl + { 1 } + { 1 } + } + \str_if_eq:NNTF + \l_tmpb_tl + \c_hash_str + { + \tl_set:Nx + \l_tmpb_tl + { + \tl_range:Nnn + \l_tmpa_tl + { 2 } + { -1 } + } + \exp_args:NV + \ref + \l_tmpb_tl + }{ + \url { #2 } + } +} +\ExplSyntaxOff +\def\markdownLaTeXRendererDirectOrIndirectLink#1#2#3#4{% + #1\footnote{\ifx\empty#4\empty\else#4: \fi\url{#3}}} +\newcount\markdownLaTeXRowCounter +\newcount\markdownLaTeXRowTotal +\newcount\markdownLaTeXColumnCounter +\newcount\markdownLaTeXColumnTotal +\newtoks\markdownLaTeXTable +\newtoks\markdownLaTeXTableAlignment +\newtoks\markdownLaTeXTableEnd +\AtBeginDocument{% + \@ifpackageloaded{booktabs}{% + \def\markdownLaTeXTopRule{\toprule}% + \def\markdownLaTeXMidRule{\midrule}% + \def\markdownLaTeXBottomRule{\bottomrule}% + }{% + \def\markdownLaTeXTopRule{\hline}% + \def\markdownLaTeXMidRule{\hline}% + \def\markdownLaTeXBottomRule{\hline}% + }% +} +\markdownSetup{rendererPrototypes={ + table = {% + \markdownLaTeXTable={}% + \markdownLaTeXTableAlignment={}% + \markdownLaTeXTableEnd={% + \markdownLaTeXBottomRule + \end{tabular}}% + \ifx\empty#1\empty\else + \addto@hook\markdownLaTeXTable{% + \begin{table} + \centering}% + \addto@hook\markdownLaTeXTableEnd{% + \caption{#1} + \end{table}}% + \fi + \addto@hook\markdownLaTeXTable{\begin{tabular}}% + \markdownLaTeXRowCounter=0% + \markdownLaTeXRowTotal=#2% + \markdownLaTeXColumnTotal=#3% + \markdownLaTeXRenderTableRow + } +}} +\def\markdownLaTeXRenderTableRow#1{% + \markdownLaTeXColumnCounter=0% + \ifnum\markdownLaTeXRowCounter=0\relax + \markdownLaTeXReadAlignments#1% + \markdownLaTeXTable=\expandafter\expandafter\expandafter{% + \expandafter\the\expandafter\markdownLaTeXTable\expandafter{% + \the\markdownLaTeXTableAlignment}}% + \addto@hook\markdownLaTeXTable{\markdownLaTeXTopRule}% + \else + \markdownLaTeXRenderTableCell#1% + \fi + \ifnum\markdownLaTeXRowCounter=1\relax + \addto@hook\markdownLaTeXTable\markdownLaTeXMidRule + \fi + \advance\markdownLaTeXRowCounter by 1\relax + \ifnum\markdownLaTeXRowCounter>\markdownLaTeXRowTotal\relax + \the\markdownLaTeXTable + \the\markdownLaTeXTableEnd + \expandafter\@gobble + \fi\markdownLaTeXRenderTableRow} +\def\markdownLaTeXReadAlignments#1{% + \advance\markdownLaTeXColumnCounter by 1\relax + \if#1d% + \addto@hook\markdownLaTeXTableAlignment{l}% + \else + \addto@hook\markdownLaTeXTableAlignment{#1}% + \fi + \ifnum\markdownLaTeXColumnCounter<\markdownLaTeXColumnTotal\relax\else + \expandafter\@gobble + \fi\markdownLaTeXReadAlignments} +\def\markdownLaTeXRenderTableCell#1{% + \advance\markdownLaTeXColumnCounter by 1\relax + \ifnum\markdownLaTeXColumnCounter<\markdownLaTeXColumnTotal\relax + \addto@hook\markdownLaTeXTable{#1&}% + \else + \addto@hook\markdownLaTeXTable{#1\\}% + \expandafter\@gobble + \fi\markdownLaTeXRenderTableCell} + +\markdownIfOption{lineBlocks}{% + \RequirePackage{verse} + \markdownSetup{rendererPrototypes={ + lineBlockBegin = {% + \begingroup + \def\markdownRendererHardLineBreak{\\}% + \begin{verse}% + }, + lineBlockEnd = {% + \end{verse}% + \endgroup + }, + }} +}{} + +\ExplSyntaxOn +\keys_define:nn + { markdown/jekyllData } + { + author .code:n = { \author{#1} }, + date .code:n = { \date{#1} }, + title .code:n = { \title{#1} }, + } +\markdownSetup{ + rendererPrototypes = { + jekyllDataEnd = { + \AddToHook{begindocument/end}{\maketitle} + }, + }, +} +\ExplSyntaxOff +\markdownIfOption{strikeThrough}{% + \RequirePackage{soulutf8}% + \markdownSetup{ + rendererPrototypes = { + strikeThrough = {% + \st{#1}% + }, + } + } +}{} +\markdownIfOption{mark}{% + \RequirePackage{soulutf8}% + \markdownSetup{ + rendererPrototypes = { + mark = {% + \hl{#1}% + }, + } + } +}{} +\ExplSyntaxOn +\__markdown_if_option:nT + { linkAttributes } + { + \RequirePackage{graphicx} + \markdownSetup{ + rendererPrototypes = { + imageAttributeContextBegin = { + \group_begin: + \markdownSetup{ + rendererPrototypes = { + attributeKeyValue = { + \setkeys + { Gin } + { { ##1 } = { ##2 } } + }, + }, + } + }, + imageAttributeContextEnd = { + \group_end: + }, + }, + } + } +\cs_gset:Npn + \markdownRendererInputRawInlinePrototype#1#2 + { + \str_case:nnF + { #2 } + { + { latex } + { + \__markdown_plain_tex_default_input_raw_inline_renderer_prototype:nn + { #1 } + { tex } + } + } + { + \__markdown_plain_tex_default_input_raw_inline_renderer_prototype:nn + { #1 } + { #2 } + } + } +\cs_gset:Npn + \markdownRendererInputRawBlockPrototype#1#2 + { + \str_case:nnF + { #2 } + { + { latex } + { + \__markdown_plain_tex_default_input_raw_block_renderer_prototype:nn + { #1 } + { tex } + } + } + { + \__markdown_plain_tex_default_input_raw_block_renderer_prototype:nn + { #1 } + { #2 } + } + } +\ExplSyntaxOff +\fi % Closes `\markdownIfOption{plain}{\iffalse}{\iftrue}` +\endinput +%% +%% End of file `markdownthemewitiko_markdown_defaults.sty'. diff --git a/Master/texmf-dist/tex/luatex/markdown/markdown-tinyyaml.lua b/Master/texmf-dist/tex/luatex/markdown/markdown-tinyyaml.lua index 074ad79446e..36cef293ed9 100644 --- a/Master/texmf-dist/tex/luatex/markdown/markdown-tinyyaml.lua +++ b/Master/texmf-dist/tex/luatex/markdown/markdown-tinyyaml.lua @@ -633,8 +633,10 @@ function Parser:parseseq(line, lines, indent) error("did not find expected alphabetic or numeric character") elseif rest then -- Array entry with a value + local nextline = lines[1] + local indent2 = countindent(nextline) tremove(lines, 1) - tinsert(seq, self:parsescalar(rest, lines)) + tinsert(seq, self:parsescalar(rest, lines, indent2)) end end return seq diff --git a/Master/texmf-dist/tex/luatex/markdown/markdown.lua b/Master/texmf-dist/tex/luatex/markdown/markdown.lua index 225428abe03..fce3c1fe827 100644 --- a/Master/texmf-dist/tex/luatex/markdown/markdown.lua +++ b/Master/texmf-dist/tex/luatex/markdown/markdown.lua @@ -20,7 +20,7 @@ -- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- --- Copyright (C) 2016-2023 Vít Novotný +-- Copyright (C) 2016-2024 Vít Starý Novotný -- -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -33,7 +33,7 @@ -- version 2005/12/01 or later. -- -- This work has the LPPL maintenance status `maintained'. --- The Current Maintainer of this work is Vít Novotný. +-- The Current Maintainer of this work is Vít Starý Novotný. -- -- Send bug reports, requests for additions and questions -- either to the GitHub issue tracker at @@ -58,50 +58,28 @@ -- those in the standard .ins files. -- local metadata = { - version = "2.23.0-0-g0b22f91", + version = "3.4.1-0-g457226ae", comment = "A module for the conversion from markdown to plain TeX", - author = "John MacFarlane, Hans Hagen, Vít Novotný", + author = "John MacFarlane, Hans Hagen, Vít Starý Novotný", copyright = {"2009-2016 John MacFarlane, Hans Hagen", - "2016-2023 Vít Novotný"}, + "2016-2023 Vít Starý Novotný"}, license = "LPPL 1.3c" } if not modules then modules = { } end modules['markdown'] = metadata local lpeg = require("lpeg") -local unicode -(function() - local ran_ok - ran_ok, unicode = pcall(require, "unicode") - if not ran_ok then - unicode = {utf8 = {char=utf8.char}} - end -end)() +local unicode = require("unicode") local md5 = require("md5"); (function() local should_initialize = package.loaded.kpse == nil or tex.initialize ~= nil - local ran_ok - ran_ok, kpse = pcall(require, "kpse") - if ran_ok and should_initialize then + kpse = require("kpse") + if should_initialize then kpse.set_program_name("luatex") end - if not ran_ok then - kpse = {lookup = function(f, _) return f end} - end -end)() -local uni_case -(function() - local ran_ok - ran_ok, uni_case = pcall(require, "lua-uni-case") - if not ran_ok then - if unicode.utf8.lower then - uni_case = {casefold = unicode.utf8.lower} - else - uni_case = {casefold = string.lower} - end - end end)() +local uni_algos = require("lua-uni-algos") local M = {metadata = metadata} local walkable_syntax = { Block = { @@ -110,8 +88,11 @@ local walkable_syntax = { "ThematicBreak", "BulletList", "OrderedList", - "Heading", "DisplayHtml", + "Heading", + }, + BlockOrParagraph = { + "Block", "Paragraph", "Plain", }, @@ -119,11 +100,8 @@ local walkable_syntax = { "Str", "Space", "Endline", - "UlOrStarLine", - "Strong", - "Emph", - "Link", - "Image", + "EndlineBreak", + "LinkAndEmph", "Code", "AutoLinkUrl", "AutoLinkEmail", @@ -136,49 +114,56 @@ local walkable_syntax = { }, } local defaultOptions = {} +defaultOptions.eagerCache = false +defaultOptions.singletonCache = true +local singletonCache = { + convert = nil, + options = nil, +} defaultOptions.cacheDir = "." defaultOptions.contentBlocksLanguageMap = "markdown-languages.json" defaultOptions.debugExtensionsFileName = "debug-extensions.json" defaultOptions.frozenCacheFileName = "frozenCache.tex" +defaultOptions.autoIdentifiers = false defaultOptions.blankBeforeBlockquote = false defaultOptions.blankBeforeCodeFence = false defaultOptions.blankBeforeDivFence = false defaultOptions.blankBeforeHeading = false +defaultOptions.blankBeforeList = false defaultOptions.bracketedSpans = false -defaultOptions.breakableBlockquotes = false +defaultOptions.breakableBlockquotes = true defaultOptions.citationNbsps = true defaultOptions.citations = false defaultOptions.codeSpans = true defaultOptions.contentBlocks = false +defaultOptions.contentLevel = "block" defaultOptions.debugExtensions = false defaultOptions.definitionLists = false -defaultOptions.eagerCache = true defaultOptions.expectJekyllData = false metadata.user_extension_api_version = 2 -metadata.grammar_version = 2 +metadata.grammar_version = 4 defaultOptions.extensions = {} defaultOptions.fancyLists = false -defaultOptions.fencedCode = false +defaultOptions.fencedCode = true defaultOptions.fencedCodeAttributes = false defaultOptions.fencedDivs = false defaultOptions.finalizeCache = false defaultOptions.frozenCacheCounter = 0 -defaultOptions.hardLineBreaks = false +defaultOptions.gfmAutoIdentifiers = false defaultOptions.hashEnumerators = false defaultOptions.headerAttributes = false -defaultOptions.html = false +defaultOptions.html = true defaultOptions.hybrid = false defaultOptions.inlineCodeAttributes = false -defaultOptions.inlineFootnotes = false defaultOptions.inlineNotes = false defaultOptions.jekyllData = false defaultOptions.linkAttributes = false defaultOptions.lineBlocks = false -defaultOptions.footnotes = false +defaultOptions.mark = false defaultOptions.notes = false defaultOptions.pipeTables = false -defaultOptions.preserveTabs = false -defaultOptions.rawAttribute = true +defaultOptions.preserveTabs = true +defaultOptions.rawAttribute = false defaultOptions.relativeReferences = false defaultOptions.shiftHeadings = 0 defaultOptions.slice = "^ $" @@ -188,6 +173,7 @@ defaultOptions.strikeThrough = false defaultOptions.stripIndent = false defaultOptions.subscripts = false defaultOptions.superscripts = false +defaultOptions.tableAttributes = false defaultOptions.tableCaptions = false defaultOptions.taskLists = false defaultOptions.texComments = false @@ -198,9 +184,9 @@ defaultOptions.tightLists = true defaultOptions.underscores = true local upper, format, length = string.upper, string.format, string.len -local P, R, S, V, C, Cg, Cb, Cmt, Cc, Ct, B, Cs, any = +local P, R, S, V, C, Cg, Cb, Cmt, Cc, Ct, B, Cs, Cp, any = lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.C, lpeg.Cg, lpeg.Cb, - lpeg.Cmt, lpeg.Cc, lpeg.Ct, lpeg.B, lpeg.Cs, lpeg.P(1) + lpeg.Cmt, lpeg.Cc, lpeg.Ct, lpeg.B, lpeg.Cs, lpeg.Cp, lpeg.P(1) local util = {} function util.err(msg, exit_code) io.stderr:write("markdown.lua: " .. msg .. "\n") @@ -348,13 +334,13 @@ local character_entities = { ["Tab"] = 9, ["NewLine"] = 10, ["excl"] = 33, - ["quot"] = 34, ["QUOT"] = 34, + ["quot"] = 34, ["num"] = 35, ["dollar"] = 36, ["percnt"] = 37, - ["amp"] = 38, ["AMP"] = 38, + ["amp"] = 38, ["apos"] = 39, ["lpar"] = 40, ["rpar"] = 41, @@ -366,31 +352,36 @@ local character_entities = { ["sol"] = 47, ["colon"] = 58, ["semi"] = 59, - ["lt"] = 60, ["LT"] = 60, + ["lt"] = 60, + ["nvlt"] = {60, 8402}, + ["bne"] = {61, 8421}, ["equals"] = 61, - ["gt"] = 62, ["GT"] = 62, + ["gt"] = 62, + ["nvgt"] = {62, 8402}, ["quest"] = 63, ["commat"] = 64, - ["lsqb"] = 91, ["lbrack"] = 91, + ["lsqb"] = 91, ["bsol"] = 92, - ["rsqb"] = 93, ["rbrack"] = 93, + ["rsqb"] = 93, ["Hat"] = 94, + ["UnderBar"] = 95, ["lowbar"] = 95, - ["grave"] = 96, ["DiacriticalGrave"] = 96, - ["lcub"] = 123, + ["grave"] = 96, + ["fjlig"] = {102, 106}, ["lbrace"] = 123, + ["lcub"] = 123, + ["VerticalLine"] = 124, ["verbar"] = 124, ["vert"] = 124, - ["VerticalLine"] = 124, - ["rcub"] = 125, ["rbrace"] = 125, - ["nbsp"] = 160, + ["rcub"] = 125, ["NonBreakingSpace"] = 160, + ["nbsp"] = 160, ["iexcl"] = 161, ["cent"] = 162, ["pound"] = 163, @@ -399,36 +390,35 @@ local character_entities = { ["brvbar"] = 166, ["sect"] = 167, ["Dot"] = 168, - ["die"] = 168, ["DoubleDot"] = 168, + ["die"] = 168, ["uml"] = 168, - ["copy"] = 169, ["COPY"] = 169, + ["copy"] = 169, ["ordf"] = 170, ["laquo"] = 171, ["not"] = 172, ["shy"] = 173, - ["reg"] = 174, - ["circledR"] = 174, ["REG"] = 174, + ["circledR"] = 174, + ["reg"] = 174, ["macr"] = 175, - ["OverBar"] = 175, ["strns"] = 175, ["deg"] = 176, + ["PlusMinus"] = 177, ["plusmn"] = 177, ["pm"] = 177, - ["PlusMinus"] = 177, ["sup2"] = 178, ["sup3"] = 179, - ["acute"] = 180, ["DiacriticalAcute"] = 180, + ["acute"] = 180, ["micro"] = 181, ["para"] = 182, - ["middot"] = 183, - ["centerdot"] = 183, ["CenterDot"] = 183, - ["cedil"] = 184, + ["centerdot"] = 183, + ["middot"] = 183, ["Cedilla"] = 184, + ["cedil"] = 184, ["sup1"] = 185, ["ordm"] = 186, ["raquo"] = 187, @@ -443,6 +433,7 @@ local character_entities = { ["Atilde"] = 195, ["Auml"] = 196, ["Aring"] = 197, + ["angst"] = 197, ["AElig"] = 198, ["Ccedil"] = 199, ["Egrave"] = 200, @@ -492,8 +483,8 @@ local character_entities = { ["ocirc"] = 244, ["otilde"] = 245, ["ouml"] = 246, - ["divide"] = 247, ["div"] = 247, + ["divide"] = 247, ["oslash"] = 248, ["ugrave"] = 249, ["uacute"] = 250, @@ -628,20 +619,19 @@ local character_entities = { ["gacute"] = 501, ["jmath"] = 567, ["circ"] = 710, - ["caron"] = 711, ["Hacek"] = 711, - ["breve"] = 728, + ["caron"] = 711, ["Breve"] = 728, - ["dot"] = 729, + ["breve"] = 728, ["DiacriticalDot"] = 729, + ["dot"] = 729, ["ring"] = 730, ["ogon"] = 731, - ["tilde"] = 732, ["DiacriticalTilde"] = 732, - ["dblac"] = 733, + ["tilde"] = 732, ["DiacriticalDoubleAcute"] = 733, + ["dblac"] = 733, ["DownBreve"] = 785, - ["UnderBar"] = 818, ["Alpha"] = 913, ["Beta"] = 914, ["Gamma"] = 915, @@ -666,12 +656,12 @@ local character_entities = { ["Chi"] = 935, ["Psi"] = 936, ["Omega"] = 937, + ["ohm"] = 937, ["alpha"] = 945, ["beta"] = 946, ["gamma"] = 947, ["delta"] = 948, - ["epsiv"] = 949, - ["varepsilon"] = 949, + ["epsi"] = 949, ["epsilon"] = 949, ["zeta"] = 950, ["eta"] = 951, @@ -685,38 +675,39 @@ local character_entities = { ["omicron"] = 959, ["pi"] = 960, ["rho"] = 961, + ["sigmaf"] = 962, ["sigmav"] = 962, ["varsigma"] = 962, - ["sigmaf"] = 962, ["sigma"] = 963, ["tau"] = 964, ["upsi"] = 965, ["upsilon"] = 965, ["phi"] = 966, - ["phiv"] = 966, - ["varphi"] = 966, ["chi"] = 967, ["psi"] = 968, ["omega"] = 969, + ["thetasym"] = 977, ["thetav"] = 977, ["vartheta"] = 977, - ["thetasym"] = 977, ["Upsi"] = 978, ["upsih"] = 978, + ["phiv"] = 981, ["straightphi"] = 981, + ["varphi"] = 981, ["piv"] = 982, ["varpi"] = 982, ["Gammad"] = 988, - ["gammad"] = 989, ["digamma"] = 989, + ["gammad"] = 989, ["kappav"] = 1008, ["varkappa"] = 1008, ["rhov"] = 1009, ["varrho"] = 1009, - ["epsi"] = 1013, + ["epsiv"] = 1013, ["straightepsilon"] = 1013, - ["bepsi"] = 1014, + ["varepsilon"] = 1013, ["backepsilon"] = 1014, + ["bepsi"] = 1014, ["IOcy"] = 1025, ["DJcy"] = 1026, ["GJcy"] = 1027, @@ -815,40 +806,40 @@ local character_entities = { ["emsp14"] = 8197, ["numsp"] = 8199, ["puncsp"] = 8200, - ["thinsp"] = 8201, ["ThinSpace"] = 8201, - ["hairsp"] = 8202, + ["thinsp"] = 8201, ["VeryThinSpace"] = 8202, - ["ZeroWidthSpace"] = 8203, - ["NegativeVeryThinSpace"] = 8203, - ["NegativeThinSpace"] = 8203, + ["hairsp"] = 8202, ["NegativeMediumSpace"] = 8203, ["NegativeThickSpace"] = 8203, + ["NegativeThinSpace"] = 8203, + ["NegativeVeryThinSpace"] = 8203, + ["ZeroWidthSpace"] = 8203, ["zwnj"] = 8204, ["zwj"] = 8205, ["lrm"] = 8206, ["rlm"] = 8207, - ["hyphen"] = 8208, ["dash"] = 8208, + ["hyphen"] = 8208, ["ndash"] = 8211, ["mdash"] = 8212, ["horbar"] = 8213, ["Verbar"] = 8214, ["Vert"] = 8214, - ["lsquo"] = 8216, ["OpenCurlyQuote"] = 8216, + ["lsquo"] = 8216, + ["CloseCurlyQuote"] = 8217, ["rsquo"] = 8217, ["rsquor"] = 8217, - ["CloseCurlyQuote"] = 8217, ["lsquor"] = 8218, ["sbquo"] = 8218, - ["ldquo"] = 8220, ["OpenCurlyDoubleQuote"] = 8220, + ["ldquo"] = 8220, + ["CloseCurlyDoubleQuote"] = 8221, ["rdquo"] = 8221, ["rdquor"] = 8221, - ["CloseCurlyDoubleQuote"] = 8221, - ["ldquor"] = 8222, ["bdquo"] = 8222, + ["ldquor"] = 8222, ["dagger"] = 8224, ["Dagger"] = 8225, ["ddagger"] = 8225, @@ -862,10 +853,11 @@ local character_entities = { ["prime"] = 8242, ["Prime"] = 8243, ["tprime"] = 8244, - ["bprime"] = 8245, ["backprime"] = 8245, + ["bprime"] = 8245, ["lsaquo"] = 8249, ["rsaquo"] = 8250, + ["OverBar"] = 8254, ["oline"] = 8254, ["caret"] = 8257, ["hybull"] = 8259, @@ -873,6 +865,7 @@ local character_entities = { ["bsemi"] = 8271, ["qprime"] = 8279, ["MediumSpace"] = 8287, + ["ThickSpace"] = {8287, 8202}, ["NoBreak"] = 8288, ["ApplyFunction"] = 8289, ["af"] = 8289, @@ -881,34 +874,34 @@ local character_entities = { ["InvisibleComma"] = 8291, ["ic"] = 8291, ["euro"] = 8364, - ["tdot"] = 8411, ["TripleDot"] = 8411, + ["tdot"] = 8411, ["DotDot"] = 8412, ["Copf"] = 8450, ["complexes"] = 8450, ["incare"] = 8453, ["gscr"] = 8458, - ["hamilt"] = 8459, ["HilbertSpace"] = 8459, ["Hscr"] = 8459, + ["hamilt"] = 8459, ["Hfr"] = 8460, ["Poincareplane"] = 8460, - ["quaternions"] = 8461, ["Hopf"] = 8461, + ["quaternions"] = 8461, ["planckh"] = 8462, - ["planck"] = 8463, ["hbar"] = 8463, - ["plankv"] = 8463, ["hslash"] = 8463, + ["planck"] = 8463, + ["plankv"] = 8463, ["Iscr"] = 8464, ["imagline"] = 8464, - ["image"] = 8465, + ["Ifr"] = 8465, ["Im"] = 8465, + ["image"] = 8465, ["imagpart"] = 8465, - ["Ifr"] = 8465, + ["Laplacetrf"] = 8466, ["Lscr"] = 8466, ["lagran"] = 8466, - ["Laplacetrf"] = 8466, ["ell"] = 8467, ["Nopf"] = 8469, ["naturals"] = 8469, @@ -918,40 +911,38 @@ local character_entities = { ["wp"] = 8472, ["Popf"] = 8473, ["primes"] = 8473, - ["rationals"] = 8474, ["Qopf"] = 8474, + ["rationals"] = 8474, ["Rscr"] = 8475, ["realine"] = 8475, - ["real"] = 8476, ["Re"] = 8476, - ["realpart"] = 8476, ["Rfr"] = 8476, - ["reals"] = 8477, + ["real"] = 8476, + ["realpart"] = 8476, ["Ropf"] = 8477, + ["reals"] = 8477, ["rx"] = 8478, - ["trade"] = 8482, ["TRADE"] = 8482, - ["integers"] = 8484, + ["trade"] = 8482, ["Zopf"] = 8484, - ["ohm"] = 8486, + ["integers"] = 8484, ["mho"] = 8487, ["Zfr"] = 8488, ["zeetrf"] = 8488, ["iiota"] = 8489, - ["angst"] = 8491, - ["bernou"] = 8492, ["Bernoullis"] = 8492, ["Bscr"] = 8492, - ["Cfr"] = 8493, + ["bernou"] = 8492, ["Cayleys"] = 8493, + ["Cfr"] = 8493, ["escr"] = 8495, ["Escr"] = 8496, ["expectation"] = 8496, - ["Fscr"] = 8497, ["Fouriertrf"] = 8497, - ["phmmat"] = 8499, + ["Fscr"] = 8497, ["Mellintrf"] = 8499, ["Mscr"] = 8499, + ["phmmat"] = 8499, ["order"] = 8500, ["orderof"] = 8500, ["oscr"] = 8500, @@ -965,8 +956,8 @@ local character_entities = { ["DifferentialD"] = 8518, ["dd"] = 8518, ["ExponentialE"] = 8519, - ["exponentiale"] = 8519, ["ee"] = 8519, + ["exponentiale"] = 8519, ["ImaginaryI"] = 8520, ["ii"] = 8520, ["frac13"] = 8531, @@ -981,46 +972,47 @@ local character_entities = { ["frac38"] = 8540, ["frac58"] = 8541, ["frac78"] = 8542, + ["LeftArrow"] = 8592, + ["ShortLeftArrow"] = 8592, ["larr"] = 8592, ["leftarrow"] = 8592, - ["LeftArrow"] = 8592, ["slarr"] = 8592, - ["ShortLeftArrow"] = 8592, + ["ShortUpArrow"] = 8593, + ["UpArrow"] = 8593, ["uarr"] = 8593, ["uparrow"] = 8593, - ["UpArrow"] = 8593, - ["ShortUpArrow"] = 8593, + ["RightArrow"] = 8594, + ["ShortRightArrow"] = 8594, ["rarr"] = 8594, ["rightarrow"] = 8594, - ["RightArrow"] = 8594, ["srarr"] = 8594, - ["ShortRightArrow"] = 8594, - ["darr"] = 8595, - ["downarrow"] = 8595, ["DownArrow"] = 8595, ["ShortDownArrow"] = 8595, + ["darr"] = 8595, + ["downarrow"] = 8595, + ["LeftRightArrow"] = 8596, ["harr"] = 8596, ["leftrightarrow"] = 8596, - ["LeftRightArrow"] = 8596, - ["varr"] = 8597, - ["updownarrow"] = 8597, ["UpDownArrow"] = 8597, - ["nwarr"] = 8598, + ["updownarrow"] = 8597, + ["varr"] = 8597, ["UpperLeftArrow"] = 8598, + ["nwarr"] = 8598, ["nwarrow"] = 8598, - ["nearr"] = 8599, ["UpperRightArrow"] = 8599, + ["nearr"] = 8599, ["nearrow"] = 8599, + ["LowerRightArrow"] = 8600, ["searr"] = 8600, ["searrow"] = 8600, - ["LowerRightArrow"] = 8600, + ["LowerLeftArrow"] = 8601, ["swarr"] = 8601, ["swarrow"] = 8601, - ["LowerLeftArrow"] = 8601, ["nlarr"] = 8602, ["nleftarrow"] = 8602, ["nrarr"] = 8603, ["nrightarrow"] = 8603, + ["nrarrw"] = {8605, 824}, ["rarrw"] = 8605, ["rightsquigarrow"] = 8605, ["Larr"] = 8606, @@ -1037,27 +1029,27 @@ local character_entities = { ["mapstoleft"] = 8612, ["UpTeeArrow"] = 8613, ["mapstoup"] = 8613, - ["map"] = 8614, ["RightTeeArrow"] = 8614, + ["map"] = 8614, ["mapsto"] = 8614, ["DownTeeArrow"] = 8615, ["mapstodown"] = 8615, - ["larrhk"] = 8617, ["hookleftarrow"] = 8617, - ["rarrhk"] = 8618, + ["larrhk"] = 8617, ["hookrightarrow"] = 8618, + ["rarrhk"] = 8618, ["larrlp"] = 8619, ["looparrowleft"] = 8619, - ["rarrlp"] = 8620, ["looparrowright"] = 8620, + ["rarrlp"] = 8620, ["harrw"] = 8621, ["leftrightsquigarrow"] = 8621, ["nharr"] = 8622, ["nleftrightarrow"] = 8622, - ["lsh"] = 8624, ["Lsh"] = 8624, - ["rsh"] = 8625, + ["lsh"] = 8624, ["Rsh"] = 8625, + ["rsh"] = 8625, ["ldsh"] = 8626, ["rdsh"] = 8627, ["crarr"] = 8629, @@ -1065,456 +1057,505 @@ local character_entities = { ["curvearrowleft"] = 8630, ["curarr"] = 8631, ["curvearrowright"] = 8631, - ["olarr"] = 8634, ["circlearrowleft"] = 8634, - ["orarr"] = 8635, + ["olarr"] = 8634, ["circlearrowright"] = 8635, - ["lharu"] = 8636, + ["orarr"] = 8635, ["LeftVector"] = 8636, ["leftharpoonup"] = 8636, - ["lhard"] = 8637, - ["leftharpoondown"] = 8637, + ["lharu"] = 8636, ["DownLeftVector"] = 8637, + ["leftharpoondown"] = 8637, + ["lhard"] = 8637, + ["RightUpVector"] = 8638, ["uharr"] = 8638, ["upharpoonright"] = 8638, - ["RightUpVector"] = 8638, + ["LeftUpVector"] = 8639, ["uharl"] = 8639, ["upharpoonleft"] = 8639, - ["LeftUpVector"] = 8639, - ["rharu"] = 8640, ["RightVector"] = 8640, + ["rharu"] = 8640, ["rightharpoonup"] = 8640, + ["DownRightVector"] = 8641, ["rhard"] = 8641, ["rightharpoondown"] = 8641, - ["DownRightVector"] = 8641, - ["dharr"] = 8642, ["RightDownVector"] = 8642, + ["dharr"] = 8642, ["downharpoonright"] = 8642, - ["dharl"] = 8643, ["LeftDownVector"] = 8643, + ["dharl"] = 8643, ["downharpoonleft"] = 8643, - ["rlarr"] = 8644, - ["rightleftarrows"] = 8644, ["RightArrowLeftArrow"] = 8644, - ["udarr"] = 8645, + ["rightleftarrows"] = 8644, + ["rlarr"] = 8644, ["UpArrowDownArrow"] = 8645, - ["lrarr"] = 8646, - ["leftrightarrows"] = 8646, + ["udarr"] = 8645, ["LeftArrowRightArrow"] = 8646, - ["llarr"] = 8647, + ["leftrightarrows"] = 8646, + ["lrarr"] = 8646, ["leftleftarrows"] = 8647, - ["uuarr"] = 8648, + ["llarr"] = 8647, ["upuparrows"] = 8648, - ["rrarr"] = 8649, + ["uuarr"] = 8648, ["rightrightarrows"] = 8649, + ["rrarr"] = 8649, ["ddarr"] = 8650, ["downdownarrows"] = 8650, - ["lrhar"] = 8651, ["ReverseEquilibrium"] = 8651, ["leftrightharpoons"] = 8651, - ["rlhar"] = 8652, - ["rightleftharpoons"] = 8652, + ["lrhar"] = 8651, ["Equilibrium"] = 8652, - ["nlArr"] = 8653, + ["rightleftharpoons"] = 8652, + ["rlhar"] = 8652, ["nLeftarrow"] = 8653, - ["nhArr"] = 8654, + ["nlArr"] = 8653, ["nLeftrightarrow"] = 8654, - ["nrArr"] = 8655, + ["nhArr"] = 8654, ["nRightarrow"] = 8655, - ["lArr"] = 8656, - ["Leftarrow"] = 8656, + ["nrArr"] = 8655, ["DoubleLeftArrow"] = 8656, - ["uArr"] = 8657, - ["Uparrow"] = 8657, + ["Leftarrow"] = 8656, + ["lArr"] = 8656, ["DoubleUpArrow"] = 8657, - ["rArr"] = 8658, - ["Rightarrow"] = 8658, - ["Implies"] = 8658, + ["Uparrow"] = 8657, + ["uArr"] = 8657, ["DoubleRightArrow"] = 8658, - ["dArr"] = 8659, - ["Downarrow"] = 8659, + ["Implies"] = 8658, + ["Rightarrow"] = 8658, + ["rArr"] = 8658, ["DoubleDownArrow"] = 8659, - ["hArr"] = 8660, - ["Leftrightarrow"] = 8660, + ["Downarrow"] = 8659, + ["dArr"] = 8659, ["DoubleLeftRightArrow"] = 8660, + ["Leftrightarrow"] = 8660, + ["hArr"] = 8660, ["iff"] = 8660, - ["vArr"] = 8661, - ["Updownarrow"] = 8661, ["DoubleUpDownArrow"] = 8661, + ["Updownarrow"] = 8661, + ["vArr"] = 8661, ["nwArr"] = 8662, ["neArr"] = 8663, ["seArr"] = 8664, ["swArr"] = 8665, - ["lAarr"] = 8666, ["Lleftarrow"] = 8666, - ["rAarr"] = 8667, + ["lAarr"] = 8666, ["Rrightarrow"] = 8667, + ["rAarr"] = 8667, ["zigrarr"] = 8669, - ["larrb"] = 8676, ["LeftArrowBar"] = 8676, - ["rarrb"] = 8677, + ["larrb"] = 8676, ["RightArrowBar"] = 8677, - ["duarr"] = 8693, + ["rarrb"] = 8677, ["DownArrowUpArrow"] = 8693, + ["duarr"] = 8693, ["loarr"] = 8701, ["roarr"] = 8702, ["hoarr"] = 8703, - ["forall"] = 8704, ["ForAll"] = 8704, + ["forall"] = 8704, ["comp"] = 8705, ["complement"] = 8705, - ["part"] = 8706, ["PartialD"] = 8706, - ["exist"] = 8707, + ["npart"] = {8706, 824}, + ["part"] = 8706, ["Exists"] = 8707, - ["nexist"] = 8708, + ["exist"] = 8707, ["NotExists"] = 8708, + ["nexist"] = 8708, ["nexists"] = 8708, ["empty"] = 8709, ["emptyset"] = 8709, ["emptyv"] = 8709, ["varnothing"] = 8709, - ["nabla"] = 8711, ["Del"] = 8711, - ["isin"] = 8712, - ["isinv"] = 8712, + ["nabla"] = 8711, ["Element"] = 8712, ["in"] = 8712, - ["notin"] = 8713, + ["isin"] = 8712, + ["isinv"] = 8712, ["NotElement"] = 8713, + ["notin"] = 8713, ["notinva"] = 8713, - ["niv"] = 8715, ["ReverseElement"] = 8715, - ["ni"] = 8715, ["SuchThat"] = 8715, + ["ni"] = 8715, + ["niv"] = 8715, + ["NotReverseElement"] = 8716, ["notni"] = 8716, ["notniva"] = 8716, - ["NotReverseElement"] = 8716, - ["prod"] = 8719, ["Product"] = 8719, - ["coprod"] = 8720, + ["prod"] = 8719, ["Coproduct"] = 8720, - ["sum"] = 8721, + ["coprod"] = 8720, ["Sum"] = 8721, + ["sum"] = 8721, ["minus"] = 8722, + ["MinusPlus"] = 8723, ["mnplus"] = 8723, ["mp"] = 8723, - ["MinusPlus"] = 8723, - ["plusdo"] = 8724, ["dotplus"] = 8724, - ["setmn"] = 8726, - ["setminus"] = 8726, + ["plusdo"] = 8724, ["Backslash"] = 8726, - ["ssetmn"] = 8726, + ["setminus"] = 8726, + ["setmn"] = 8726, ["smallsetminus"] = 8726, + ["ssetmn"] = 8726, ["lowast"] = 8727, - ["compfn"] = 8728, ["SmallCircle"] = 8728, - ["radic"] = 8730, + ["compfn"] = 8728, ["Sqrt"] = 8730, + ["radic"] = 8730, + ["Proportional"] = 8733, ["prop"] = 8733, ["propto"] = 8733, - ["Proportional"] = 8733, - ["vprop"] = 8733, ["varpropto"] = 8733, + ["vprop"] = 8733, ["infin"] = 8734, ["angrt"] = 8735, ["ang"] = 8736, ["angle"] = 8736, + ["nang"] = {8736, 8402}, ["angmsd"] = 8737, ["measuredangle"] = 8737, ["angsph"] = 8738, - ["mid"] = 8739, ["VerticalBar"] = 8739, - ["smid"] = 8739, + ["mid"] = 8739, ["shortmid"] = 8739, - ["nmid"] = 8740, + ["smid"] = 8739, ["NotVerticalBar"] = 8740, - ["nsmid"] = 8740, + ["nmid"] = 8740, ["nshortmid"] = 8740, + ["nsmid"] = 8740, + ["DoubleVerticalBar"] = 8741, ["par"] = 8741, ["parallel"] = 8741, - ["DoubleVerticalBar"] = 8741, - ["spar"] = 8741, ["shortparallel"] = 8741, + ["spar"] = 8741, + ["NotDoubleVerticalBar"] = 8742, ["npar"] = 8742, ["nparallel"] = 8742, - ["NotDoubleVerticalBar"] = 8742, - ["nspar"] = 8742, ["nshortparallel"] = 8742, + ["nspar"] = 8742, ["and"] = 8743, ["wedge"] = 8743, ["or"] = 8744, ["vee"] = 8744, ["cap"] = 8745, + ["caps"] = {8745, 65024}, ["cup"] = 8746, - ["int"] = 8747, + ["cups"] = {8746, 65024}, ["Integral"] = 8747, + ["int"] = 8747, ["Int"] = 8748, - ["tint"] = 8749, ["iiint"] = 8749, + ["tint"] = 8749, + ["ContourIntegral"] = 8750, ["conint"] = 8750, ["oint"] = 8750, - ["ContourIntegral"] = 8750, ["Conint"] = 8751, ["DoubleContourIntegral"] = 8751, ["Cconint"] = 8752, ["cwint"] = 8753, - ["cwconint"] = 8754, ["ClockwiseContourIntegral"] = 8754, - ["awconint"] = 8755, + ["cwconint"] = 8754, ["CounterClockwiseContourIntegral"] = 8755, + ["awconint"] = 8755, + ["Therefore"] = 8756, ["there4"] = 8756, ["therefore"] = 8756, - ["Therefore"] = 8756, + ["Because"] = 8757, ["becaus"] = 8757, ["because"] = 8757, - ["Because"] = 8757, ["ratio"] = 8758, ["Colon"] = 8759, ["Proportion"] = 8759, - ["minusd"] = 8760, ["dotminus"] = 8760, + ["minusd"] = 8760, ["mDDot"] = 8762, ["homtht"] = 8763, - ["sim"] = 8764, ["Tilde"] = 8764, - ["thksim"] = 8764, + ["nvsim"] = {8764, 8402}, + ["sim"] = 8764, ["thicksim"] = 8764, - ["bsim"] = 8765, + ["thksim"] = 8764, ["backsim"] = 8765, + ["bsim"] = 8765, + ["race"] = {8765, 817}, ["ac"] = 8766, + ["acE"] = {8766, 819}, ["mstpos"] = 8766, ["acd"] = 8767, - ["wreath"] = 8768, ["VerticalTilde"] = 8768, ["wr"] = 8768, - ["nsim"] = 8769, + ["wreath"] = 8768, ["NotTilde"] = 8769, - ["esim"] = 8770, + ["nsim"] = 8769, ["EqualTilde"] = 8770, + ["NotEqualTilde"] = {8770, 824}, ["eqsim"] = 8770, - ["sime"] = 8771, + ["esim"] = 8770, + ["nesim"] = {8770, 824}, ["TildeEqual"] = 8771, + ["sime"] = 8771, ["simeq"] = 8771, + ["NotTildeEqual"] = 8772, ["nsime"] = 8772, ["nsimeq"] = 8772, - ["NotTildeEqual"] = 8772, - ["cong"] = 8773, ["TildeFullEqual"] = 8773, + ["cong"] = 8773, ["simne"] = 8774, - ["ncong"] = 8775, ["NotTildeFullEqual"] = 8775, - ["asymp"] = 8776, - ["ap"] = 8776, + ["ncong"] = 8775, ["TildeTilde"] = 8776, + ["ap"] = 8776, ["approx"] = 8776, - ["thkap"] = 8776, + ["asymp"] = 8776, ["thickapprox"] = 8776, - ["nap"] = 8777, + ["thkap"] = 8776, ["NotTildeTilde"] = 8777, + ["nap"] = 8777, ["napprox"] = 8777, ["ape"] = 8778, ["approxeq"] = 8778, ["apid"] = 8779, - ["bcong"] = 8780, + ["napid"] = {8779, 824}, ["backcong"] = 8780, - ["asympeq"] = 8781, + ["bcong"] = 8780, ["CupCap"] = 8781, - ["bump"] = 8782, - ["HumpDownHump"] = 8782, + ["asympeq"] = 8781, + ["nvap"] = {8781, 8402}, ["Bumpeq"] = 8782, - ["bumpe"] = 8783, + ["HumpDownHump"] = 8782, + ["NotHumpDownHump"] = {8782, 824}, + ["bump"] = 8782, + ["nbump"] = {8782, 824}, ["HumpEqual"] = 8783, + ["NotHumpEqual"] = {8783, 824}, + ["bumpe"] = 8783, ["bumpeq"] = 8783, - ["esdot"] = 8784, + ["nbumpe"] = {8783, 824}, ["DotEqual"] = 8784, ["doteq"] = 8784, - ["eDot"] = 8785, + ["esdot"] = 8784, + ["nedot"] = {8784, 824}, ["doteqdot"] = 8785, + ["eDot"] = 8785, ["efDot"] = 8786, ["fallingdotseq"] = 8786, ["erDot"] = 8787, ["risingdotseq"] = 8787, + ["Assign"] = 8788, ["colone"] = 8788, ["coloneq"] = 8788, - ["Assign"] = 8788, ["ecolon"] = 8789, ["eqcolon"] = 8789, ["ecir"] = 8790, ["eqcirc"] = 8790, - ["cire"] = 8791, ["circeq"] = 8791, + ["cire"] = 8791, ["wedgeq"] = 8793, ["veeeq"] = 8794, - ["trie"] = 8796, ["triangleq"] = 8796, + ["trie"] = 8796, ["equest"] = 8799, ["questeq"] = 8799, - ["ne"] = 8800, ["NotEqual"] = 8800, - ["equiv"] = 8801, + ["ne"] = 8800, ["Congruent"] = 8801, - ["nequiv"] = 8802, + ["bnequiv"] = {8801, 8421}, + ["equiv"] = 8801, ["NotCongruent"] = 8802, + ["nequiv"] = 8802, ["le"] = 8804, ["leq"] = 8804, - ["ge"] = 8805, + ["nvle"] = {8804, 8402}, ["GreaterEqual"] = 8805, + ["ge"] = 8805, ["geq"] = 8805, - ["lE"] = 8806, + ["nvge"] = {8805, 8402}, ["LessFullEqual"] = 8806, + ["lE"] = 8806, ["leqq"] = 8806, - ["gE"] = 8807, + ["nlE"] = {8806, 824}, + ["nleqq"] = {8806, 824}, ["GreaterFullEqual"] = 8807, + ["NotGreaterFullEqual"] = {8807, 824}, + ["gE"] = 8807, ["geqq"] = 8807, + ["ngE"] = {8807, 824}, + ["ngeqq"] = {8807, 824}, ["lnE"] = 8808, ["lneqq"] = 8808, + ["lvertneqq"] = {8808, 65024}, + ["lvnE"] = {8808, 65024}, ["gnE"] = 8809, ["gneqq"] = 8809, + ["gvertneqq"] = {8809, 65024}, + ["gvnE"] = {8809, 65024}, ["Lt"] = 8810, ["NestedLessLess"] = 8810, + ["NotLessLess"] = {8810, 824}, ["ll"] = 8810, + ["nLt"] = {8810, 8402}, + ["nLtv"] = {8810, 824}, ["Gt"] = 8811, ["NestedGreaterGreater"] = 8811, + ["NotGreaterGreater"] = {8811, 824}, ["gg"] = 8811, - ["twixt"] = 8812, + ["nGt"] = {8811, 8402}, + ["nGtv"] = {8811, 824}, ["between"] = 8812, + ["twixt"] = 8812, ["NotCupCap"] = 8813, - ["nlt"] = 8814, ["NotLess"] = 8814, ["nless"] = 8814, - ["ngt"] = 8815, + ["nlt"] = 8814, ["NotGreater"] = 8815, + ["ngt"] = 8815, ["ngtr"] = 8815, - ["nle"] = 8816, ["NotLessEqual"] = 8816, + ["nle"] = 8816, ["nleq"] = 8816, - ["nge"] = 8817, ["NotGreaterEqual"] = 8817, + ["nge"] = 8817, ["ngeq"] = 8817, - ["lsim"] = 8818, ["LessTilde"] = 8818, ["lesssim"] = 8818, + ["lsim"] = 8818, + ["GreaterTilde"] = 8819, ["gsim"] = 8819, ["gtrsim"] = 8819, - ["GreaterTilde"] = 8819, - ["nlsim"] = 8820, ["NotLessTilde"] = 8820, - ["ngsim"] = 8821, + ["nlsim"] = 8820, ["NotGreaterTilde"] = 8821, - ["lg"] = 8822, - ["lessgtr"] = 8822, + ["ngsim"] = 8821, ["LessGreater"] = 8822, + ["lessgtr"] = 8822, + ["lg"] = 8822, + ["GreaterLess"] = 8823, ["gl"] = 8823, ["gtrless"] = 8823, - ["GreaterLess"] = 8823, - ["ntlg"] = 8824, ["NotLessGreater"] = 8824, - ["ntgl"] = 8825, + ["ntlg"] = 8824, ["NotGreaterLess"] = 8825, - ["pr"] = 8826, + ["ntgl"] = 8825, ["Precedes"] = 8826, + ["pr"] = 8826, ["prec"] = 8826, - ["sc"] = 8827, ["Succeeds"] = 8827, + ["sc"] = 8827, ["succ"] = 8827, - ["prcue"] = 8828, ["PrecedesSlantEqual"] = 8828, + ["prcue"] = 8828, ["preccurlyeq"] = 8828, - ["sccue"] = 8829, ["SucceedsSlantEqual"] = 8829, + ["sccue"] = 8829, ["succcurlyeq"] = 8829, - ["prsim"] = 8830, - ["precsim"] = 8830, ["PrecedesTilde"] = 8830, + ["precsim"] = 8830, + ["prsim"] = 8830, + ["NotSucceedsTilde"] = {8831, 824}, + ["SucceedsTilde"] = 8831, ["scsim"] = 8831, ["succsim"] = 8831, - ["SucceedsTilde"] = 8831, + ["NotPrecedes"] = 8832, ["npr"] = 8832, ["nprec"] = 8832, - ["NotPrecedes"] = 8832, + ["NotSucceeds"] = 8833, ["nsc"] = 8833, ["nsucc"] = 8833, - ["NotSucceeds"] = 8833, + ["NotSubset"] = {8834, 8402}, + ["nsubset"] = {8834, 8402}, ["sub"] = 8834, ["subset"] = 8834, + ["vnsub"] = {8834, 8402}, + ["NotSuperset"] = {8835, 8402}, + ["Superset"] = 8835, + ["nsupset"] = {8835, 8402}, ["sup"] = 8835, ["supset"] = 8835, - ["Superset"] = 8835, + ["vnsup"] = {8835, 8402}, ["nsub"] = 8836, ["nsup"] = 8837, - ["sube"] = 8838, ["SubsetEqual"] = 8838, + ["sube"] = 8838, ["subseteq"] = 8838, + ["SupersetEqual"] = 8839, ["supe"] = 8839, ["supseteq"] = 8839, - ["SupersetEqual"] = 8839, + ["NotSubsetEqual"] = 8840, ["nsube"] = 8840, ["nsubseteq"] = 8840, - ["NotSubsetEqual"] = 8840, + ["NotSupersetEqual"] = 8841, ["nsupe"] = 8841, ["nsupseteq"] = 8841, - ["NotSupersetEqual"] = 8841, ["subne"] = 8842, ["subsetneq"] = 8842, + ["varsubsetneq"] = {8842, 65024}, + ["vsubne"] = {8842, 65024}, ["supne"] = 8843, ["supsetneq"] = 8843, + ["varsupsetneq"] = {8843, 65024}, + ["vsupne"] = {8843, 65024}, ["cupdot"] = 8845, - ["uplus"] = 8846, ["UnionPlus"] = 8846, - ["sqsub"] = 8847, + ["uplus"] = 8846, + ["NotSquareSubset"] = {8847, 824}, ["SquareSubset"] = 8847, + ["sqsub"] = 8847, ["sqsubset"] = 8847, - ["sqsup"] = 8848, + ["NotSquareSuperset"] = {8848, 824}, ["SquareSuperset"] = 8848, + ["sqsup"] = 8848, ["sqsupset"] = 8848, - ["sqsube"] = 8849, ["SquareSubsetEqual"] = 8849, + ["sqsube"] = 8849, ["sqsubseteq"] = 8849, - ["sqsupe"] = 8850, ["SquareSupersetEqual"] = 8850, + ["sqsupe"] = 8850, ["sqsupseteq"] = 8850, - ["sqcap"] = 8851, ["SquareIntersection"] = 8851, - ["sqcup"] = 8852, + ["sqcap"] = 8851, + ["sqcaps"] = {8851, 65024}, ["SquareUnion"] = 8852, - ["oplus"] = 8853, + ["sqcup"] = 8852, + ["sqcups"] = {8852, 65024}, ["CirclePlus"] = 8853, - ["ominus"] = 8854, + ["oplus"] = 8853, ["CircleMinus"] = 8854, - ["otimes"] = 8855, + ["ominus"] = 8854, ["CircleTimes"] = 8855, + ["otimes"] = 8855, ["osol"] = 8856, - ["odot"] = 8857, ["CircleDot"] = 8857, - ["ocir"] = 8858, + ["odot"] = 8857, ["circledcirc"] = 8858, - ["oast"] = 8859, + ["ocir"] = 8858, ["circledast"] = 8859, - ["odash"] = 8861, + ["oast"] = 8859, ["circleddash"] = 8861, - ["plusb"] = 8862, + ["odash"] = 8861, ["boxplus"] = 8862, - ["minusb"] = 8863, + ["plusb"] = 8862, ["boxminus"] = 8863, - ["timesb"] = 8864, + ["minusb"] = 8863, ["boxtimes"] = 8864, - ["sdotb"] = 8865, + ["timesb"] = 8864, ["dotsquare"] = 8865, - ["vdash"] = 8866, + ["sdotb"] = 8865, ["RightTee"] = 8866, - ["dashv"] = 8867, + ["vdash"] = 8866, ["LeftTee"] = 8867, - ["top"] = 8868, + ["dashv"] = 8867, ["DownTee"] = 8868, - ["bottom"] = 8869, + ["top"] = 8868, + ["UpTee"] = 8869, ["bot"] = 8869, + ["bottom"] = 8869, ["perp"] = 8869, - ["UpTee"] = 8869, ["models"] = 8871, - ["vDash"] = 8872, ["DoubleRightTee"] = 8872, + ["vDash"] = 8872, ["Vdash"] = 8873, ["Vvdash"] = 8874, ["VDash"] = 8875, @@ -1523,22 +1564,24 @@ local character_entities = { ["nVdash"] = 8878, ["nVDash"] = 8879, ["prurel"] = 8880, - ["vltri"] = 8882, - ["vartriangleleft"] = 8882, ["LeftTriangle"] = 8882, - ["vrtri"] = 8883, - ["vartriangleright"] = 8883, + ["vartriangleleft"] = 8882, + ["vltri"] = 8882, ["RightTriangle"] = 8883, + ["vartriangleright"] = 8883, + ["vrtri"] = 8883, + ["LeftTriangleEqual"] = 8884, ["ltrie"] = 8884, + ["nvltrie"] = {8884, 8402}, ["trianglelefteq"] = 8884, - ["LeftTriangleEqual"] = 8884, + ["RightTriangleEqual"] = 8885, + ["nvrtrie"] = {8885, 8402}, ["rtrie"] = 8885, ["trianglerighteq"] = 8885, - ["RightTriangleEqual"] = 8885, ["origof"] = 8886, ["imof"] = 8887, - ["mumap"] = 8888, ["multimap"] = 8888, + ["mumap"] = 8888, ["hercon"] = 8889, ["intcal"] = 8890, ["intercal"] = 8890, @@ -1546,39 +1589,39 @@ local character_entities = { ["barvee"] = 8893, ["angrtvb"] = 8894, ["lrtri"] = 8895, - ["xwedge"] = 8896, ["Wedge"] = 8896, ["bigwedge"] = 8896, - ["xvee"] = 8897, + ["xwedge"] = 8896, ["Vee"] = 8897, ["bigvee"] = 8897, - ["xcap"] = 8898, + ["xvee"] = 8897, ["Intersection"] = 8898, ["bigcap"] = 8898, - ["xcup"] = 8899, + ["xcap"] = 8898, ["Union"] = 8899, ["bigcup"] = 8899, + ["xcup"] = 8899, + ["Diamond"] = 8900, ["diam"] = 8900, ["diamond"] = 8900, - ["Diamond"] = 8900, ["sdot"] = 8901, - ["sstarf"] = 8902, ["Star"] = 8902, - ["divonx"] = 8903, + ["sstarf"] = 8902, ["divideontimes"] = 8903, + ["divonx"] = 8903, ["bowtie"] = 8904, ["ltimes"] = 8905, ["rtimes"] = 8906, - ["lthree"] = 8907, ["leftthreetimes"] = 8907, - ["rthree"] = 8908, + ["lthree"] = 8907, ["rightthreetimes"] = 8908, - ["bsime"] = 8909, + ["rthree"] = 8908, ["backsimeq"] = 8909, - ["cuvee"] = 8910, + ["bsime"] = 8909, ["curlyvee"] = 8910, - ["cuwed"] = 8911, + ["cuvee"] = 8910, ["curlywedge"] = 8911, + ["cuwed"] = 8911, ["Sub"] = 8912, ["Subset"] = 8912, ["Sup"] = 8913, @@ -1588,49 +1631,53 @@ local character_entities = { ["fork"] = 8916, ["pitchfork"] = 8916, ["epar"] = 8917, - ["ltdot"] = 8918, ["lessdot"] = 8918, + ["ltdot"] = 8918, ["gtdot"] = 8919, ["gtrdot"] = 8919, ["Ll"] = 8920, + ["nLl"] = {8920, 824}, ["Gg"] = 8921, ["ggg"] = 8921, - ["leg"] = 8922, + ["nGg"] = {8921, 824}, ["LessEqualGreater"] = 8922, + ["leg"] = 8922, + ["lesg"] = {8922, 65024}, ["lesseqgtr"] = 8922, + ["GreaterEqualLess"] = 8923, ["gel"] = 8923, + ["gesl"] = {8923, 65024}, ["gtreqless"] = 8923, - ["GreaterEqualLess"] = 8923, ["cuepr"] = 8926, ["curlyeqprec"] = 8926, ["cuesc"] = 8927, ["curlyeqsucc"] = 8927, - ["nprcue"] = 8928, ["NotPrecedesSlantEqual"] = 8928, - ["nsccue"] = 8929, + ["nprcue"] = 8928, ["NotSucceedsSlantEqual"] = 8929, - ["nsqsube"] = 8930, + ["nsccue"] = 8929, ["NotSquareSubsetEqual"] = 8930, - ["nsqsupe"] = 8931, + ["nsqsube"] = 8930, ["NotSquareSupersetEqual"] = 8931, + ["nsqsupe"] = 8931, ["lnsim"] = 8934, ["gnsim"] = 8935, - ["prnsim"] = 8936, ["precnsim"] = 8936, + ["prnsim"] = 8936, ["scnsim"] = 8937, ["succnsim"] = 8937, + ["NotLeftTriangle"] = 8938, ["nltri"] = 8938, ["ntriangleleft"] = 8938, - ["NotLeftTriangle"] = 8938, + ["NotRightTriangle"] = 8939, ["nrtri"] = 8939, ["ntriangleright"] = 8939, - ["NotRightTriangle"] = 8939, + ["NotLeftTriangleEqual"] = 8940, ["nltrie"] = 8940, ["ntrianglelefteq"] = 8940, - ["NotLeftTriangleEqual"] = 8940, + ["NotRightTriangleEqual"] = 8941, ["nrtrie"] = 8941, ["ntrianglerighteq"] = 8941, - ["NotRightTriangleEqual"] = 8941, ["vellip"] = 8942, ["ctdot"] = 8943, ["utdot"] = 8944, @@ -1639,9 +1686,11 @@ local character_entities = { ["isinsv"] = 8947, ["isins"] = 8948, ["isindot"] = 8949, + ["notindot"] = {8949, 824}, ["notinvc"] = 8950, ["notinvb"] = 8951, ["isinE"] = 8953, + ["notinE"] = {8953, 824}, ["nisd"] = 8954, ["xnis"] = 8955, ["nis"] = 8956, @@ -1651,14 +1700,14 @@ local character_entities = { ["barwedge"] = 8965, ["Barwed"] = 8966, ["doublebarwedge"] = 8966, - ["lceil"] = 8968, ["LeftCeiling"] = 8968, - ["rceil"] = 8969, + ["lceil"] = 8968, ["RightCeiling"] = 8969, - ["lfloor"] = 8970, + ["rceil"] = 8969, ["LeftFloor"] = 8970, - ["rfloor"] = 8971, + ["lfloor"] = 8970, ["RightFloor"] = 8971, + ["rfloor"] = 8971, ["drcrop"] = 8972, ["dlcrop"] = 8973, ["urcrop"] = 8974, @@ -1690,10 +1739,10 @@ local character_entities = { ["lmoustache"] = 9136, ["rmoust"] = 9137, ["rmoustache"] = 9137, - ["tbrk"] = 9140, ["OverBracket"] = 9140, - ["bbrk"] = 9141, + ["tbrk"] = 9140, ["UnderBracket"] = 9141, + ["bbrk"] = 9141, ["bbrktbrk"] = 9142, ["OverParenthesis"] = 9180, ["UnderParenthesis"] = 9181, @@ -1702,10 +1751,10 @@ local character_entities = { ["trpezium"] = 9186, ["elinters"] = 9191, ["blank"] = 9251, - ["oS"] = 9416, ["circledS"] = 9416, - ["boxh"] = 9472, + ["oS"] = 9416, ["HorizontalLine"] = 9472, + ["boxh"] = 9472, ["boxv"] = 9474, ["boxdr"] = 9484, ["boxdl"] = 9488, @@ -1751,50 +1800,50 @@ local character_entities = { ["blk14"] = 9617, ["blk12"] = 9618, ["blk34"] = 9619, + ["Square"] = 9633, ["squ"] = 9633, ["square"] = 9633, - ["Square"] = 9633, - ["squf"] = 9642, - ["squarf"] = 9642, - ["blacksquare"] = 9642, ["FilledVerySmallSquare"] = 9642, + ["blacksquare"] = 9642, + ["squarf"] = 9642, + ["squf"] = 9642, ["EmptyVerySmallSquare"] = 9643, ["rect"] = 9645, ["marker"] = 9646, ["fltns"] = 9649, - ["xutri"] = 9651, ["bigtriangleup"] = 9651, - ["utrif"] = 9652, + ["xutri"] = 9651, ["blacktriangle"] = 9652, - ["utri"] = 9653, + ["utrif"] = 9652, ["triangle"] = 9653, - ["rtrif"] = 9656, + ["utri"] = 9653, ["blacktriangleright"] = 9656, + ["rtrif"] = 9656, ["rtri"] = 9657, ["triangleright"] = 9657, - ["xdtri"] = 9661, ["bigtriangledown"] = 9661, - ["dtrif"] = 9662, + ["xdtri"] = 9661, ["blacktriangledown"] = 9662, + ["dtrif"] = 9662, ["dtri"] = 9663, ["triangledown"] = 9663, - ["ltrif"] = 9666, ["blacktriangleleft"] = 9666, + ["ltrif"] = 9666, ["ltri"] = 9667, ["triangleleft"] = 9667, ["loz"] = 9674, ["lozenge"] = 9674, ["cir"] = 9675, ["tridot"] = 9708, - ["xcirc"] = 9711, ["bigcirc"] = 9711, + ["xcirc"] = 9711, ["ultri"] = 9720, ["urtri"] = 9721, ["lltri"] = 9722, ["EmptySmallSquare"] = 9723, ["FilledSmallSquare"] = 9724, - ["starf"] = 9733, ["bigstar"] = 9733, + ["starf"] = 9733, ["star"] = 9734, ["phone"] = 9742, ["female"] = 9792, @@ -1805,8 +1854,8 @@ local character_entities = { ["clubsuit"] = 9827, ["hearts"] = 9829, ["heartsuit"] = 9829, - ["diams"] = 9830, ["diamondsuit"] = 9830, + ["diams"] = 9830, ["sung"] = 9834, ["flat"] = 9837, ["natur"] = 9838, @@ -1821,51 +1870,53 @@ local character_entities = { ["VerticalSeparator"] = 10072, ["lbbrk"] = 10098, ["rbbrk"] = 10099, - ["lobrk"] = 10214, + ["bsolhsub"] = 10184, + ["suphsol"] = 10185, ["LeftDoubleBracket"] = 10214, - ["robrk"] = 10215, + ["lobrk"] = 10214, ["RightDoubleBracket"] = 10215, - ["lang"] = 10216, + ["robrk"] = 10215, ["LeftAngleBracket"] = 10216, + ["lang"] = 10216, ["langle"] = 10216, - ["rang"] = 10217, ["RightAngleBracket"] = 10217, + ["rang"] = 10217, ["rangle"] = 10217, ["Lang"] = 10218, ["Rang"] = 10219, ["loang"] = 10220, ["roang"] = 10221, - ["xlarr"] = 10229, - ["longleftarrow"] = 10229, ["LongLeftArrow"] = 10229, - ["xrarr"] = 10230, - ["longrightarrow"] = 10230, + ["longleftarrow"] = 10229, + ["xlarr"] = 10229, ["LongRightArrow"] = 10230, - ["xharr"] = 10231, - ["longleftrightarrow"] = 10231, + ["longrightarrow"] = 10230, + ["xrarr"] = 10230, ["LongLeftRightArrow"] = 10231, - ["xlArr"] = 10232, - ["Longleftarrow"] = 10232, + ["longleftrightarrow"] = 10231, + ["xharr"] = 10231, ["DoubleLongLeftArrow"] = 10232, - ["xrArr"] = 10233, - ["Longrightarrow"] = 10233, + ["Longleftarrow"] = 10232, + ["xlArr"] = 10232, ["DoubleLongRightArrow"] = 10233, - ["xhArr"] = 10234, - ["Longleftrightarrow"] = 10234, + ["Longrightarrow"] = 10233, + ["xrArr"] = 10233, ["DoubleLongLeftRightArrow"] = 10234, - ["xmap"] = 10236, + ["Longleftrightarrow"] = 10234, + ["xhArr"] = 10234, ["longmapsto"] = 10236, + ["xmap"] = 10236, ["dzigrarr"] = 10239, ["nvlArr"] = 10498, ["nvrArr"] = 10499, ["nvHarr"] = 10500, ["Map"] = 10501, ["lbarr"] = 10508, - ["rbarr"] = 10509, ["bkarow"] = 10509, + ["rbarr"] = 10509, ["lBarr"] = 10510, - ["rBarr"] = 10511, ["dbkarow"] = 10511, + ["rBarr"] = 10511, ["RBarr"] = 10512, ["drbkarow"] = 10512, ["DDotrahd"] = 10513, @@ -1882,16 +1933,17 @@ local character_entities = { ["rarrbfs"] = 10528, ["nwarhk"] = 10531, ["nearhk"] = 10532, - ["searhk"] = 10533, ["hksearow"] = 10533, - ["swarhk"] = 10534, + ["searhk"] = 10533, ["hkswarow"] = 10534, + ["swarhk"] = 10534, ["nwnear"] = 10535, ["nesear"] = 10536, ["toea"] = 10536, ["seswar"] = 10537, ["tosa"] = 10537, ["swnwar"] = 10538, + ["nrarrc"] = {10547, 824}, ["rarrc"] = 10547, ["cudarrr"] = 10549, ["ldca"] = 10550, @@ -1937,10 +1989,10 @@ local character_entities = { ["llhard"] = 10603, ["rharul"] = 10604, ["lrhard"] = 10605, - ["udhar"] = 10606, ["UpEquilibrium"] = 10606, - ["duhar"] = 10607, + ["udhar"] = 10606, ["ReverseUpEquilibrium"] = 10607, + ["duhar"] = 10607, ["RoundImplies"] = 10608, ["erarr"] = 10609, ["simrarr"] = 10610, @@ -2007,30 +2059,31 @@ local character_entities = { ["trisb"] = 10701, ["rtriltri"] = 10702, ["LeftTriangleBar"] = 10703, + ["NotLeftTriangleBar"] = {10703, 824}, + ["NotRightTriangleBar"] = {10704, 824}, ["RightTriangleBar"] = 10704, - ["race"] = 10714, ["iinfin"] = 10716, ["infintie"] = 10717, ["nvinfin"] = 10718, ["eparsl"] = 10723, ["smeparsl"] = 10724, ["eqvparsl"] = 10725, - ["lozf"] = 10731, ["blacklozenge"] = 10731, + ["lozf"] = 10731, ["RuleDelayed"] = 10740, ["dsol"] = 10742, - ["xodot"] = 10752, ["bigodot"] = 10752, - ["xoplus"] = 10753, + ["xodot"] = 10752, ["bigoplus"] = 10753, - ["xotime"] = 10754, + ["xoplus"] = 10753, ["bigotimes"] = 10754, - ["xuplus"] = 10756, + ["xotime"] = 10754, ["biguplus"] = 10756, - ["xsqcup"] = 10758, + ["xuplus"] = 10756, ["bigsqcup"] = 10758, - ["qint"] = 10764, + ["xsqcup"] = 10758, ["iiiint"] = 10764, + ["qint"] = 10764, ["fpartint"] = 10765, ["cirfnint"] = 10768, ["awint"] = 10769, @@ -2062,8 +2115,8 @@ local character_entities = { ["triplus"] = 10809, ["triminus"] = 10810, ["tritime"] = 10811, - ["iprod"] = 10812, ["intprod"] = 10812, + ["iprod"] = 10812, ["amalg"] = 10815, ["capdot"] = 10816, ["ncup"] = 10818, @@ -2093,27 +2146,35 @@ local character_entities = { ["sdote"] = 10854, ["simdot"] = 10858, ["congdot"] = 10861, + ["ncongdot"] = {10861, 824}, ["easter"] = 10862, ["apacir"] = 10863, ["apE"] = 10864, + ["napE"] = {10864, 824}, ["eplus"] = 10865, ["pluse"] = 10866, ["Esim"] = 10867, ["Colone"] = 10868, ["Equal"] = 10869, - ["eDDot"] = 10871, ["ddotseq"] = 10871, + ["eDDot"] = 10871, ["equivDD"] = 10872, ["ltcir"] = 10873, ["gtcir"] = 10874, ["ltquest"] = 10875, ["gtquest"] = 10876, - ["les"] = 10877, ["LessSlantEqual"] = 10877, + ["NotLessSlantEqual"] = {10877, 824}, ["leqslant"] = 10877, - ["ges"] = 10878, + ["les"] = 10877, + ["nleqslant"] = {10877, 824}, + ["nles"] = {10877, 824}, ["GreaterSlantEqual"] = 10878, + ["NotGreaterSlantEqual"] = {10878, 824}, ["geqslant"] = 10878, + ["ges"] = 10878, + ["ngeqslant"] = {10878, 824}, + ["nges"] = {10878, 824}, ["lesdot"] = 10879, ["gesdot"] = 10880, ["lesdoto"] = 10881, @@ -2157,7 +2218,9 @@ local character_entities = { ["simlE"] = 10911, ["simgE"] = 10912, ["LessLess"] = 10913, + ["NotNestedLessLess"] = {10913, 824}, ["GreaterGreater"] = 10914, + ["NotNestedGreaterGreater"] = {10914, 824}, ["glj"] = 10916, ["gla"] = 10917, ["ltcc"] = 10918, @@ -2167,26 +2230,34 @@ local character_entities = { ["smt"] = 10922, ["lat"] = 10923, ["smte"] = 10924, + ["smtes"] = {10924, 65024}, ["late"] = 10925, + ["lates"] = {10925, 65024}, ["bumpE"] = 10926, + ["NotPrecedesEqual"] = {10927, 824}, + ["PrecedesEqual"] = 10927, + ["npre"] = {10927, 824}, + ["npreceq"] = {10927, 824}, ["pre"] = 10927, ["preceq"] = 10927, - ["PrecedesEqual"] = 10927, + ["NotSucceedsEqual"] = {10928, 824}, + ["SucceedsEqual"] = 10928, + ["nsce"] = {10928, 824}, + ["nsucceq"] = {10928, 824}, ["sce"] = 10928, ["succeq"] = 10928, - ["SucceedsEqual"] = 10928, ["prE"] = 10931, ["scE"] = 10932, - ["prnE"] = 10933, ["precneqq"] = 10933, + ["prnE"] = 10933, ["scnE"] = 10934, ["succneqq"] = 10934, ["prap"] = 10935, ["precapprox"] = 10935, ["scap"] = 10936, ["succapprox"] = 10936, - ["prnap"] = 10937, ["precnapprox"] = 10937, + ["prnap"] = 10937, ["scnap"] = 10938, ["succnapprox"] = 10938, ["Pr"] = 10939, @@ -2199,16 +2270,24 @@ local character_entities = { ["supmult"] = 10946, ["subedot"] = 10947, ["supedot"] = 10948, + ["nsubE"] = {10949, 824}, + ["nsubseteqq"] = {10949, 824}, ["subE"] = 10949, ["subseteqq"] = 10949, + ["nsupE"] = {10950, 824}, + ["nsupseteqq"] = {10950, 824}, ["supE"] = 10950, ["supseteqq"] = 10950, ["subsim"] = 10951, ["supsim"] = 10952, ["subnE"] = 10955, ["subsetneqq"] = 10955, + ["varsubsetneqq"] = {10955, 65024}, + ["vsubnE"] = {10955, 65024}, ["supnE"] = 10956, ["supsetneqq"] = 10956, + ["varsupsetneqq"] = {10956, 65024}, + ["vsupnE"] = {10956, 65024}, ["csub"] = 10959, ["csup"] = 10960, ["csube"] = 10961, @@ -2237,6 +2316,7 @@ local character_entities = { ["topcir"] = 10993, ["nhpar"] = 10994, ["parsim"] = 10995, + ["nparsl"] = {11005, 8421}, ["parsl"] = 11005, ["fflig"] = 64256, ["filig"] = 64257, @@ -2378,22 +2458,45 @@ local character_entities = { ["zopf"] = 120171, } function entities.dec_entity(s) - return unicode.utf8.char(tonumber(s)) + local n = tonumber(s) + if n == nil then + return "&#" .. s .. ";" -- fallback for unknown entities + end + return unicode.utf8.char(n) end function entities.hex_entity(s) - return unicode.utf8.char(tonumber("0x"..s)) + local n = tonumber("0x"..s) + if n == nil then + return "&#x" .. s .. ";" -- fallback for unknown entities + end + return unicode.utf8.char(n) end -function entities.char_entity(s) - local n = character_entities[s] +function entities.hex_entity_with_x_char(x, s) + local n = tonumber("0x"..s) if n == nil then - return "&" .. s .. ";" + return "&#" .. x .. s .. ";" -- fallback for unknown entities end return unicode.utf8.char(n) end +function entities.char_entity(s) + local code_points = character_entities[s] + if code_points == nil then + return "&" .. s .. ";" + end + if type(code_points) ~= 'table' then + code_points = {code_points} + end + local char_table = {} + for _, code_point in ipairs(code_points) do + table.insert(char_table, unicode.utf8.char(code_point)) + end + return table.concat(char_table) +end M.writer = {} function M.writer.new(options) local self = {} self.options = options + self.flatten_inlines = false local slice_specifiers = {} for specifier in options.slice:gmatch("[^%s]+") do table.insert(slice_specifiers, specifier) @@ -2441,7 +2544,18 @@ function M.writer.new(options) if not self.is_writing then return "" end return "\\markdownRendererInterblockSeparator\n{}" end - self.hard_line_break = "\\markdownRendererHardLineBreak\n{}" + function self.paragraphsep() + if not self.is_writing then return "" end + return "\\markdownRendererParagraphSeparator\n{}" + end + self.soft_line_break = function() + if self.flatten_inlines then return "\n" end + return "\\markdownRendererSoftLineBreak\n{}" + end + self.hard_line_break = function() + if self.flatten_inlines then return "\n" end + return "\\markdownRendererHardLineBreak\n{}" + end self.ellipsis = "\\markdownRendererEllipsis{}" function self.thematic_break() if not self.is_writing then return "" end @@ -2475,11 +2589,18 @@ function M.writer.new(options) ["|"] = "\\markdownRendererPipe{}", [entities.hex_entity('0000')] = "\\markdownRendererReplacementCharacter{}", } - local escape_typographic_text = util.escaper( + local function create_escaper(char_escapes, string_escapes) + local escape = util.escaper(char_escapes, string_escapes) + return function(s) + if self.flatten_inlines then return s end + return escape(s) + end + end + local escape_typographic_text = create_escaper( self.escaped_chars, self.escaped_strings) - local escape_programmatic_text = util.escaper( + local escape_programmatic_text = create_escaper( self.escaped_uri_chars, self.escaped_minimal_strings) - local escape_minimal = util.escaper( + local escape_minimal = create_escaper( {}, self.escaped_minimal_strings) self.escape = escape_typographic_text self.math = escape_minimal @@ -2487,12 +2608,15 @@ function M.writer.new(options) self.identifier = escape_minimal self.string = escape_minimal self.uri = escape_minimal + self.infostring = escape_minimal else self.identifier = escape_programmatic_text self.string = escape_typographic_text self.uri = escape_programmatic_text + self.infostring = escape_programmatic_text end function self.code(s, attributes) + if self.flatten_inlines then return s end local buf = {} if attributes ~= nil then table.insert(buf, @@ -2508,6 +2632,7 @@ function M.writer.new(options) return buf end function self.link(lab, src, tit, attributes) + if self.flatten_inlines then return lab end local buf = {} if attributes ~= nil then table.insert(buf, @@ -2525,6 +2650,7 @@ function M.writer.new(options) return buf end function self.image(lab, src, tit, attributes) + if self.flatten_inlines then return lab end local buf = {} if attributes ~= nil then table.insert(buf, @@ -2545,7 +2671,9 @@ function M.writer.new(options) if not self.is_writing then return "" end local buffer = {} for _,item in ipairs(items) do - buffer[#buffer + 1] = self.bulletitem(item) + if item ~= "" then + buffer[#buffer + 1] = self.bulletitem(item) + end end local contents = util.intersperse(buffer,"\n") if tight and options.tightLists then @@ -2565,8 +2693,10 @@ function M.writer.new(options) local buffer = {} local num = startnum for _,item in ipairs(items) do - buffer[#buffer + 1] = self.ordereditem(item,num) - if num ~= nil then + if item ~= "" then + buffer[#buffer + 1] = self.ordereditem(item,num) + end + if num ~= nil and item ~= "" then num = num + 1 end end @@ -2589,14 +2719,11 @@ function M.writer.new(options) end end function self.inline_html_comment(contents) + if self.flatten_inlines then return contents end return {"\\markdownRendererInlineHtmlComment{",contents,"}"} end - function self.block_html_comment(contents) - if not self.is_writing then return "" end - return {"\\markdownRendererBlockHtmlCommentBegin\n",contents, - "\n\\markdownRendererBlockHtmlCommentEnd "} - end function self.inline_html_tag(contents) + if self.flatten_inlines then return contents end return {"\\markdownRendererInlineHtmlTag{",self.string(contents),"}"} end function self.block_html_element(s) @@ -2605,6 +2732,7 @@ function M.writer.new(options) return {"\\markdownRendererInputBlockHtmlElement{",name,"}"} end function self.emphasis(s) + if self.flatten_inlines then return s end return {"\\markdownRendererEmphasis{",s,"}"} end function self.tickbox(f) @@ -2617,10 +2745,11 @@ function M.writer.new(options) end end function self.strong(s) + if self.flatten_inlines then return s end return {"\\markdownRendererStrongEmphasis{",s,"}"} end function self.blockquote(s) - if #util.rope_to_string(s) == 0 then return "" end + if not self.is_writing then return "" end return {"\\markdownRendererBlockQuoteBegin\n",s, "\n\\markdownRendererBlockQuoteEnd "} end @@ -2640,17 +2769,24 @@ function M.writer.new(options) return buf end - function self.attributes(attributes) - local expanded_attributes = {} - local key_value_regex = "([^= ]+)%s*=%s*(.*)" + local seen_identifiers = {} + local key_value_regex = "([^= ]+)%s*=%s*(.*)" + local function normalize_attributes(attributes, auto_identifiers) + -- normalize attributes + local normalized_attributes = {} + local has_explicit_identifiers = false local key, value - for _, attribute in ipairs(attributes) do - if attribute:sub(1, 1) == "#" or attribute:sub(1, 1) == "." then - table.insert(expanded_attributes, attribute) + for _, attribute in ipairs(attributes or {}) do + if attribute:sub(1, 1) == "#" then + table.insert(normalized_attributes, attribute) + has_explicit_identifiers = true + seen_identifiers[attribute:sub(2)] = true + elseif attribute:sub(1, 1) == "." then + table.insert(normalized_attributes, attribute) else key, value = attribute:match(key_value_regex) if key:lower() == "id" then - table.insert(expanded_attributes, "#" .. value) + table.insert(normalized_attributes, "#" .. value) elseif key:lower() == "class" then local classes = {} for class in value:gmatch("%S+") do @@ -2658,23 +2794,67 @@ function M.writer.new(options) end table.sort(classes) for _, class in ipairs(classes) do - table.insert(expanded_attributes, "." .. class) + table.insert(normalized_attributes, "." .. class) end else - table.insert(expanded_attributes, attribute) + table.insert(normalized_attributes, attribute) end end end - table.sort(expanded_attributes) - local buf = {} - local seen = {} - for _, attribute in ipairs(expanded_attributes) do - if seen[attribute] ~= nil then - goto continue -- prevent duplicate attributes - else - seen[attribute] = true + -- if no explicit identifiers exist, add auto identifiers + if not has_explicit_identifiers and auto_identifiers ~= nil then + local seen_auto_identifiers = {} + for _, auto_identifier in ipairs(auto_identifiers) do + if seen_auto_identifiers[auto_identifier] == nil then + seen_auto_identifiers[auto_identifier] = true + if seen_identifiers[auto_identifier] == nil then + seen_identifiers[auto_identifier] = true + table.insert(normalized_attributes, + "#" .. auto_identifier) + else + local auto_identifier_number = 1 + while true do + local numbered_auto_identifier = auto_identifier .. "-" + .. auto_identifier_number + if seen_identifiers[numbered_auto_identifier] == nil then + seen_identifiers[numbered_auto_identifier] = true + table.insert(normalized_attributes, + "#" .. numbered_auto_identifier) + break + end + auto_identifier_number = auto_identifier_number + 1 + end + end + end + end + end + + -- sort and deduplicate normalized attributes + table.sort(normalized_attributes) + local seen_normalized_attributes = {} + local deduplicated_normalized_attributes = {} + for _, attribute in ipairs(normalized_attributes) do + if seen_normalized_attributes[attribute] == nil then + seen_normalized_attributes[attribute] = true + table.insert(deduplicated_normalized_attributes, attribute) end + end + + return deduplicated_normalized_attributes + end + + function self.attributes(attributes, should_normalize_attributes) + local normalized_attributes + if should_normalize_attributes == false then + normalized_attributes = attributes + else + normalized_attributes = normalize_attributes(attributes) + end + + local buf = {} + local key, value + for _, attribute in ipairs(normalized_attributes) do if attribute:sub(1, 1) == "#" then table.insert(buf, {"\\markdownRendererAttributeIdentifier{", attribute:sub(2), "}"}) @@ -2686,12 +2866,14 @@ function M.writer.new(options) table.insert(buf, {"\\markdownRendererAttributeKeyValue{", key, "}{", value, "}"}) end - ::continue:: end return buf end self.active_attributes = {} + self.attribute_type_levels = {} + setmetatable(self.attribute_type_levels, + { __index = function() return 0 end }) local function apply_attributes() local buf = {} for i = 1, #self.active_attributes do @@ -2715,6 +2897,9 @@ function M.writer.new(options) end function self.push_attributes(attribute_type, attributes, start_output, end_output) + local attribute_type_level = self.attribute_type_levels[attribute_type] + self.attribute_type_levels[attribute_type] = attribute_type_level + 1 + -- index attributes in a hash table for easy lookup attributes = attributes or {} for i = 1, #attributes do @@ -2732,7 +2917,6 @@ function M.writer.new(options) end if attributes["#" .. self.slice_begin_identifier] ~= nil and self.slice_begin_type == "^" then - self.is_writing = true table.insert(buf, apply_attributes()) self.is_writing = true end @@ -2755,6 +2939,8 @@ function M.writer.new(options) local attributes, _, end_output current_attribute_type, attributes, _, end_output = table.unpack( self.active_attributes[#self.active_attributes]) + local attribute_type_level = self.attribute_type_levels[current_attribute_type] + self.attribute_type_levels[current_attribute_type] = attribute_type_level - 1 if self.is_writing and end_output ~= nil then table.insert(buf, end_output) end @@ -2775,47 +2961,151 @@ function M.writer.new(options) end return buf end - local current_heading_level = 0 +local function create_auto_identifier(s) + local buffer = {} + local prev_space = false + local letter_found = false + + for _, code in utf8.codes(uni_algos.normalize.NFC(s)) do + local char = utf8.char(code) + + -- Remove everything up to the first letter. + if not letter_found then + local is_letter = unicode.utf8.match(char, "%a") + if is_letter then + letter_found = true + else + goto continue + end + end + + -- Remove all non-alphanumeric characters, except underscores, hyphens, and periods. + if not unicode.utf8.match(char, "[%w_%-%.%s]") then + goto continue + end + + -- Replace all spaces and newlines with hyphens. + if unicode.utf8.match(char, "[%s\n]") then + char = "-" + if prev_space then + goto continue + else + prev_space = true + end + else + -- Convert all alphabetic characters to lowercase. + char = unicode.utf8.lower(char) + prev_space = false + end + + table.insert(buffer, char) + + ::continue:: + end + + if prev_space then + table.remove(buffer) + end + + local identifier = #buffer == 0 and "section" or table.concat(buffer, "") + return identifier +end +local function create_gfm_auto_identifier(s) + local buffer = {} + local prev_space = false + local letter_found = false + + for _, code in utf8.codes(uni_algos.normalize.NFC(s)) do + local char = utf8.char(code) + + -- Remove everything up to the first non-space. + if not letter_found then + local is_letter = unicode.utf8.match(char, "%S") + if is_letter then + letter_found = true + else + goto continue + end + end + + -- Remove all non-alphanumeric characters, except underscores and hyphens. + if not unicode.utf8.match(char, "[%w_%-%s]") then + prev_space = false + goto continue + end + + -- Replace all spaces and newlines with hyphens. + if unicode.utf8.match(char, "[%s\n]") then + char = "-" + if prev_space then + goto continue + else + prev_space = true + end + else + -- Convert all alphabetic characters to lowercase. + char = unicode.utf8.lower(char) + prev_space = false + end + + table.insert(buffer, char) + + ::continue:: + end + + if prev_space then + table.remove(buffer) + end + + local identifier = #buffer == 0 and "section" or table.concat(buffer, "") + return identifier +end function self.heading(s, level, attributes) local buf = {} + local flat_text, inlines = table.unpack(s) -- push empty attributes for implied sections - while current_heading_level < level - 1 do + while self.attribute_type_levels["heading"] < level - 1 do table.insert(buf, self.push_attributes("heading", nil, "\\markdownRendererSectionBegin\n", "\n\\markdownRendererSectionEnd ")) - current_heading_level = current_heading_level + 1 end -- pop attributes for sections that have ended - while current_heading_level >= level do + while self.attribute_type_levels["heading"] >= level do table.insert(buf, self.pop_attributes("heading")) - current_heading_level = current_heading_level - 1 end + -- construct attributes for the new section + local auto_identifiers = {} + if self.options.autoIdentifiers then + table.insert(auto_identifiers, create_auto_identifier(flat_text)) + end + if self.options.gfmAutoIdentifiers then + table.insert(auto_identifiers, create_gfm_auto_identifier(flat_text)) + end + local normalized_attributes = normalize_attributes(attributes, auto_identifiers) + -- push attributes for the new section local start_output = {} local end_output = {} table.insert(start_output, "\\markdownRendererSectionBegin\n") - if options.headerAttributes and attributes ~= nil and #attributes > 0 then - table.insert(start_output, - "\\markdownRendererHeaderAttributeContextBegin\n") - table.insert(start_output, self.attributes(attributes)) - table.insert(end_output, - "\n\\markdownRendererHeaderAttributeContextEnd ") - end table.insert(end_output, "\n\\markdownRendererSectionEnd ") table.insert(buf, self.push_attributes("heading", - attributes, + normalized_attributes, start_output, end_output)) - current_heading_level = current_heading_level + 1 - assert(current_heading_level == level) + assert(self.attribute_type_levels["heading"] == level) + + -- render the heading and its attributes + if self.is_writing and #normalized_attributes > 0 then + table.insert(buf, "\\markdownRendererHeaderAttributeContextBegin\n") + table.insert(buf, self.attributes(normalized_attributes, false)) + end - -- produce the renderer local cmd level = level + options.shiftHeadings if level <= 1 then @@ -2834,7 +3124,11 @@ function M.writer.new(options) cmd = "" end if self.is_writing then - table.insert(buf, {cmd, "{", s, "}"}) + table.insert(buf, {cmd, "{", inlines, "}"}) + end + + if self.is_writing and #normalized_attributes > 0 then + table.insert(buf, "\\markdownRendererHeaderAttributeContextEnd ") end return buf @@ -2842,6 +3136,7 @@ function M.writer.new(options) function self.get_state() return { is_writing=self.is_writing, + flatten_inlines=self.flatten_inlines, active_attributes={table.unpack(self.active_attributes)}, } end @@ -2899,14 +3194,13 @@ parsers.tilde = P("~") parsers.backslash = P("\\") parsers.tab = P("\t") parsers.newline = P("\n") -parsers.tightblocksep = P("\001") parsers.digit = R("09") parsers.hexdigit = R("09","af","AF") parsers.letter = R("AZ","az") parsers.alphanumeric = R("AZ","az","09") parsers.keyword = parsers.letter - * parsers.alphanumeric^0 + * (parsers.alphanumeric + parsers.dash)^0 parsers.internal_punctuation = S(":;,.?") parsers.doubleasterisks = P("**") @@ -2928,8 +3222,7 @@ parsers.nonspacechar = parsers.any - parsers.spacing parsers.optionalspace = parsers.spacechar^0 parsers.normalchar = parsers.any - (V("SpecialChar") - + parsers.spacing - + parsers.tightblocksep) + + parsers.spacing) parsers.eof = -parsers.any parsers.nonindentspace = parsers.space^-3 * - parsers.spacechar parsers.indent = parsers.space^-3 * parsers.tab @@ -2949,6 +3242,549 @@ parsers.spnl = parsers.optionalspace * (parsers.newline * parsers.optionalspace)^-1 parsers.line = parsers.linechar^0 * parsers.newline parsers.nonemptyline = parsers.line - parsers.blankline + +parsers.leader = parsers.space^-3 + +local function has_trail(indent_table) + return indent_table ~= nil and + indent_table.trail ~= nil and + next(indent_table.trail) ~= nil +end + +local function has_indents(indent_table) + return indent_table ~= nil and + indent_table.indents ~= nil and + next(indent_table.indents) ~= nil +end + +local function add_trail(indent_table, trail_info) + indent_table.trail = trail_info + return indent_table +end + +local function remove_trail(indent_table) + indent_table.trail = nil + return indent_table +end + +local function update_indent_table(indent_table, new_indent, add) + indent_table = remove_trail(indent_table) + + if not has_indents(indent_table) then + indent_table.indents = {} + end + + if add then + indent_table.indents[#indent_table.indents + 1] = new_indent + else + if indent_table.indents[#indent_table.indents].name == new_indent.name then + indent_table.indents[#indent_table.indents] = nil + end + end + + return indent_table +end + +local function remove_indent(name) + local function remove_indent_level(s, i, indent_table) -- luacheck: ignore s i + indent_table = update_indent_table(indent_table, {name=name}, false) + return true, indent_table + end + + return Cg(Cmt(Cb("indent_info"), remove_indent_level), "indent_info") +end + +local function process_starter_spacing(indent, spacing, minimum, left_strip_length) + left_strip_length = left_strip_length or 0 + + local count = 0 + local tab_value = 4 - (indent) % 4 + + local code_started, minimum_found = false, false + local code_start, minimum_remainder = "", "" + + local left_total_stripped = 0 + local full_remainder = "" + + if spacing ~= nil then + for i = 1, #spacing do + local character = spacing:sub(i, i) + + if character == "\t" then + count = count + tab_value + tab_value = 4 + elseif character == " " then + count = count + 1 + tab_value = 4 - (1 - tab_value) % 4 + end + + if (left_strip_length ~= 0) then + local possible_to_strip = math.min(count, left_strip_length) + count = count - possible_to_strip + left_strip_length = left_strip_length - possible_to_strip + left_total_stripped = left_total_stripped + possible_to_strip + else + full_remainder = full_remainder .. character + end + + if (minimum_found) then + minimum_remainder = minimum_remainder .. character + elseif (count >= minimum) then + minimum_found = true + minimum_remainder = minimum_remainder .. string.rep(" ", count - minimum) + end + + if (code_started) then + code_start = code_start .. character + elseif (count >= minimum + 4) then + code_started = true + code_start = code_start .. string.rep(" ", count - (minimum + 4)) + end + end + end + + local remainder + if (code_started) then + remainder = code_start + else + remainder = string.rep(" ", count - minimum) + end + + local is_minimum = count >= minimum + return { + is_code = code_started, + remainder = remainder, + left_total_stripped = left_total_stripped, + is_minimum = is_minimum, + minimum_remainder = minimum_remainder, + total_length = count, + full_remainder = full_remainder + } +end + +local function count_indent_tab_level(indent_table) + local count = 0 + if not has_indents(indent_table) then + return count + end + + for i=1, #indent_table.indents do + count = count + indent_table.indents[i].length + end + return count +end + +local function total_delimiter_length(delimiter) + local count = 0 + if type(delimiter) == "string" then return #delimiter end + for _, value in pairs(delimiter) do + count = count + total_delimiter_length(value) + end + return count +end + +local function process_starter_indent(_, _, indent_table, starter, is_blank, indent_type, breakable) + local last_trail = starter[1] + local delimiter = starter[2] + local raw_new_trail = starter[3] + + if indent_type == "bq" and not breakable then + indent_table.ignore_blockquote_blank = true + end + + if has_trail(indent_table) then + local trail = indent_table.trail + if trail.is_code then + return false + end + last_trail = trail.remainder + else + local sp = process_starter_spacing(0, last_trail, 0, 0) + + if sp.is_code then + return false + end + last_trail = sp.remainder + end + + local preceding_indentation = count_indent_tab_level(indent_table) % 4 + local last_trail_length = #last_trail + local delimiter_length = total_delimiter_length(delimiter) + + local total_indent_level = preceding_indentation + last_trail_length + delimiter_length + + local sp = {} + if not is_blank then + sp = process_starter_spacing(total_indent_level, raw_new_trail, 0, 1) + end + + local del_trail_length = sp.left_total_stripped + if is_blank then + del_trail_length = 1 + elseif not sp.is_code then + del_trail_length = del_trail_length + #sp.remainder + end + + local indent_length = last_trail_length + delimiter_length + del_trail_length + local new_indent_info = {name=indent_type, length=indent_length} + + indent_table = update_indent_table(indent_table, new_indent_info, true) + indent_table = add_trail(indent_table, {is_code=sp.is_code, remainder=sp.remainder, total_length=sp.total_length, + full_remainder=sp.full_remainder}) + + return true, indent_table +end + +local function decode_pattern(name) + local delimeter = parsers.succeed + if name == "bq" then + delimeter = parsers.more + end + + return C(parsers.optionalspace) * C(delimeter) * C(parsers.optionalspace) * Cp() +end + +local function left_blank_starter(indent_table) + local blank_starter_index + + if not has_indents(indent_table) then + return + end + + for i = #indent_table.indents,1,-1 do + local value = indent_table.indents[i] + if value.name == "li" then + blank_starter_index = i + else + break + end + end + + return blank_starter_index +end + +local function traverse_indent(s, i, indent_table, is_optional, is_blank) + local new_index = i + + local preceding_indentation = 0 + local current_trail = {} + + local blank_starter = left_blank_starter(indent_table) + + for index = 1,#indent_table.indents do + local value = indent_table.indents[index] + local pattern = decode_pattern(value.name) + + -- match decoded pattern + local new_indent_info = lpeg.match(Ct(pattern), s, new_index) + if new_indent_info == nil then + local blankline_end = lpeg.match(Ct(parsers.blankline * Cg(Cp(), "pos")), s, new_index) + if is_optional or not indent_table.ignore_blockquote_blank or not blankline_end then + return is_optional, new_index, current_trail + end + + return traverse_indent(s, tonumber(blankline_end.pos), indent_table, is_optional, is_blank) + end + + local raw_last_trail = new_indent_info[1] + local delimiter = new_indent_info[2] + local raw_new_trail = new_indent_info[3] + local next_index = new_indent_info[4] + + local space_only = delimiter == "" + + -- check previous trail + if not space_only and next(current_trail) == nil then + local sp = process_starter_spacing(0, raw_last_trail, 0, 0) + current_trail = {is_code=sp.is_code, remainder=sp.remainder, total_length=sp.total_length, + full_remainder=sp.full_remainder} + end + + if next(current_trail) ~= nil then + if not space_only and current_trail.is_code then + return is_optional, new_index, current_trail + end + if current_trail.internal_remainder ~= nil then + raw_last_trail = current_trail.internal_remainder + end + end + + local raw_last_trail_length = 0 + local delimiter_length = 0 + + if not space_only then + delimiter_length = #delimiter + raw_last_trail_length = #raw_last_trail + end + + local total_indent_level = preceding_indentation + raw_last_trail_length + delimiter_length + + local spacing_to_process + local minimum = 0 + local left_strip_length = 0 + + if not space_only then + spacing_to_process = raw_new_trail + left_strip_length = 1 + else + spacing_to_process = raw_last_trail + minimum = value.length + end + + local sp = process_starter_spacing(total_indent_level, spacing_to_process, minimum, left_strip_length) + + if space_only and not sp.is_minimum then + return is_optional or (is_blank and blank_starter <= index), new_index, current_trail + end + + local indent_length = raw_last_trail_length + delimiter_length + sp.left_total_stripped + + -- update info for the next pattern + if not space_only then + preceding_indentation = preceding_indentation + indent_length + else + preceding_indentation = preceding_indentation + value.length + end + + current_trail = {is_code=sp.is_code, remainder=sp.remainder, internal_remainder=sp.minimum_remainder, + total_length=sp.total_length, full_remainder=sp.full_remainder} + new_index = next_index + end + + return true, new_index, current_trail +end + +local function check_trail(expect_code, is_code) + return (expect_code and is_code) or (not expect_code and not is_code) +end + +local function check_trail_joined(s, i, indent_table, spacing, expect_code, omit_remainder) -- luacheck: ignore s i + local is_code + local remainder + + if has_trail(indent_table) then + local trail = indent_table.trail + is_code = trail.is_code + if is_code then + remainder = trail.remainder + else + remainder = trail.full_remainder + end + else + local sp = process_starter_spacing(0, spacing, 0, 0) + is_code = sp.is_code + if is_code then + remainder = sp.remainder + else + remainder = sp.full_remainder + end + end + + local result = check_trail(expect_code, is_code) + if omit_remainder then + return result + end + return result, remainder +end + +local function check_trail_length(s, i, indent_table, spacing, min, max) -- luacheck: ignore s i + local trail + + if has_trail(indent_table) then + trail = indent_table.trail + else + trail = process_starter_spacing(0, spacing, 0, 0) + end + + local total_length = trail.total_length + if total_length == nil then + return false + end + + return min <= total_length and total_length <= max +end + +local function check_continuation_indentation(s, i, indent_table, is_optional, is_blank) + if not has_indents(indent_table) then + return true + end + + local passes, new_index, current_trail = traverse_indent(s, i, indent_table, is_optional, is_blank) + + if passes then + indent_table = add_trail(indent_table, current_trail) + return new_index, indent_table + end + return false +end + +local function get_last_indent_name(indent_table) + if has_indents(indent_table) then + return indent_table.indents[#indent_table.indents].name + end +end + +local function remove_remainder_if_blank(indent_table, remainder) + if get_last_indent_name(indent_table) == "li" then + return "" + end + return remainder +end + +local function check_trail_type(s, i, trail, spacing, trail_type) -- luacheck: ignore s i + if trail == nil then + trail = process_starter_spacing(0, spacing, 0, 0) + end + + if trail_type == "non-code" then + return check_trail(false, trail.is_code) + end + if trail_type == "code" then + return check_trail(true, trail.is_code) + end + if trail_type == "full-code" then + if (trail.is_code) then + return i, trail.remainder + end + return i, "" + end + if trail_type == "full-any" then + return i, trail.internal_remainder + end +end + +local function trail_freezing(s, i, indent_table, is_freezing) -- luacheck: ignore s i + if is_freezing then + if indent_table.is_trail_frozen then + indent_table.trail = indent_table.frozen_trail + else + indent_table.frozen_trail = indent_table.trail + indent_table.is_trail_frozen = true + end + else + indent_table.frozen_trail = nil + indent_table.is_trail_frozen = false + end + return true, indent_table +end + +local function check_continuation_indentation_and_trail(s, i, indent_table, is_optional, is_blank, trail_type, + reset_rem, omit_remainder) + if not has_indents(indent_table) then + local spacing, new_index = lpeg.match(C(parsers.spacechar^0) * Cp(), s, i) + local result, remainder = check_trail_type(s, i, indent_table.trail, spacing, trail_type) + if remainder == nil then + if result then + return new_index + end + return false + end + if result then + return new_index, remainder + end + return false + end + + local passes, new_index, current_trail = traverse_indent(s, i, indent_table, is_optional, is_blank) + + if passes then + local spacing + if current_trail == nil then + local newer_spacing, newer_index = lpeg.match(C(parsers.spacechar^0) * Cp(), s, i) + current_trail = process_starter_spacing(0, newer_spacing, 0, 0) + new_index = newer_index + spacing = newer_spacing + else + spacing = current_trail.remainder + end + local result, remainder = check_trail_type(s, new_index, current_trail, spacing, trail_type) + if remainder == nil or omit_remainder then + if result then + return new_index + end + return false + end + + if is_blank and reset_rem then + remainder = remove_remainder_if_blank(indent_table, remainder) + end + if result then + return new_index, remainder + end + return false + end + return false +end + +parsers.check_trail = Cmt(Cb("indent_info") * C(parsers.spacechar^0) * Cc(false), check_trail_joined) + +parsers.check_trail_no_rem = Cmt(Cb("indent_info") * C(parsers.spacechar^0) * Cc(false) * Cc(true), check_trail_joined) + +parsers.check_code_trail = Cmt(Cb("indent_info") * C(parsers.spacechar^0) * Cc(true), check_trail_joined) + +parsers.check_trail_length_range = function(min, max) + return Cmt(Cb("indent_info") * C(parsers.spacechar^0) * Cc(min) * Cc(max), check_trail_length) +end + +parsers.check_trail_length = function(n) + return parsers.check_trail_length_range(n, n) +end + +parsers.freeze_trail = Cg(Cmt(Cb("indent_info") * Cc(true), trail_freezing), "indent_info") + +parsers.unfreeze_trail = Cg(Cmt(Cb("indent_info") * Cc(false), trail_freezing), "indent_info") + +parsers.check_minimal_indent = Cmt(Cb("indent_info") * Cc(false), check_continuation_indentation) + +parsers.check_optional_indent = Cmt(Cb("indent_info") * Cc(true), check_continuation_indentation) + +parsers.check_minimal_blank_indent = Cmt(Cb("indent_info") * Cc(false) * Cc(true), check_continuation_indentation) + + +parsers.check_minimal_indent_and_trail = Cmt( Cb("indent_info") + * Cc(false) * Cc(false) * Cc("non-code") * Cc(true), + check_continuation_indentation_and_trail) + +parsers.check_minimal_indent_and_code_trail = Cmt( Cb("indent_info") + * Cc(false) * Cc(false) * Cc("code") * Cc(false), + check_continuation_indentation_and_trail) + +parsers.check_minimal_blank_indent_and_full_code_trail = Cmt( Cb("indent_info") + * Cc(false) * Cc(true) * Cc("full-code") * Cc(true), + check_continuation_indentation_and_trail) + +parsers.check_minimal_indent_and_any_trail = Cmt( Cb("indent_info") + * Cc(false) * Cc(false) * Cc("full-any") * Cc(true) * Cc(false), + check_continuation_indentation_and_trail) + +parsers.check_minimal_blank_indent_and_any_trail = Cmt( Cb("indent_info") + * Cc(false) * Cc(true) * Cc("full-any") * Cc(true) * Cc(false), + check_continuation_indentation_and_trail) + +parsers.check_minimal_blank_indent_and_any_trail_no_rem = Cmt( Cb("indent_info") + * Cc(false) * Cc(true) * Cc("full-any") * Cc(true) * Cc(true), + check_continuation_indentation_and_trail) + +parsers.check_optional_indent_and_any_trail = Cmt( Cb("indent_info") + * Cc(true) * Cc(false) * Cc("full-any") * Cc(true) * Cc(false), + check_continuation_indentation_and_trail) + +parsers.check_optional_blank_indent_and_any_trail = Cmt( Cb("indent_info") + * Cc(true) * Cc(true) * Cc("full-any") * Cc(true) * Cc(false), + check_continuation_indentation_and_trail) + + +parsers.spnlc_noexc = parsers.optionalspace + * (parsers.newline * parsers.check_minimal_indent_and_any_trail)^-1 + +parsers.spnlc = parsers.optionalspace + * (V("EndlineNoSub"))^-1 + +parsers.spnlc_sep = parsers.optionalspace * V("EndlineNoSub") + + parsers.spacechar^1 + +parsers.only_blank = parsers.spacechar^0 * (parsers.newline + parsers.eof) + parsers.commented_line_letter = parsers.linechar + parsers.newline - parsers.backslash @@ -2995,6 +3831,7 @@ parsers.chunk = parsers.line * (parsers.optionallyindentedline - parsers.blankline)^0 parsers.attribute_key_char = parsers.alphanumeric + S("-_:.") +parsers.attribute_raw_char = parsers.alphanumeric + S("-_") parsers.attribute_key = (parsers.attribute_key_char - parsers.dash - parsers.digit) * parsers.attribute_key_char^0 @@ -3006,10 +3843,16 @@ parsers.attribute_value = ( (parsers.dquote / "") * (parsers.squote / "")) + ( parsers.anyescaped - parsers.dquote - parsers.rbrace - parsers.space)^0 +parsers.attribute_identifier = parsers.attribute_key_char^1 +parsers.attribute_classname = parsers.letter + * parsers.attribute_key_char^0 +parsers.attribute_raw = parsers.attribute_raw_char^1 parsers.attribute = (parsers.dash * Cc(".unnumbered")) - + C((parsers.hash + parsers.period) - * parsers.attribute_key) + + C( parsers.hash + * parsers.attribute_identifier) + + C( parsers.period + * parsers.attribute_classname) + Cs( parsers.attribute_key * parsers.optionalspace * parsers.equal * parsers.optionalspace * parsers.attribute_value) @@ -3024,7 +3867,7 @@ parsers.attributes = parsers.lbrace parsers.raw_attribute = parsers.lbrace * parsers.optionalspace * parsers.equal - * C(parsers.attribute_key) + * C(parsers.attribute_raw) * parsers.optionalspace * parsers.rbrace @@ -3035,18 +3878,31 @@ parsers.indented_blocks = function(bl) * (parsers.blankline^1 * parsers.indent * -parsers.blankline * bl)^0 * (parsers.blankline^1 + parsers.eof) ) end -parsers.bulletchar = C(parsers.plus + parsers.asterisk + parsers.dash) +local function repeat_between(pattern, min, max) + return -pattern^(max + 1) * pattern^min +end -parsers.bullet = ( parsers.bulletchar * #parsers.spacing - * (parsers.tab + parsers.space^-3) - + parsers.space * parsers.bulletchar * #parsers.spacing - * (parsers.tab + parsers.space^-2) - + parsers.space * parsers.space * parsers.bulletchar - * #parsers.spacing - * (parsers.tab + parsers.space^-1) - + parsers.space * parsers.space * parsers.space - * parsers.bulletchar * #parsers.spacing - ) +parsers.hexentity = parsers.ampersand * parsers.hash * C(S("Xx")) + * C(repeat_between(parsers.hexdigit, 1, 6)) * parsers.semicolon +parsers.decentity = parsers.ampersand * parsers.hash + * C(repeat_between(parsers.digit, 1, 7)) * parsers.semicolon +parsers.tagentity = parsers.ampersand * C(parsers.alphanumeric^1) + * parsers.semicolon + +parsers.html_entities = parsers.hexentity / entities.hex_entity_with_x_char + + parsers.decentity / entities.dec_entity + + parsers.tagentity / entities.char_entity +parsers.bullet = function(bullet_char, interrupting) + local allowed_end + if interrupting then + allowed_end = C(parsers.spacechar^1) * #parsers.linechar + else + allowed_end = C(parsers.spacechar^1) + #(parsers.newline + parsers.eof) + end + return parsers.check_trail + * Ct(C(bullet_char) * Cc("")) + * allowed_end +end local function tickbox(interior) return parsers.optionalspace * parsers.lbracket @@ -3063,18 +3919,439 @@ local function captures_equal_length(_,i,a,b) return #a == #b and i end -parsers.closeticks = parsers.space^-1 - * Cmt(C(parsers.backtick^1) - * Cb("ticks"), captures_equal_length) +parsers.closeticks = Cmt(C(parsers.backtick^1) + * Cb("ticks"), captures_equal_length) -parsers.intickschar = (parsers.any - S(" \n\r`")) - + (parsers.newline * -parsers.blankline) - + (parsers.space - parsers.closeticks) +parsers.intickschar = (parsers.any - S("\n\r`")) + + V("NoSoftLineBreakEndline") + (parsers.backtick^1 - parsers.closeticks) -parsers.inticks = parsers.openticks * parsers.space^-1 - * C(parsers.intickschar^0) * parsers.closeticks -parsers.leader = parsers.space^-3 +local function process_inticks(s) + s = s:gsub("\n", " ") + s = s:gsub("^ (.*) $", "%1") + return s +end + +parsers.inticks = parsers.openticks + * C(parsers.space^0) + * parsers.closeticks + + parsers.openticks + * Cs(Cs(parsers.intickschar^0) / process_inticks) + * parsers.closeticks + +-- case-insensitive match (we assume s is lowercase). must be single byte encoding +parsers.keyword_exact = function(s) + local parser = P(0) + for i=1,#s do + local c = s:sub(i,i) + local m = c .. upper(c) + parser = parser * S(m) + end + return parser +end + +parsers.special_block_keyword = + parsers.keyword_exact("pre") + + parsers.keyword_exact("script") + + parsers.keyword_exact("style") + + parsers.keyword_exact("textarea") + +parsers.block_keyword = + parsers.keyword_exact("address") + + parsers.keyword_exact("article") + + parsers.keyword_exact("aside") + + parsers.keyword_exact("base") + + parsers.keyword_exact("basefont") + + parsers.keyword_exact("blockquote") + + parsers.keyword_exact("body") + + parsers.keyword_exact("caption") + + parsers.keyword_exact("center") + + parsers.keyword_exact("col") + + parsers.keyword_exact("colgroup") + + parsers.keyword_exact("dd") + + parsers.keyword_exact("details") + + parsers.keyword_exact("dialog") + + parsers.keyword_exact("dir") + + parsers.keyword_exact("div") + + parsers.keyword_exact("dl") + + parsers.keyword_exact("dt") + + parsers.keyword_exact("fieldset") + + parsers.keyword_exact("figcaption") + + parsers.keyword_exact("figure") + + parsers.keyword_exact("footer") + + parsers.keyword_exact("form") + + parsers.keyword_exact("frame") + + parsers.keyword_exact("frameset") + + parsers.keyword_exact("h1") + + parsers.keyword_exact("h2") + + parsers.keyword_exact("h3") + + parsers.keyword_exact("h4") + + parsers.keyword_exact("h5") + + parsers.keyword_exact("h6") + + parsers.keyword_exact("head") + + parsers.keyword_exact("header") + + parsers.keyword_exact("hr") + + parsers.keyword_exact("html") + + parsers.keyword_exact("iframe") + + parsers.keyword_exact("legend") + + parsers.keyword_exact("li") + + parsers.keyword_exact("link") + + parsers.keyword_exact("main") + + parsers.keyword_exact("menu") + + parsers.keyword_exact("menuitem") + + parsers.keyword_exact("nav") + + parsers.keyword_exact("noframes") + + parsers.keyword_exact("ol") + + parsers.keyword_exact("optgroup") + + parsers.keyword_exact("option") + + parsers.keyword_exact("p") + + parsers.keyword_exact("param") + + parsers.keyword_exact("section") + + parsers.keyword_exact("source") + + parsers.keyword_exact("summary") + + parsers.keyword_exact("table") + + parsers.keyword_exact("tbody") + + parsers.keyword_exact("td") + + parsers.keyword_exact("tfoot") + + parsers.keyword_exact("th") + + parsers.keyword_exact("thead") + + parsers.keyword_exact("title") + + parsers.keyword_exact("tr") + + parsers.keyword_exact("track") + + parsers.keyword_exact("ul") + +-- end conditions +parsers.html_blankline_end_condition = parsers.linechar^0 + * ( parsers.newline + * (parsers.check_minimal_blank_indent_and_any_trail + * #parsers.blankline + + parsers.check_minimal_indent_and_any_trail) + * parsers.linechar^1)^0 + * (parsers.newline^-1 / "") + +local function remove_trailing_blank_lines(s) + return s:gsub("[\n\r]+%s*$", "") +end + +parsers.html_until_end = function(end_marker) + return Cs(Cs((parsers.newline + * (parsers.check_minimal_blank_indent_and_any_trail + * #parsers.blankline + + parsers.check_minimal_indent_and_any_trail) + + parsers.linechar - end_marker)^0 + * parsers.linechar^0 * parsers.newline^-1) + / remove_trailing_blank_lines) +end + +-- attributes +parsers.html_attribute_spacing = parsers.optionalspace + * V("NoSoftLineBreakEndline") + * parsers.optionalspace + + parsers.spacechar^1 + +parsers.html_attribute_name = (parsers.letter + parsers.colon + parsers.underscore) + * (parsers.alphanumeric + parsers.colon + parsers.underscore + + parsers.period + parsers.dash)^0 + +parsers.html_attribute_value = parsers.squote + * (parsers.linechar - parsers.squote)^0 + * parsers.squote + + parsers.dquote + * (parsers.linechar - parsers.dquote)^0 + * parsers.dquote + + ( parsers.any - parsers.spacechar - parsers.newline + - parsers.dquote - parsers.squote - parsers.backtick + - parsers.equal - parsers.less - parsers.more)^1 + +parsers.html_inline_attribute_value = parsers.squote + * (V("NoSoftLineBreakEndline") + + parsers.any + - parsers.blankline^2 + - parsers.squote)^0 + * parsers.squote + + parsers.dquote + * (V("NoSoftLineBreakEndline") + + parsers.any + - parsers.blankline^2 + - parsers.dquote)^0 + * parsers.dquote + + (parsers.any - parsers.spacechar - parsers.newline + - parsers.dquote - parsers.squote - parsers.backtick + - parsers.equal - parsers.less - parsers.more)^1 + +parsers.html_attribute_value_specification = parsers.optionalspace + * parsers.equal + * parsers.optionalspace + * parsers.html_attribute_value + +parsers.html_spnl = parsers.optionalspace + * (V("NoSoftLineBreakEndline") * parsers.optionalspace)^-1 + +parsers.html_inline_attribute_value_specification = parsers.html_spnl + * parsers.equal + * parsers.html_spnl + * parsers.html_inline_attribute_value + +parsers.html_attribute = parsers.html_attribute_spacing + * parsers.html_attribute_name + * parsers.html_inline_attribute_value_specification^-1 + +parsers.html_non_newline_attribute = parsers.spacechar^1 + * parsers.html_attribute_name + * parsers.html_attribute_value_specification^-1 + +parsers.nested_breaking_blank = parsers.newline + * parsers.check_minimal_blank_indent + * parsers.blankline + +parsers.html_comment_start = P("<!--") + +parsers.html_comment_end = P("-->") + +parsers.html_comment = Cs( parsers.html_comment_start + * parsers.html_until_end(parsers.html_comment_end)) + +parsers.html_inline_comment = (parsers.html_comment_start / "") + * -P(">") * -P("->") + * Cs((V("NoSoftLineBreakEndline") + parsers.any - P("--") + - parsers.nested_breaking_blank - parsers.html_comment_end)^0) + * (parsers.html_comment_end / "") + +parsers.html_cdatasection_start = P("<![CDATA[") + +parsers.html_cdatasection_end = P("]]>") + +parsers.html_cdatasection = Cs( parsers.html_cdatasection_start + * parsers.html_until_end(parsers.html_cdatasection_end)) + +parsers.html_inline_cdatasection = parsers.html_cdatasection_start + * Cs(V("NoSoftLineBreakEndline") + parsers.any + - parsers.nested_breaking_blank - parsers.html_cdatasection_end)^0 + * parsers.html_cdatasection_end + +parsers.html_declaration_start = P("<!") * parsers.letter + +parsers.html_declaration_end = P(">") + +parsers.html_declaration = Cs( parsers.html_declaration_start + * parsers.html_until_end(parsers.html_declaration_end)) + +parsers.html_inline_declaration = parsers.html_declaration_start + * Cs(V("NoSoftLineBreakEndline") + parsers.any + - parsers.nested_breaking_blank - parsers.html_declaration_end)^0 + * parsers.html_declaration_end + +parsers.html_instruction_start = P("<?") + +parsers.html_instruction_end = P("?>") + +parsers.html_instruction = Cs( parsers.html_instruction_start + * parsers.html_until_end(parsers.html_instruction_end)) + +parsers.html_inline_instruction = parsers.html_instruction_start + * Cs(V("NoSoftLineBreakEndline") + parsers.any + - parsers.nested_breaking_blank - parsers.html_instruction_end)^0 + * parsers.html_instruction_end + +parsers.html_blankline = parsers.newline + * parsers.optionalspace + * parsers.newline + +parsers.html_tag_start = parsers.less + +parsers.html_tag_closing_start = parsers.less + * parsers.slash + +parsers.html_tag_end = parsers.html_spnl + * parsers.more + +parsers.html_empty_tag_end = parsers.html_spnl + * parsers.slash + * parsers.more + +-- opening tags +parsers.html_any_open_inline_tag = parsers.html_tag_start + * parsers.keyword + * parsers.html_attribute^0 + * parsers.html_tag_end + +parsers.html_any_open_tag = parsers.html_tag_start + * parsers.keyword + * parsers.html_non_newline_attribute^0 + * parsers.html_tag_end + +parsers.html_open_tag = parsers.html_tag_start + * parsers.block_keyword + * parsers.html_attribute^0 + * parsers.html_tag_end + +parsers.html_open_special_tag = parsers.html_tag_start + * parsers.special_block_keyword + * parsers.html_attribute^0 + * parsers.html_tag_end + +-- incomplete tags +parsers.incomplete_tag_following = parsers.spacechar + + parsers.more + + parsers.slash * parsers.more + + #(parsers.newline + parsers.eof) + +parsers.incomplete_special_tag_following = parsers.spacechar + + parsers.more + + #(parsers.newline + parsers.eof) + +parsers.html_incomplete_open_tag = parsers.html_tag_start + * parsers.block_keyword + * parsers.incomplete_tag_following + +parsers.html_incomplete_open_special_tag = parsers.html_tag_start + * parsers.special_block_keyword + * parsers.incomplete_special_tag_following + +parsers.html_incomplete_close_tag = parsers.html_tag_closing_start + * parsers.block_keyword + * parsers.incomplete_tag_following + +parsers.html_incomplete_close_special_tag = parsers.html_tag_closing_start + * parsers.special_block_keyword + * parsers.incomplete_tag_following + +-- closing tags +parsers.html_close_tag = parsers.html_tag_closing_start + * parsers.block_keyword + * parsers.html_tag_end + +parsers.html_any_close_tag = parsers.html_tag_closing_start + * parsers.keyword + * parsers.html_tag_end + +parsers.html_close_special_tag = parsers.html_tag_closing_start + * parsers.special_block_keyword + * parsers.html_tag_end + +-- empty tags +parsers.html_any_empty_inline_tag = parsers.html_tag_start + * parsers.keyword + * parsers.html_attribute^0 + * parsers.html_empty_tag_end + +parsers.html_any_empty_tag = parsers.html_tag_start + * parsers.keyword + * parsers.html_non_newline_attribute^0 + * parsers.optionalspace + * parsers.slash + * parsers.more + +parsers.html_empty_tag = parsers.html_tag_start + * parsers.block_keyword + * parsers.html_attribute^0 + * parsers.html_empty_tag_end + +parsers.html_empty_special_tag = parsers.html_tag_start + * parsers.special_block_keyword + * parsers.html_attribute^0 + * parsers.html_empty_tag_end + +parsers.html_incomplete_blocks = parsers.html_incomplete_open_tag + + parsers.html_incomplete_open_special_tag + + parsers.html_incomplete_close_tag + +-- parse special html blocks +parsers.html_blankline_ending_special_block_opening = (parsers.html_close_special_tag + + parsers.html_empty_special_tag) + * #(parsers.optionalspace + * (parsers.newline + parsers.eof)) + +parsers.html_blankline_ending_special_block = parsers.html_blankline_ending_special_block_opening + * parsers.html_blankline_end_condition + +parsers.html_special_block_opening = parsers.html_incomplete_open_special_tag + - parsers.html_empty_special_tag + +parsers.html_closing_special_block = parsers.html_special_block_opening + * parsers.html_until_end(parsers.html_close_special_tag) + +parsers.html_special_block = parsers.html_blankline_ending_special_block + + parsers.html_closing_special_block + +-- parse html blocks +parsers.html_block_opening = parsers.html_incomplete_open_tag + + parsers.html_incomplete_close_tag + +parsers.html_block = parsers.html_block_opening + * parsers.html_blankline_end_condition + +-- parse any html blocks +parsers.html_any_block_opening = (parsers.html_any_open_tag + + parsers.html_any_close_tag + + parsers.html_any_empty_tag) + * #(parsers.optionalspace * (parsers.newline + parsers.eof)) + +parsers.html_any_block = parsers.html_any_block_opening + * parsers.html_blankline_end_condition + +parsers.html_inline_comment_full = parsers.html_comment_start + * -P(">") * -P("->") + * Cs((V("NoSoftLineBreakEndline") + parsers.any - P("--") + - parsers.nested_breaking_blank - parsers.html_comment_end)^0) + * parsers.html_comment_end + +parsers.html_inline_tags = parsers.html_inline_comment_full + + parsers.html_any_empty_inline_tag + + parsers.html_inline_instruction + + parsers.html_inline_cdatasection + + parsers.html_inline_declaration + + parsers.html_any_open_inline_tag + + parsers.html_any_close_tag + +parsers.urlchar = parsers.anyescaped + - parsers.newline + - parsers.more + +parsers.auto_link_scheme_part = parsers.alphanumeric + + parsers.plus + + parsers.period + + parsers.dash + +parsers.auto_link_scheme = parsers.letter + * parsers.auto_link_scheme_part + * parsers.auto_link_scheme_part^-30 + +parsers.absolute_uri = parsers.auto_link_scheme * parsers.colon + * (parsers.any - parsers.spacing - parsers.less - parsers.more)^0 + +parsers.printable_characters = S(".!#$%&'*+/=?^_`{|}~-") + +parsers.email_address_local_part_char = parsers.alphanumeric + + parsers.printable_characters + +parsers.email_address_local_part = parsers.email_address_local_part_char^1 + +parsers.email_address_dns_label = parsers.alphanumeric + * (parsers.alphanumeric + parsers.dash)^-62 + * B(parsers.alphanumeric) + +parsers.email_address_domain = parsers.email_address_dns_label + * (parsers.period * parsers.email_address_dns_label)^0 + +parsers.email_address = parsers.email_address_local_part + * parsers.at + * parsers.email_address_domain + +parsers.auto_link_url = parsers.less + * C(parsers.absolute_uri) + * parsers.more + +parsers.auto_link_email = parsers.less + * C(parsers.email_address) + * parsers.more + +parsers.auto_link_relative_reference = parsers.less + * C(parsers.urlchar^1) + * parsers.more + +parsers.autolink = parsers.auto_link_url + + parsers.auto_link_email -- content in balanced brackets, parentheses, or quotes: parsers.bracketed = P{ parsers.lbracket @@ -3104,161 +4381,89 @@ parsers.dquoted = P{ parsers.dquote * parsers.alphanumeric ) + V(1))^0 * parsers.dquote } --- bracketed tag for markdown links, allowing nested brackets: -parsers.tag = parsers.lbracket +parsers.link_text = parsers.lbracket * Cs((parsers.alphanumeric^1 - + parsers.bracketed - + parsers.inticks - + ( parsers.backslash / "" * parsers.rbracket - + parsers.any - - (parsers.rbracket + parsers.blankline^2)))^0) + + parsers.bracketed + + parsers.inticks + + parsers.autolink + + V("InlineHtml") + + ( parsers.backslash * parsers.backslash) + + ( parsers.backslash * (parsers.lbracket + parsers.rbracket) + + V("NoSoftLineBreakSpace") + + V("NoSoftLineBreakEndline") + + (parsers.any + - (parsers.newline + parsers.lbracket + parsers.rbracket + parsers.blankline^2))))^0) * parsers.rbracket +parsers.link_label = parsers.lbracket + * -#(parsers.sp * parsers.rbracket) + * #((parsers.any - parsers.rbracket)^-999 * parsers.rbracket) + * Cs((parsers.alphanumeric^1 + + parsers.inticks + + parsers.autolink + + V("InlineHtml") + + ( parsers.backslash * parsers.backslash) + + ( parsers.backslash * (parsers.lbracket + parsers.rbracket) + + V("NoSoftLineBreakSpace") + + V("NoSoftLineBreakEndline") + + (parsers.any + - (parsers.newline + parsers.lbracket + parsers.rbracket + parsers.blankline^2))))^1) + * parsers.rbracket + +parsers.inparens_url = P{ parsers.lparent + * ((parsers.anyescaped - (parsers.lparent + + parsers.rparent + + parsers.spacing) + ) + V(1))^0 + * parsers.rparent } + -- url for markdown links, allowing nested brackets: parsers.url = parsers.less * Cs((parsers.anyescaped + - parsers.newline + - parsers.less - parsers.more)^0) * parsers.more - + Cs((parsers.inparens + (parsers.anyescaped - - parsers.spacing - - parsers.rparent))^1) - --- quoted text, possibly with nested quotes: -parsers.title_s = parsers.squote * Cs(((parsers.anyescaped-parsers.squote) - + parsers.squoted)^0) - * parsers.squote - -parsers.title_d = parsers.dquote * Cs(((parsers.anyescaped-parsers.dquote) - + parsers.dquoted)^0) - * parsers.dquote + + -parsers.less + * Cs((parsers.inparens_url + (parsers.anyescaped + - parsers.spacing + - parsers.lparent + - parsers.rparent))^1) + +-- quoted text: +parsers.title_s = parsers.squote + * Cs((parsers.html_entities + + V("NoSoftLineBreakSpace") + + V("NoSoftLineBreakEndline") + + (parsers.anyescaped - parsers.newline - parsers.squote - parsers.blankline^2))^0) + * parsers.squote + +parsers.title_d = parsers.dquote + * Cs((parsers.html_entities + + V("NoSoftLineBreakSpace") + + V("NoSoftLineBreakEndline") + + (parsers.anyescaped - parsers.newline - parsers.dquote - parsers.blankline^2))^0) + * parsers.dquote parsers.title_p = parsers.lparent - * Cs((parsers.inparens + (parsers.anyescaped-parsers.rparent))^0) + * Cs((parsers.html_entities + + V("NoSoftLineBreakSpace") + + V("NoSoftLineBreakEndline") + + (parsers.anyescaped - parsers.newline - parsers.lparent - parsers.rparent + - parsers.blankline^2))^0) * parsers.rparent parsers.title = parsers.title_d + parsers.title_s + parsers.title_p parsers.optionaltitle - = parsers.spnl * parsers.title * parsers.spacechar^0 + = parsers.spnlc * parsers.title * parsers.spacechar^0 + Cc("") -parsers.indirect_link - = parsers.tag - * ( C(parsers.spnl) * parsers.tag - + Cc(nil) * Cc(nil) -- always produce exactly two captures - ) - -parsers.indirect_image - = parsers.exclamation * parsers.indirect_link --- case-insensitive match (we assume s is lowercase). must be single byte encoding -parsers.keyword_exact = function(s) - local parser = P(0) - for i=1,#s do - local c = s:sub(i,i) - local m = c .. upper(c) - parser = parser * S(m) - end - return parser -end - -parsers.block_keyword = - parsers.keyword_exact("address") + parsers.keyword_exact("blockquote") + - parsers.keyword_exact("center") + parsers.keyword_exact("del") + - parsers.keyword_exact("dir") + parsers.keyword_exact("div") + - parsers.keyword_exact("p") + parsers.keyword_exact("pre") + - parsers.keyword_exact("li") + parsers.keyword_exact("ol") + - parsers.keyword_exact("ul") + parsers.keyword_exact("dl") + - parsers.keyword_exact("dd") + parsers.keyword_exact("form") + - parsers.keyword_exact("fieldset") + parsers.keyword_exact("isindex") + - parsers.keyword_exact("ins") + parsers.keyword_exact("menu") + - parsers.keyword_exact("noframes") + parsers.keyword_exact("frameset") + - parsers.keyword_exact("h1") + parsers.keyword_exact("h2") + - parsers.keyword_exact("h3") + parsers.keyword_exact("h4") + - parsers.keyword_exact("h5") + parsers.keyword_exact("h6") + - parsers.keyword_exact("hr") + parsers.keyword_exact("script") + - parsers.keyword_exact("noscript") + parsers.keyword_exact("table") + - parsers.keyword_exact("tbody") + parsers.keyword_exact("tfoot") + - parsers.keyword_exact("thead") + parsers.keyword_exact("th") + - parsers.keyword_exact("td") + parsers.keyword_exact("tr") - --- There is no reason to support bad html, so we expect quoted attributes -parsers.htmlattributevalue - = parsers.squote * (parsers.any - (parsers.blankline - + parsers.squote))^0 - * parsers.squote - + parsers.dquote * (parsers.any - (parsers.blankline - + parsers.dquote))^0 - * parsers.dquote - -parsers.htmlattribute = parsers.spacing^1 - * (parsers.alphanumeric + S("_-"))^1 - * parsers.sp * parsers.equal * parsers.sp - * parsers.htmlattributevalue - -parsers.htmlcomment = P("<!--") - * parsers.optionalspace - * Cs((parsers.any - parsers.optionalspace * P("-->"))^0) - * parsers.optionalspace - * P("-->") - -parsers.htmlinstruction = P("<?") * (parsers.any - P("?>"))^0 * P("?>") - -parsers.openelt_any = parsers.less * parsers.keyword * parsers.htmlattribute^0 - * parsers.sp * parsers.more - -parsers.openelt_exact = function(s) - return parsers.less * parsers.sp * parsers.keyword_exact(s) - * parsers.htmlattribute^0 * parsers.sp * parsers.more -end - -parsers.openelt_block = parsers.sp * parsers.block_keyword - * parsers.htmlattribute^0 * parsers.sp * parsers.more - -parsers.closeelt_any = parsers.less * parsers.sp * parsers.slash - * parsers.keyword * parsers.sp * parsers.more - -parsers.closeelt_exact = function(s) - return parsers.less * parsers.sp * parsers.slash * parsers.keyword_exact(s) - * parsers.sp * parsers.more -end - -parsers.emptyelt_any = parsers.less * parsers.sp * parsers.keyword - * parsers.htmlattribute^0 * parsers.sp * parsers.slash - * parsers.more - -parsers.emptyelt_block = parsers.less * parsers.sp * parsers.block_keyword - * parsers.htmlattribute^0 * parsers.sp * parsers.slash - * parsers.more - -parsers.displaytext = (parsers.any - parsers.less)^1 - --- return content between two matched HTML tags -parsers.in_matched = function(s) - return { parsers.openelt_exact(s) - * (V(1) + parsers.displaytext - + (parsers.less - parsers.closeelt_exact(s)))^0 - * parsers.closeelt_exact(s) } -end - -local function parse_matched_tags(s,pos) - local t = string.lower(lpeg.match(C(parsers.keyword),s,pos)) - return lpeg.match(parsers.in_matched(t),s,pos-1) -end - -parsers.in_matched_block_tags = parsers.less - * Cmt(#parsers.openelt_block, parse_matched_tags) - -parsers.hexentity = parsers.ampersand * parsers.hash * S("Xx") - * C(parsers.hexdigit^1) * parsers.semicolon -parsers.decentity = parsers.ampersand * parsers.hash - * C(parsers.digit^1) * parsers.semicolon -parsers.tagentity = parsers.ampersand * C(parsers.alphanumeric^1) - * parsers.semicolon -- parse a reference definition: [foo]: /bar "title" -parsers.define_reference_parser = parsers.leader * parsers.tag * parsers.colon - * parsers.spacechar^0 * parsers.url - * parsers.optionaltitle +parsers.define_reference_parser = (parsers.check_trail / "") * parsers.link_label * parsers.colon + * parsers.spnlc * parsers.url + * ( parsers.spnlc_sep * parsers.title * parsers.only_blank + + Cc("") * parsers.only_blank) parsers.Inline = V("Inline") -parsers.IndentedInline = V("IndentedInline") -- parse many p between starter and ender parsers.between = function(p, starter, ender) @@ -3266,41 +4471,34 @@ parsers.between = function(p, starter, ender) return (starter * #parsers.nonspacechar * Ct(p * (p - ender2)^0) * ender2) end -parsers.urlchar = parsers.anyescaped - - parsers.newline - - parsers.more - -parsers.auto_link_url = parsers.less - * C( parsers.alphanumeric^1 * P("://") - * parsers.urlchar^1) - * parsers.more - -parsers.auto_link_email - = parsers.less - * C((parsers.alphanumeric + S("-._+"))^1 - * P("@") * parsers.urlchar^1) - * parsers.more - -parsers.auto_link_relative_reference - = parsers.less - * C(parsers.urlchar^1) - * parsers.more - parsers.lineof = function(c) - return (parsers.leader * (P(c) * parsers.optionalspace)^3 - * (parsers.newline * parsers.blankline^1 - + parsers.newline^-1 * parsers.eof)) + return (parsers.check_trail_no_rem * (P(c) * parsers.optionalspace)^3 + * (parsers.newline + parsers.eof)) end + +parsers.thematic_break_lines = parsers.lineof(parsers.asterisk) + + parsers.lineof(parsers.dash) + + parsers.lineof(parsers.underscore) -- parse Atx heading start and return level parsers.heading_start = #parsers.hash * C(parsers.hash^-6) * -parsers.hash / length -- parse setext header ending and return level -parsers.heading_level = parsers.equal^1 * Cc(1) + parsers.dash^1 * Cc(2) +parsers.heading_level = parsers.nonindentspace * parsers.equal^1 * parsers.optionalspace * #parsers.newline * Cc(1) + + parsers.nonindentspace * parsers.dash^1 * parsers.optionalspace * #parsers.newline * Cc(2) local function strip_atx_end(s) - return s:gsub("[#%s]*\n$","") + return s:gsub("%s+#*%s*\n$","") end + +parsers.atx_heading = parsers.check_trail_no_rem + * Cg(parsers.heading_start, "level") + * (C( parsers.optionalspace + * parsers.hash^0 + * parsers.optionalspace + * parsers.newline) + + parsers.spacechar^1 + * C(parsers.line)) M.reader = {} function M.reader.new(writer, options) local self = {} @@ -3319,7 +4517,7 @@ function M.reader.new(writer, options) tag = util.rope_to_string(tag) tag = tag:gsub("[ \n\r\t]+", " ") tag = tag:gsub("^ ", ""):gsub(" $", "") - tag = uni_case.casefold(tag, true, false) + tag = uni_algos.case.casefold(tag, true, false) return tag end local function iterlines(s, f) @@ -3386,11 +4584,6 @@ function M.reader.new(writer, options) return parsers.inlines end, false) - self.create_parser("parse_inlines_no_link", - function() - return parsers.inlines_no_link - end, false) - self.create_parser("parse_inlines_no_inline_note", function() return parsers.inlines_no_inline_note @@ -3405,139 +4598,826 @@ function M.reader.new(writer, options) function() return parsers.inlines_nbsp end, false) + self.create_parser("parse_inlines_no_link_or_emphasis", + function() + return parsers.inlines_no_link_or_emphasis + end, false) + parsers.minimally_indented_blankline = parsers.check_minimal_indent * (parsers.blankline / "") + + parsers.minimally_indented_block = parsers.check_minimal_indent * V("Block") + + parsers.minimally_indented_block_or_paragraph = parsers.check_minimal_indent * V("BlockOrParagraph") + + parsers.minimally_indented_paragraph = parsers.check_minimal_indent * V("Paragraph") + + parsers.minimally_indented_plain = parsers.check_minimal_indent * V("Plain") + + parsers.minimally_indented_par_or_plain = parsers.minimally_indented_paragraph + + parsers.minimally_indented_plain + + parsers.minimally_indented_par_or_plain_no_blank = parsers.minimally_indented_par_or_plain + - parsers.minimally_indented_blankline + + parsers.minimally_indented_ref = parsers.check_minimal_indent * V("Reference") + + parsers.minimally_indented_blank = parsers.check_minimal_indent * V("Blank") + + parsers.conditionally_indented_blankline = parsers.check_minimal_blank_indent * (parsers.blankline / "") + + parsers.minimally_indented_ref_or_block = parsers.minimally_indented_ref + + parsers.minimally_indented_block + - parsers.minimally_indented_blankline + + parsers.minimally_indented_ref_or_block_or_par = parsers.minimally_indented_ref + + parsers.minimally_indented_block_or_paragraph + - parsers.minimally_indented_blankline + + + parsers.separator_loop = function(separated_block, paragraph, block_separator, paragraph_separator) + return separated_block + + block_separator + * paragraph + * separated_block + + paragraph_separator + * paragraph + end + + parsers.create_loop_body_pair = function(separated_block, paragraph, block_separator, paragraph_separator) + return { + block = parsers.separator_loop(separated_block, paragraph, block_separator, block_separator), + par = parsers.separator_loop(separated_block, paragraph, block_separator, paragraph_separator) + } + end + + parsers.block_sep_group = function(blank) + return blank^0 * parsers.eof + + ( blank^2 / writer.paragraphsep + + blank^0 / writer.interblocksep + ) + end + + parsers.par_sep_group = function(blank) + return blank^0 * parsers.eof + + blank^0 / writer.paragraphsep + end + + parsers.sep_group_no_output = function(blank) + return blank^0 * parsers.eof + + blank^0 + end + + parsers.content_blank = parsers.minimally_indented_blankline + + parsers.ref_or_block_separated = parsers.sep_group_no_output(parsers.content_blank) + * ( parsers.minimally_indented_ref + - parsers.content_blank) + + parsers.block_sep_group(parsers.content_blank) + * ( parsers.minimally_indented_block + - parsers.content_blank) + + parsers.loop_body_pair = + parsers.create_loop_body_pair(parsers.ref_or_block_separated, + parsers.minimally_indented_par_or_plain_no_blank, + parsers.block_sep_group(parsers.content_blank), + parsers.par_sep_group(parsers.content_blank)) + + parsers.content_loop = ( V("Block") + * parsers.loop_body_pair.block^0 + + (V("Paragraph") + V("Plain")) + * parsers.ref_or_block_separated + * parsers.loop_body_pair.block^0 + + (V("Paragraph") + V("Plain")) + * parsers.loop_body_pair.par^0) + * parsers.content_blank^0 + + parsers.indented_content = function() + return Ct( (V("Reference") + (parsers.blankline / "")) + * parsers.content_blank^0 + * parsers.check_minimal_indent + * parsers.content_loop + + (V("Reference") + (parsers.blankline / "")) + * parsers.content_blank^0 + + parsers.content_loop) + end + + parsers.add_indent = function(pattern, name, breakable) + return Cg(Cmt( Cb("indent_info") + * Ct(pattern) + * (#parsers.linechar * Cc(false) + Cc(true)) -- check if starter is blank + * Cc(name) + * Cc(breakable), + process_starter_indent), "indent_info") + end + if options.hashEnumerators then parsers.dig = parsers.digit + parsers.hash else parsers.dig = parsers.digit end - parsers.enumerator = C(parsers.dig^3 * parsers.period) * #parsers.spacing - + C(parsers.dig^2 * parsers.period) * #parsers.spacing - * (parsers.tab + parsers.space^1) - + C(parsers.dig * parsers.period) * #parsers.spacing - * (parsers.tab + parsers.space^-2) - + parsers.space * C(parsers.dig^2 * parsers.period) - * #parsers.spacing - + parsers.space * C(parsers.dig * parsers.period) - * #parsers.spacing - * (parsers.tab + parsers.space^-1) - + parsers.space * parsers.space * C(parsers.dig^1 - * parsers.period) * #parsers.spacing - -- strip off leading > and indents, and run through blocks - parsers.blockquote_body = ((parsers.leader * parsers.more * parsers.space^-1)/"" - * parsers.linechar^0 * parsers.newline)^1 - * (-V("BlockquoteExceptions") * parsers.linechar^1 - * parsers.newline)^0 + parsers.enumerator = function(delimiter_type, interrupting) + local delimiter_range + local allowed_end + if interrupting then + delimiter_range = P("1") + allowed_end = C(parsers.spacechar^1) * #parsers.linechar + else + delimiter_range = parsers.dig * parsers.dig^-8 + allowed_end = C(parsers.spacechar^1) + #(parsers.newline + parsers.eof) + end + + return parsers.check_trail + * Ct(C(delimiter_range) * C(delimiter_type)) + * allowed_end + end + + parsers.starter = parsers.bullet(parsers.dash) + + parsers.bullet(parsers.asterisk) + + parsers.bullet(parsers.plus) + + parsers.enumerator(parsers.period) + + parsers.enumerator(parsers.rparent) + + parsers.blockquote_start = parsers.check_trail * C(parsers.more) * C(parsers.spacechar^0) + + parsers.blockquote_body = parsers.add_indent(parsers.blockquote_start, "bq", true) + * parsers.indented_content() + * remove_indent("bq") if not options.breakableBlockquotes then - parsers.blockquote_body = parsers.blockquote_body - * (parsers.blankline^0 / "") + parsers.blockquote_body = parsers.add_indent(parsers.blockquote_start, "bq", false) + * parsers.indented_content() + * remove_indent("bq") + end + local function parse_content_part(content_part) + local rope = util.rope_to_string(content_part) + local parsed = self.parser_functions.parse_inlines_no_link_or_emphasis(rope) + parsed.indent_info = nil + return parsed + end + + local function collect_emphasis_content(t, opening_index, closing_index) + local content = {} + + local content_part = {} + for i = opening_index, closing_index do + local value = t[i] + + if value.rendered ~= nil then + content[#content + 1] = parse_content_part(content_part) + content_part = {} + content[#content + 1] = value.rendered + value.rendered = nil + else + if value.type == "delimiter" and value.element == "emphasis" then + if value.is_active then + content_part[#content_part + 1] = string.rep(value.character, value.current_count) + end + else + content_part[#content_part + 1] = value.content + end + value.content = '' + value.is_active = false + end + end + + if next(content_part) ~= nil then + content[#content + 1] = parse_content_part(content_part) + end + + return content + end + + local function fill_emph(t, opening_index, closing_index) + local content = collect_emphasis_content(t, opening_index + 1, closing_index - 1) + t[opening_index + 1].is_active = true + t[opening_index + 1].rendered = writer.emphasis(content) end + + local function fill_strong(t, opening_index, closing_index) + local content = collect_emphasis_content(t, opening_index + 1, closing_index - 1) + t[opening_index + 1].is_active = true + t[opening_index + 1].rendered = writer.strong(content) + end + + local function breaks_three_rule(opening_delimiter, closing_delimiter) + return (opening_delimiter.is_closing or closing_delimiter.is_opening) and + ((opening_delimiter.original_count + closing_delimiter.original_count) % 3 == 0) and + (opening_delimiter.original_count % 3 ~= 0 or closing_delimiter.original_count % 3 ~= 0) + end + + local function find_emphasis_opener(t, bottom_index, latest_index, character, closing_delimiter) + for i = latest_index, bottom_index, -1 do + local value = t[i] + if value.is_active and + value.is_opening and + value.type == "delimiter" and + value.element == "emphasis" and + (value.character == character) and + (value.current_count > 0) then + if not breaks_three_rule(value, closing_delimiter) then + return i + end + end + end + end + + local function process_emphasis(t, opening_index, closing_index) + for i = opening_index, closing_index do + local value = t[i] + if value.type == "delimiter" and value.element == "emphasis" then + local delimiter_length = string.len(value.content) + value.character = string.sub(value.content, 1, 1) + value.current_count = delimiter_length + value.original_count = delimiter_length + end + end + + local openers_bottom = { + ['*'] = { + [true] = {opening_index, opening_index, opening_index}, + [false] = {opening_index, opening_index, opening_index} + }, + ['_'] = { + [true] = {opening_index, opening_index, opening_index}, + [false] = {opening_index, opening_index, opening_index} + } + } + + local current_position = opening_index + local max_position = closing_index + + while current_position <= max_position do + local value = t[current_position] + + if value.type ~= "delimiter" or + value.element ~= "emphasis" or + not value.is_active or + not value.is_closing or + (value.current_count <= 0) then + current_position = current_position + 1 + goto continue + end + + local character = value.character + local is_opening = value.is_opening + local closing_length_modulo_three = value.original_count % 3 + + local current_openers_bottom = openers_bottom[character][is_opening][closing_length_modulo_three + 1] + + local opener_position = find_emphasis_opener(t, current_openers_bottom, current_position - 1, character, value) + + if (opener_position == nil) then + openers_bottom[character][is_opening][closing_length_modulo_three + 1] = current_position + current_position = current_position + 1 + goto continue + end + + local opening_delimiter = t[opener_position] + + local current_opening_count = opening_delimiter.current_count + local current_closing_count = t[current_position].current_count + + if (current_opening_count >= 2) and (current_closing_count >= 2) then + opening_delimiter.current_count = current_opening_count - 2 + t[current_position].current_count = current_closing_count - 2 + fill_strong(t, opener_position, current_position) + else + opening_delimiter.current_count = current_opening_count - 1 + t[current_position].current_count = current_closing_count - 1 + fill_emph(t, opener_position, current_position) + end + + ::continue:: + end + end + + local cont = lpeg.R("\128\191") -- continuation byte + + local function utf8_by_byte_count(n) + if (n == 1) then + return lpeg.R("\0\127") + end + if (n == 2) then + return lpeg.R("\194\223") * cont + end + if (n == 3) then + return lpeg.R("\224\239") * cont * cont + end + if (n == 4) then + return lpeg.R("\240\244") * cont * cont * cont + end + end + + local function check_unicode_type(s, i, start_pos, end_pos, chartype) + local c + local char_length + for pos = start_pos, end_pos, 1 do + if (start_pos < 0) then + char_length = -pos + else + char_length = pos + 1 + end + c = lpeg.match({ C(utf8_by_byte_count(char_length)) },s,i+pos) + if (c ~= nil) and (unicode.utf8.match(c, chartype)) then + return i + end + end + end + + local function check_preceding_unicode_punctuation(s, i) + return check_unicode_type(s, i, -4, -1, "%p") + end + + local function check_preceding_unicode_whitespace(s, i) + return check_unicode_type(s, i, -4, -1, "%s") + end + + local function check_following_unicode_punctuation(s, i) + return check_unicode_type(s, i, 0, 3, "%p") + end + + local function check_following_unicode_whitespace(s, i) + return check_unicode_type(s, i, 0, 3, "%s") + end + + parsers.unicode_preceding_punctuation = B(parsers.escapable) + + Cmt(parsers.succeed, check_preceding_unicode_punctuation) + + parsers.unicode_preceding_whitespace = Cmt(parsers.succeed, check_preceding_unicode_whitespace) + + parsers.unicode_following_punctuation = #parsers.escapable + + Cmt(parsers.succeed, check_following_unicode_punctuation) + + parsers.unicode_following_whitespace = Cmt(parsers.succeed, check_following_unicode_whitespace) + + parsers.delimiter_run = function(character) + return (B(parsers.backslash * character) + -B(character)) + * character^1 + * -#character + end + + parsers.left_flanking_delimiter_run = function(character) + return (B( parsers.any) + * (parsers.unicode_preceding_punctuation + parsers.unicode_preceding_whitespace) + + -B(parsers.any)) + * parsers.delimiter_run(character) + * parsers.unicode_following_punctuation + + parsers.delimiter_run(character) + * -#(parsers.unicode_following_punctuation + parsers.unicode_following_whitespace + + parsers.eof) + end + + parsers.right_flanking_delimiter_run = function(character) + return parsers.unicode_preceding_punctuation + * parsers.delimiter_run(character) + * (parsers.unicode_following_punctuation + parsers.unicode_following_whitespace + + parsers.eof) + + (B(parsers.any) + * -(parsers.unicode_preceding_punctuation + parsers.unicode_preceding_whitespace)) + * parsers.delimiter_run(character) + end + + if options.underscores then + parsers.emph_start = parsers.left_flanking_delimiter_run(parsers.asterisk) + + (-#parsers.right_flanking_delimiter_run(parsers.underscore) + + (parsers.unicode_preceding_punctuation + * #parsers.right_flanking_delimiter_run(parsers.underscore))) + * parsers.left_flanking_delimiter_run(parsers.underscore) + + parsers.emph_end = parsers.right_flanking_delimiter_run(parsers.asterisk) + + (-#parsers.left_flanking_delimiter_run(parsers.underscore) + + #(parsers.left_flanking_delimiter_run(parsers.underscore) + * parsers.unicode_following_punctuation)) + * parsers.right_flanking_delimiter_run(parsers.underscore) + else + parsers.emph_start = parsers.left_flanking_delimiter_run(parsers.asterisk) + + parsers.emph_end = parsers.right_flanking_delimiter_run(parsers.asterisk) + end + + parsers.emph_capturing_open_and_close = #parsers.emph_start * #parsers.emph_end + * Ct( Cg(Cc("delimiter"), "type") + * Cg(Cc("emphasis"), "element") + * Cg(C(parsers.emph_start), "content") + * Cg(Cc(true), "is_opening") + * Cg(Cc(true), "is_closing")) + + parsers.emph_capturing_open = Ct( Cg(Cc("delimiter"), "type") + * Cg(Cc("emphasis"), "element") + * Cg(C(parsers.emph_start), "content") + * Cg(Cc(true), "is_opening") + * Cg(Cc(false), "is_closing")) + + parsers.emph_capturing_close = Ct( Cg(Cc("delimiter"), "type") + * Cg(Cc("emphasis"), "element") + * Cg(C(parsers.emph_end), "content") + * Cg(Cc(false), "is_opening") + * Cg(Cc(true), "is_closing")) + + parsers.emph_open_or_close = parsers.emph_capturing_open_and_close + + parsers.emph_capturing_open + + parsers.emph_capturing_close + + parsers.emph_open = parsers.emph_capturing_open_and_close + + parsers.emph_capturing_open + + parsers.emph_close = parsers.emph_capturing_open_and_close + + parsers.emph_capturing_close + -- List of references defined in the document local references - function self.register_link(tag, url, title, + function self.register_link(_, tag, url, title, attributes) - tag = self.normalize_tag(tag) - references[tag] = { - url = url, - title = title, - attributes = attributes, - } + local normalized_tag = self.normalize_tag(tag) + if references[normalized_tag] == nil then + references[normalized_tag] = { + url = url, + title = title, + attributes = attributes + } + end return "" end - function self.lookup_reference(label, sps, tag, - attributes) - local tagpart - if not tag then - tag = label - tagpart = "" - elseif tag == "" then - tag = label - tagpart = "[]" - else - tagpart = { - "[", - self.parser_functions.parse_inlines(tag), - "]" - } - end - if sps then - tagpart = {sps, tagpart} + function self.lookup_reference(tag) + return references[self.normalize_tag(tag)] + end + + parsers.title_s_direct_ref = parsers.squote + * Cs((parsers.html_entities + + (parsers.anyescaped - parsers.squote - parsers.blankline^2))^0) + * parsers.squote + + parsers.title_d_direct_ref = parsers.dquote + * Cs((parsers.html_entities + + (parsers.anyescaped - parsers.dquote - parsers.blankline^2))^0) + * parsers.dquote + + parsers.title_p_direct_ref = parsers.lparent + * Cs((parsers.html_entities + + (parsers.anyescaped - parsers.lparent - parsers.rparent - parsers.blankline^2))^0) + * parsers.rparent + + parsers.title_direct_ref = parsers.title_s_direct_ref + + parsers.title_d_direct_ref + + parsers.title_p_direct_ref + + parsers.inline_direct_ref_inside = parsers.lparent * parsers.spnl + * Cg(parsers.url + Cc(""), "url") + * parsers.spnl + * Cg(parsers.title_direct_ref + Cc(""), "title") + * parsers.spnl * parsers.rparent + + parsers.inline_direct_ref = parsers.lparent * parsers.spnlc + * Cg(parsers.url + Cc(""), "url") + * parsers.spnlc + * Cg(parsers.title + Cc(""), "title") + * parsers.spnlc * parsers.rparent + + parsers.empty_link = parsers.lbracket + * parsers.rbracket + + parsers.inline_link = parsers.link_text + * parsers.inline_direct_ref + + parsers.full_link = parsers.link_text + * parsers.link_label + + parsers.shortcut_link = parsers.link_label + * -(parsers.empty_link + parsers.link_label) + + parsers.collapsed_link = parsers.link_label + * parsers.empty_link + + parsers.image_opening = #(parsers.exclamation * parsers.inline_link) + * Cg(Cc("inline"), "link_type") + + #(parsers.exclamation * parsers.full_link) + * Cg(Cc("full"), "link_type") + + #(parsers.exclamation * parsers.collapsed_link) + * Cg(Cc("collapsed"), "link_type") + + #(parsers.exclamation * parsers.shortcut_link) + * Cg(Cc("shortcut"), "link_type") + + #(parsers.exclamation * parsers.empty_link) + * Cg(Cc("empty"), "link_type") + + parsers.link_opening = #parsers.inline_link + * Cg(Cc("inline"), "link_type") + + #parsers.full_link + * Cg(Cc("full"), "link_type") + + #parsers.collapsed_link + * Cg(Cc("collapsed"), "link_type") + + #parsers.shortcut_link + * Cg(Cc("shortcut"), "link_type") + + #parsers.empty_link + * Cg(Cc("empty_link"), "link_type") + + #parsers.link_text + * Cg(Cc("link_text"), "link_type") + + parsers.link_image_opening = Ct( Cg(Cc("delimiter"), "type") + * Cg(Cc(true), "is_opening") + * Cg(Cc(false), "is_closing") + * ( Cg(Cc("image"), "element") + * parsers.image_opening + * Cg(parsers.exclamation * parsers.lbracket, "content") + + Cg(Cc("link"), "element") + * parsers.link_opening + * Cg(parsers.lbracket, "content"))) + + parsers.link_image_closing = Ct( Cg(Cc("delimiter"), "type") + * Cg(Cc("link"), "element") + * Cg(Cc(false), "is_opening") + * Cg(Cc(true), "is_closing") + * ( Cg(Cc(true), "is_direct") + * Cg(parsers.rbracket * #parsers.inline_direct_ref, "content") + + Cg(Cc(false), "is_direct") + * Cg(parsers.rbracket, "content"))) + + parsers.link_image_open_or_close = parsers.link_image_opening + + parsers.link_image_closing + + if options.html then + parsers.link_emph_precedence = parsers.inticks + + parsers.autolink + + parsers.html_inline_tags + else + parsers.link_emph_precedence = parsers.inticks + + parsers.autolink + end + + parsers.link_and_emph_endline = parsers.newline + * ((parsers.check_minimal_indent + * -V("EndlineExceptions") + + parsers.check_optional_indent + * -V("EndlineExceptions") + * -parsers.starter) / "") + * parsers.spacechar^0 / "\n" + + parsers.link_and_emph_content = Ct( Cg(Cc("content"), "type") + * Cg(Cs(( parsers.link_emph_precedence + + parsers.backslash * parsers.any + + parsers.link_and_emph_endline + + (parsers.linechar + - parsers.blankline^2 + - parsers.link_image_open_or_close + - parsers.emph_open_or_close))^0), "content")) + + parsers.link_and_emph_table = (parsers.link_image_opening + parsers.emph_open) + * parsers.link_and_emph_content + * ((parsers.link_image_open_or_close + parsers.emph_open_or_close) + * parsers.link_and_emph_content)^1 + + local function collect_link_content(t, opening_index, closing_index) + local content = {} + for i = opening_index, closing_index do + content[#content + 1] = t[i].content end - tag = self.normalize_tag(tag) - local r = references[tag] - if r then - local merged_attributes = {} - for _, attribute in ipairs(r.attributes or {}) do - table.insert(merged_attributes, attribute) + return util.rope_to_string(content) + end + + local function find_link_opener(t, bottom_index, latest_index) + for i = latest_index, bottom_index, -1 do + local value = t[i] + if value.type == "delimiter" and + value.is_opening and + (value.element == "link" or value.element == "image") + and not value.removed then + if value.is_active then + return i + end + value.removed = true + return nil end - for _, attribute in ipairs(attributes or {}) do - table.insert(merged_attributes, attribute) + end + end + + local function find_next_link_closing_index(t, latest_index) + for i = latest_index, #t do + local value = t[i] + if value.is_closing and + value.element == "link" and + not value.removed then + return i end - if #merged_attributes == 0 then - merged_attributes = nil + end + end + + local function disable_previous_link_openers(t, opening_index) + if t[opening_index].element == "image" then + return + end + + for i = opening_index, 1, -1 do + local value = t[i] + if value.is_active and + value.type == "delimiter" and + value.is_opening and + value.element == "link" then + value.is_active = false end - return { - url = r.url, - title = r.title, - attributes = merged_attributes, - } - else - return nil, { - "[", - self.parser_functions.parse_inlines(label), - "]", - tagpart - } end end - -- lookup link reference and return a link, if the reference is found, - -- or a bracketed label otherwise. - local function indirect_link(label, sps, tag) - return writer.defer_call(function() - local r,fallback = self.lookup_reference(label, sps, tag) - if r then - return writer.link( - self.parser_functions.parse_inlines_no_link(label), - r.url, r.title) - else - return fallback + local function disable_range(t, opening_index, closing_index) + for i = opening_index, closing_index do + local value = t[i] + if value.is_active then + value.is_active = false + if value.type == "delimiter" then + value.removed = true + end end - end) + end end - -- lookup image reference and return an image, if the reference is found, - -- or a bracketed label otherwise. - local function indirect_image(label, sps, tag) - return writer.defer_call(function() - local r,fallback = self.lookup_reference(label, sps, tag) - if r then - return writer.image(writer.string(label), r.url, r.title) - else - return {"!", fallback} + local function delete_parsed_content_in_range(t, opening_index, closing_index) + for i = opening_index, closing_index do + t[i].rendered = nil + end + end + + local function empty_content_in_range(t, opening_index, closing_index) + for i = opening_index, closing_index do + t[i].content = '' + end + end + + local function join_attributes(reference_attributes, own_attributes) + local merged_attributes = {} + for _, attribute in ipairs(reference_attributes or {}) do + table.insert(merged_attributes, attribute) + end + for _, attribute in ipairs(own_attributes or {}) do + table.insert(merged_attributes, attribute) + end + if next(merged_attributes) == nil then + merged_attributes = nil + end + return merged_attributes + end + + local function render_link_or_image(t, opening_index, closing_index, content_end_index, reference) + process_emphasis(t, opening_index, content_end_index) + local mapped = collect_emphasis_content(t, opening_index + 1, content_end_index - 1) + + local rendered = {} + if (t[opening_index].element == "link") then + rendered = writer.link(mapped, reference.url, reference.title, reference.attributes) + end + + if (t[opening_index].element == "image") then + rendered = writer.image(mapped, reference.url, reference.title, reference.attributes) + end + + t[opening_index].rendered = rendered + delete_parsed_content_in_range(t, opening_index + 1, closing_index) + empty_content_in_range(t, opening_index, closing_index) + disable_previous_link_openers(t, opening_index) + disable_range(t, opening_index, closing_index) + end + + local function resolve_inline_following_content(t, closing_index, match_reference, match_link_attributes) + local content = "" + for i = closing_index + 1, #t do + content = content .. t[i].content + end + + local matching_content = parsers.succeed + + if match_reference then + matching_content = matching_content * parsers.inline_direct_ref_inside + end + + if match_link_attributes then + matching_content = matching_content * Cg(Ct(parsers.attributes^-1), "attributes") + end + + local matched = lpeg.match(Ct(matching_content * Cg(Cp(), "end_position")), content) + + local matched_count = matched.end_position - 1 + for i = closing_index + 1, #t do + local value = t[i] + + local chars_left = matched_count + matched_count = matched_count - #value.content + + if matched_count <= 0 then + value.content = value.content:sub(chars_left + 1) + break end - end) + + value.content = '' + value.is_active = false + end + + local attributes = matched.attributes + if attributes == nil or next(attributes) == nil then + attributes = nil + end + + return { + url = matched.url or "", + title = matched.title or "", + attributes = attributes + } + end + + local function resolve_inline_link(t, opening_index, closing_index) + local inline_content = resolve_inline_following_content(t, closing_index, true, t.match_link_attributes) + render_link_or_image(t, opening_index, closing_index, closing_index, inline_content) end - parsers.direct_link_tail = parsers.spnl - * parsers.lparent - * (parsers.url + Cc("")) -- link can be empty [foo]() - * parsers.optionaltitle - * parsers.rparent + local function resolve_shortcut_link(t, opening_index, closing_index) + local content = collect_link_content(t, opening_index + 1, closing_index - 1) + local r = self.lookup_reference(content) - parsers.direct_link = (parsers.tag / self.parser_functions.parse_inlines_no_link) - * parsers.direct_link_tail + if r then + local inline_content = resolve_inline_following_content(t, closing_index, false, t.match_link_attributes) + r.attributes = join_attributes(r.attributes, inline_content.attributes) + render_link_or_image(t, opening_index, closing_index, closing_index, r) + end + end + + local function resolve_full_link(t, opening_index, closing_index) + local next_link_closing_index = find_next_link_closing_index(t, closing_index + 4) + local next_link_content = collect_link_content(t, closing_index + 3, next_link_closing_index - 1) + local r = self.lookup_reference(next_link_content) + + if r then + local inline_content = resolve_inline_following_content(t, next_link_closing_index, false, + t.match_link_attributes) + r.attributes = join_attributes(r.attributes, inline_content.attributes) + render_link_or_image(t, opening_index, next_link_closing_index, closing_index, r) + end + end + + local function resolve_collapsed_link(t, opening_index, closing_index) + local next_link_closing_index = find_next_link_closing_index(t, closing_index + 4) + local content = collect_link_content(t, opening_index + 1, closing_index - 1) + local r = self.lookup_reference(content) + + if r then + local inline_content = resolve_inline_following_content(t, closing_index, false, t.match_link_attributes) + r.attributes = join_attributes(r.attributes, inline_content.attributes) + render_link_or_image(t, opening_index, next_link_closing_index, closing_index, r) + end + end + + local function process_links_and_emphasis(t) + for _,value in ipairs(t) do + value.is_active = true + end + + for i,value in ipairs(t) do + if not value.is_closing or + value.type ~= "delimiter" or + not (value.element == "link" or value.element == "image") then + goto continue + end + + local opener_position = find_link_opener(t, 1, i - 1) + if (opener_position == nil) then + goto continue + end + + local opening_delimiter = t[opener_position] + opening_delimiter.removed = true + + local link_type = opening_delimiter.link_type + + if (link_type == "inline") then + resolve_inline_link(t, opener_position, i) + end + if (link_type == "shortcut") then + resolve_shortcut_link(t, opener_position, i) + end + if (link_type == "full") then + resolve_full_link(t, opener_position, i) + end + if (link_type == "collapsed") then + resolve_collapsed_link(t, opener_position, i) + end + + ::continue:: + end + + t[#t].content = t[#t].content:gsub("%s*$","") + + process_emphasis(t, 1, #t) + local final_result = collect_emphasis_content(t, 1, #t) + return final_result + end + + function self.defer_link_and_emphasis_processing(delimiter_table) + return writer.defer_call(function() + return process_links_and_emphasis(delimiter_table) + end) + end - parsers.direct_image = parsers.exclamation - * (parsers.tag / self.parser_functions.parse_inlines) - * parsers.direct_link_tail parsers.Str = (parsers.normalchar * (parsers.normalchar + parsers.at)^0) / writer.string - parsers.Symbol = (V("SpecialChar") - parsers.tightblocksep) + parsers.Symbol = (parsers.backtick^1 + V("SpecialChar")) / writer.string parsers.Ellipsis = P("...") / writer.ellipsis @@ -3549,88 +5429,116 @@ function M.reader.new(writer, options) if options.blankBeforeBlockquote then parsers.bqstart = parsers.fail else - parsers.bqstart = parsers.more + parsers.bqstart = parsers.blockquote_start end if options.blankBeforeHeading then parsers.headerstart = parsers.fail else - parsers.headerstart = parsers.hash - + (parsers.line * (parsers.equal^1 + parsers.dash^1) - * parsers.optionalspace * parsers.newline) + parsers.headerstart = parsers.atx_heading + end + + if options.blankBeforeList then + parsers.interrupting_bullets = parsers.fail + parsers.interrupting_enumerators = parsers.fail + else + parsers.interrupting_bullets = parsers.bullet(parsers.dash, true) + + parsers.bullet(parsers.asterisk, true) + + parsers.bullet(parsers.plus, true) + + parsers.interrupting_enumerators = parsers.enumerator(parsers.period, true) + + parsers.enumerator(parsers.rparent, true) + end + + if options.html then + parsers.html_interrupting = parsers.check_trail + * ( parsers.html_incomplete_open_tag + + parsers.html_incomplete_close_tag + + parsers.html_incomplete_open_special_tag + + parsers.html_comment_start + + parsers.html_cdatasection_start + + parsers.html_declaration_start + + parsers.html_instruction_start + - parsers.html_close_special_tag + - parsers.html_empty_special_tag) + else + parsers.html_interrupting = parsers.fail end parsers.EndlineExceptions = parsers.blankline -- paragraph break - + parsers.tightblocksep -- nested list + parsers.eof -- end of document + parsers.bqstart + + parsers.thematic_break_lines + + parsers.interrupting_bullets + + parsers.interrupting_enumerators + parsers.headerstart + + parsers.html_interrupting - parsers.Endline = parsers.newline + parsers.NoSoftLineBreakEndlineExceptions = parsers.EndlineExceptions + + parsers.endline = parsers.newline + * (parsers.check_minimal_indent + * -V("EndlineExceptions") + + parsers.check_optional_indent * -V("EndlineExceptions") - * parsers.spacechar^0 - / (options.hardLineBreaks and writer.hard_line_break - or writer.space) + * -parsers.starter) + * parsers.spacechar^0 + + parsers.Endline = parsers.endline + / writer.soft_line_break + + parsers.EndlineNoSub = parsers.endline + + parsers.NoSoftLineBreakEndline + = parsers.newline + * (parsers.check_minimal_indent + * -V("NoSoftLineBreakEndlineExceptions") + + parsers.check_optional_indent + * -V("NoSoftLineBreakEndlineExceptions") + * -parsers.starter) + * parsers.spacechar^0 + / writer.space + + parsers.EndlineBreak = parsers.backslash * parsers.Endline + / writer.hard_line_break parsers.OptionalIndent = parsers.spacechar^1 / writer.space - parsers.Space = parsers.spacechar^2 * parsers.Endline / writer.hard_line_break - + parsers.spacechar^1 * parsers.Endline^-1 * parsers.eof / "" + parsers.Space = parsers.spacechar^2 * parsers.Endline + / writer.hard_line_break + + parsers.spacechar^1 * parsers.Endline^-1 * parsers.eof / self.expandtabs + parsers.spacechar^1 * parsers.Endline - * parsers.optionalspace - / (options.hardLineBreaks - and writer.hard_line_break - or writer.space) - + parsers.spacechar^1 * parsers.optionalspace - / writer.space + / writer.soft_line_break + + parsers.spacechar^1 * -parsers.newline / self.expandtabs + + parsers.NoSoftLineBreakSpace + = parsers.spacechar^2 * parsers.Endline + / writer.hard_line_break + + parsers.spacechar^1 * parsers.Endline^-1 * parsers.eof / self.expandtabs + + parsers.spacechar^1 * parsers.Endline + / writer.soft_line_break + + parsers.spacechar^1 * -parsers.newline / self.expandtabs parsers.NonbreakingEndline - = parsers.newline - * -V("EndlineExceptions") - * parsers.spacechar^0 - / (options.hardLineBreaks and writer.hard_line_break - or writer.nbsp) + = parsers.endline + / writer.soft_line_break parsers.NonbreakingSpace - = parsers.spacechar^2 * parsers.Endline / writer.hard_line_break + = parsers.spacechar^2 * parsers.Endline + / writer.hard_line_break + parsers.spacechar^1 * parsers.Endline^-1 * parsers.eof / "" + parsers.spacechar^1 * parsers.Endline * parsers.optionalspace - / (options.hardLineBreaks - and writer.hard_line_break - or writer.nbsp) + / writer.soft_line_break + parsers.spacechar^1 * parsers.optionalspace / writer.nbsp - if options.underscores then - parsers.Strong = ( parsers.between(parsers.Inline, parsers.doubleasterisks, - parsers.doubleasterisks) - + parsers.between(parsers.Inline, parsers.doubleunderscores, - parsers.doubleunderscores) - ) / writer.strong - - parsers.Emph = ( parsers.between(parsers.Inline, parsers.asterisk, - parsers.asterisk) - + parsers.between(parsers.Inline, parsers.underscore, - parsers.underscore) - ) / writer.emphasis - else - parsers.Strong = ( parsers.between(parsers.Inline, parsers.doubleasterisks, - parsers.doubleasterisks) - ) / writer.strong - - parsers.Emph = ( parsers.between(parsers.Inline, parsers.asterisk, - parsers.asterisk) - ) / writer.emphasis - end - function self.auto_link_url(url, attributes) return writer.link(writer.escape(url), url, nil, attributes) end - function self.auto_link_email(email, attributes) return writer.link(writer.escape(email), "mailto:"..email, @@ -3648,77 +5556,58 @@ end = parsers.auto_link_relative_reference / self.auto_link_url - parsers.DirectLink = parsers.direct_link - / writer.link - - parsers.IndirectLink = parsers.indirect_link - / indirect_link - - -- parse a link or image (direct or indirect) - parsers.Link = parsers.DirectLink + parsers.IndirectLink - - parsers.DirectImage = parsers.direct_image - / writer.image - - parsers.IndirectImage = parsers.indirect_image - / indirect_image - - parsers.Image = parsers.DirectImage + parsers.IndirectImage - - -- avoid parsing long strings of * or _ as emph/strong - parsers.UlOrStarLine = parsers.asterisk^4 + parsers.underscore^4 - / writer.string + parsers.LinkAndEmph = Ct(parsers.link_and_emph_table) + / self.defer_link_and_emphasis_processing parsers.EscapedChar = parsers.backslash * C(parsers.escapable) / writer.string - parsers.InlineHtml = parsers.emptyelt_any / writer.inline_html_tag - + (parsers.htmlcomment / self.parser_functions.parse_inlines_no_html) - / writer.inline_html_comment - + parsers.htmlinstruction - + parsers.openelt_any / writer.inline_html_tag - + parsers.closeelt_any / writer.inline_html_tag - - parsers.HtmlEntity = parsers.hexentity / entities.hex_entity / writer.string - + parsers.decentity / entities.dec_entity / writer.string - + parsers.tagentity / entities.char_entity / writer.string - parsers.DisplayHtml = (parsers.htmlcomment / self.parser_functions.parse_blocks_nested) - / writer.block_html_comment - + parsers.emptyelt_block / writer.block_html_element - + parsers.openelt_exact("hr") / writer.block_html_element - + parsers.in_matched_block_tags / writer.block_html_element - + parsers.htmlinstruction - - parsers.Verbatim = Cs( (parsers.blanklines - * ((parsers.indentedline - parsers.blankline))^1)^1 - ) / self.expandtabs / writer.verbatim - - parsers.BlockquoteExceptions = parsers.leader * parsers.more - + parsers.blankline - - parsers.Blockquote = Cs(parsers.blockquote_body^1) - / self.parser_functions.parse_blocks_nested + parsers.InlineHtml = Cs(parsers.html_inline_comment) / writer.inline_html_comment + + Cs(parsers.html_any_empty_inline_tag + + parsers.html_inline_instruction + + parsers.html_inline_cdatasection + + parsers.html_inline_declaration + + parsers.html_any_open_inline_tag + + parsers.html_any_close_tag) + / writer.inline_html_tag + + parsers.HtmlEntity = parsers.html_entities / writer.string + parsers.DisplayHtml = Cs(parsers.check_trail + * ( parsers.html_comment + + parsers.html_special_block + + parsers.html_block + + parsers.html_any_block + + parsers.html_instruction + + parsers.html_cdatasection + + parsers.html_declaration)) + / writer.block_html_element + + parsers.indented_non_blank_line = parsers.indentedline - parsers.blankline + + parsers.Verbatim = Cs( + parsers.check_code_trail + * (parsers.line - parsers.blankline) + * ((parsers.check_minimal_blank_indent_and_full_code_trail * parsers.blankline)^0 + * ((parsers.check_minimal_indent / "") * parsers.check_code_trail + * (parsers.line - parsers.blankline))^1)^0 + ) / self.expandtabs / writer.verbatim + + parsers.Blockquote = parsers.blockquote_body / writer.blockquote - parsers.ThematicBreak = ( parsers.lineof(parsers.asterisk) - + parsers.lineof(parsers.dash) - + parsers.lineof(parsers.underscore) - ) / writer.thematic_break + parsers.ThematicBreak = parsers.thematic_break_lines + / writer.thematic_break parsers.Reference = parsers.define_reference_parser - * parsers.blankline^1 / self.register_link - parsers.Paragraph = parsers.nonindentspace * Ct(parsers.Inline^1) - * ( parsers.newline - * ( parsers.blankline^1 - + #V("EndlineExceptions") - ) - + parsers.eof) - / writer.paragraph + parsers.Paragraph = parsers.freeze_trail + * (Ct((parsers.Inline)^1) + * (parsers.newline + parsers.eof) + * parsers.unfreeze_trail + / writer.paragraph) parsers.Plain = parsers.nonindentspace * Ct(parsers.Inline^1) / writer.plain - parsers.starter = parsers.bullet + parsers.enumerator if options.taskLists then parsers.tickbox = ( parsers.ticked_box @@ -3729,43 +5618,117 @@ end parsers.tickbox = parsers.fail end - -- we use \001 as a separator between a tight list item and a - -- nested list under it. - parsers.NestedList = Cs((parsers.optionallyindentedline - - parsers.starter)^1) - / function(a) return "\001"..a end - - parsers.ListBlockLine = parsers.optionallyindentedline - - parsers.blankline - (parsers.indent^-1 - * parsers.starter) - - parsers.ListBlock = parsers.line * parsers.ListBlockLine^0 - - parsers.ListContinuationBlock = parsers.blanklines * (parsers.indent / "") - * parsers.ListBlock + parsers.list_blank = parsers.conditionally_indented_blankline + + parsers.ref_or_block_list_separated = parsers.sep_group_no_output(parsers.list_blank) + * parsers.minimally_indented_ref + + parsers.block_sep_group(parsers.list_blank) + * parsers.minimally_indented_block + + parsers.ref_or_block_non_separated = parsers.minimally_indented_ref + + (parsers.succeed / writer.interblocksep) + * parsers.minimally_indented_block + - parsers.minimally_indented_blankline + + parsers.tight_list_loop_body_pair = + parsers.create_loop_body_pair(parsers.ref_or_block_non_separated, + parsers.minimally_indented_par_or_plain_no_blank, + (parsers.succeed / writer.interblocksep), + (parsers.succeed / writer.paragraphsep)) + + parsers.loose_list_loop_body_pair = + parsers.create_loop_body_pair(parsers.ref_or_block_list_separated, + parsers.minimally_indented_par_or_plain, + parsers.block_sep_group(parsers.list_blank), + parsers.par_sep_group(parsers.list_blank)) + + parsers.tight_list_content_loop = V("Block") + * parsers.tight_list_loop_body_pair.block^0 + + (V("Paragraph") + V("Plain")) + * parsers.ref_or_block_non_separated + * parsers.tight_list_loop_body_pair.block^0 + + (V("Paragraph") + V("Plain")) + * parsers.tight_list_loop_body_pair.par^0 + + parsers.loose_list_content_loop = V("Block") + * parsers.loose_list_loop_body_pair.block^0 + + (V("Paragraph") + V("Plain")) + * parsers.ref_or_block_list_separated + * parsers.loose_list_loop_body_pair.block^0 + + (V("Paragraph") + V("Plain")) + * parsers.loose_list_loop_body_pair.par^0 + + parsers.list_item_tightness_condition = -#( parsers.list_blank^0 + * parsers.minimally_indented_ref_or_block_or_par) + * remove_indent("li") + + remove_indent("li") + * parsers.fail + + parsers.indented_content_tight = Ct( (parsers.blankline / "") + * #parsers.list_blank + * remove_indent("li") + + ( (V("Reference") + (parsers.blankline / "")) + * parsers.check_minimal_indent + * parsers.tight_list_content_loop + + (V("Reference") + (parsers.blankline / "")) + + (parsers.tickbox^-1 / writer.escape) + * parsers.tight_list_content_loop + ) + * parsers.list_item_tightness_condition + ) + + parsers.indented_content_loose = Ct( (parsers.blankline / "") + * #parsers.list_blank + + ( (V("Reference") + (parsers.blankline / "")) + * parsers.check_minimal_indent + * parsers.loose_list_content_loop + + (V("Reference") + (parsers.blankline / "")) + + (parsers.tickbox^-1 / writer.escape) + * parsers.loose_list_content_loop + ) + ) parsers.TightListItem = function(starter) - return -parsers.ThematicBreak - * (Cs(starter / "" * parsers.tickbox^-1 * parsers.ListBlock * parsers.NestedList^-1) - / self.parser_functions.parse_blocks_nested) - * -(parsers.blanklines * parsers.indent) + return -parsers.ThematicBreak + * parsers.add_indent(starter, "li") + * parsers.indented_content_tight end parsers.LooseListItem = function(starter) - return -parsers.ThematicBreak - * Cs( starter / "" * parsers.tickbox^-1 * parsers.ListBlock * Cc("\n") - * (parsers.NestedList + parsers.ListContinuationBlock^0) - * (parsers.blanklines / "\n\n") - ) / self.parser_functions.parse_blocks_nested + return -parsers.ThematicBreak + * parsers.add_indent(starter, "li") + * parsers.indented_content_loose + * remove_indent("li") end - parsers.BulletList = ( Ct(parsers.TightListItem(parsers.bullet)^1) * Cc(true) - * parsers.skipblanklines * -parsers.bullet - + Ct(parsers.LooseListItem(parsers.bullet)^1) * Cc(false) - * parsers.skipblanklines ) - / writer.bulletlist + parsers.BulletListOfType = function(bullet_type) + local bullet = parsers.bullet(bullet_type) + return ( Ct( parsers.TightListItem(bullet) + * ( (parsers.check_minimal_indent / "") + * parsers.TightListItem(bullet) + )^0 + ) + * Cc(true) + * -#( (parsers.list_blank^0 / "") + * parsers.check_minimal_indent + * (bullet - parsers.ThematicBreak) + ) + + Ct( parsers.LooseListItem(bullet) + * ( (parsers.list_blank^0 / "") + * (parsers.check_minimal_indent / "") + * parsers.LooseListItem(bullet) + )^0 + ) + * Cc(false) + ) / writer.bulletlist + end + + parsers.BulletList = parsers.BulletListOfType(parsers.dash) + + parsers.BulletListOfType(parsers.asterisk) + + parsers.BulletListOfType(parsers.plus) - local function ordered_list(items,tight,startnum) + local function ordered_list(items,tight,starter) + local startnum = starter[2][1] if options.startNumber then startnum = tonumber(startnum) or 1 -- fallback for '#' if startnum ~= nil then @@ -3777,33 +5740,64 @@ end return writer.orderedlist(items,tight,startnum) end - parsers.OrderedList = Cg(parsers.enumerator, "listtype") * - ( Ct(parsers.TightListItem(Cb("listtype")) - * parsers.TightListItem(parsers.enumerator)^0) - * Cc(true) * parsers.skipblanklines * -parsers.enumerator - + Ct(parsers.LooseListItem(Cb("listtype")) - * parsers.LooseListItem(parsers.enumerator)^0) - * Cc(false) * parsers.skipblanklines - ) * Cb("listtype") / ordered_list + parsers.OrderedListOfType = function(delimiter_type) + local enumerator = parsers.enumerator(delimiter_type) + return Cg(enumerator, "listtype") + * (Ct( parsers.TightListItem(Cb("listtype")) + * ((parsers.check_minimal_indent / "") * parsers.TightListItem(enumerator))^0) + * Cc(true) + * -#((parsers.list_blank^0 / "") + * parsers.check_minimal_indent * enumerator) + + Ct( parsers.LooseListItem(Cb("listtype")) + * ((parsers.list_blank^0 / "") + * (parsers.check_minimal_indent / "") * parsers.LooseListItem(enumerator))^0) + * Cc(false) + ) * Ct(Cb("listtype")) / ordered_list + end + + parsers.OrderedList = parsers.OrderedListOfType(parsers.period) + + parsers.OrderedListOfType(parsers.rparent) parsers.Blank = parsers.blankline / "" + V("Reference") - + (parsers.tightblocksep / "\n") + function parsers.parse_heading_text(s) + local inlines = self.parser_functions.parse_inlines(s) + local flatten_inlines = self.writer.flatten_inlines + self.writer.flatten_inlines = true + local flat_text = self.parser_functions.parse_inlines(s) + flat_text = util.rope_to_string(flat_text) + self.writer.flatten_inlines = flatten_inlines + return {flat_text, inlines} + end + -- parse atx header - parsers.AtxHeading = Cg(parsers.heading_start, "level") - * parsers.optionalspace - * (C(parsers.line) + parsers.AtxHeading = parsers.check_trail_no_rem + * Cg(parsers.heading_start, "level") + * ((C( parsers.optionalspace + * parsers.hash^0 + * parsers.optionalspace + * parsers.newline) + + parsers.spacechar^1 + * C(parsers.line)) / strip_atx_end - / self.parser_functions.parse_inlines) + / parsers.parse_heading_text) * Cb("level") / writer.heading - parsers.SetextHeading = #(parsers.line * S("=-")) - * Ct(parsers.linechar^1 - / self.parser_functions.parse_inlines) - * parsers.newline - * parsers.heading_level - * parsers.optionalspace + parsers.heading_line = parsers.linechar^1 + - parsers.thematic_break_lines + + parsers.heading_text = parsers.heading_line + * ((V("Endline") / "\n") * (parsers.heading_line - parsers.heading_level))^0 + * parsers.newline^-1 + + parsers.SetextHeading = parsers.freeze_trail * parsers.check_trail_no_rem + * #(parsers.heading_text + * parsers.check_minimal_indent * parsers.check_trail * parsers.heading_level) + * Cs(parsers.heading_text) + / parsers.parse_heading_text + * parsers.check_minimal_indent_and_trail * parsers.heading_level * parsers.newline + * parsers.unfreeze_trail / writer.heading parsers.Heading = parsers.AtxHeading + parsers.SetextHeading @@ -3861,12 +5855,32 @@ end Blocks = V("InitializeState") * ( V("ExpectedJekyllData") - * (V("Blank")^0 / writer.interblocksep))^-1 + * (V("Blank")^0 / writer.interblocksep) + )^-1 * V("Blank")^0 - * V("Block")^-1 - * ( V("Blank")^0 / writer.interblocksep - * V("Block"))^0 - * V("Blank")^0 * parsers.eof, + * ( V("Block") + * ( V("Blank")^0 * parsers.eof + + ( V("Blank")^2 / writer.paragraphsep + + V("Blank")^0 / writer.interblocksep + ) + ) + + ( V("Paragraph") + V("Plain") ) + * ( V("Blank")^0 * parsers.eof + + ( V("Blank")^2 / writer.paragraphsep + + V("Blank")^0 / writer.interblocksep + ) + ) + * V("Block") + * ( V("Blank")^0 * parsers.eof + + ( V("Blank")^2 / writer.paragraphsep + + V("Blank")^0 / writer.interblocksep + ) + ) + + ( V("Paragraph") + V("Plain") ) + * ( V("Blank")^0 * parsers.eof + + V("Blank")^0 / writer.paragraphsep + ) + )^0, ExpectedJekyllData = parsers.fail, @@ -3878,23 +5892,25 @@ end ThematicBreak = parsers.ThematicBreak, BulletList = parsers.BulletList, OrderedList = parsers.OrderedList, - Heading = parsers.Heading, DisplayHtml = parsers.DisplayHtml, + Heading = parsers.Heading, Paragraph = parsers.Paragraph, Plain = parsers.Plain, EndlineExceptions = parsers.EndlineExceptions, - BlockquoteExceptions = parsers.BlockquoteExceptions, + NoSoftLineBreakEndlineExceptions + = parsers.NoSoftLineBreakEndlineExceptions, Str = parsers.Str, Space = parsers.Space, + NoSoftLineBreakSpace = parsers.NoSoftLineBreakSpace, OptionalIndent = parsers.OptionalIndent, Endline = parsers.Endline, - UlOrStarLine = parsers.UlOrStarLine, - Strong = parsers.Strong, - Emph = parsers.Emph, - Link = parsers.Link, - Image = parsers.Image, + EndlineNoSub = parsers.EndlineNoSub, + NoSoftLineBreakEndline + = parsers.NoSoftLineBreakEndline, + EndlineBreak = parsers.EndlineBreak, + LinkAndEmph = parsers.LinkAndEmph, Code = parsers.Code, AutoLinkUrl = parsers.AutoLinkUrl, AutoLinkEmail = parsers.AutoLinkEmail, @@ -3947,9 +5963,14 @@ end self.add_special_character("!") self.add_special_character("\\") self.initialize_named_group = function(name, value) + local pattern = Ct("") + if value ~= nil then + pattern = pattern / value + end syntax.InitializeState = syntax.InitializeState - * Cg(Ct("") / value, name) + * Cg(pattern, name) end + self.initialize_named_group("indent_info") for _, extension in ipairs(extensions) do current_extension_name = extension.name extension.extend_writer(writer) @@ -4004,11 +6025,6 @@ end assert(output_file:write(output)) assert(output_file:close()) end - walkable_syntax["IndentedInline"] = util.table_copy( - walkable_syntax["Inline"]) - self.insert_pattern( - "IndentedInline instead of Space", - "OptionalIndent") for lhs, rule in pairs(walkable_syntax) do syntax[lhs] = parsers.fail for _, rhs in ipairs(rule) do @@ -4056,6 +6072,15 @@ end syntax.AutoLinkRelativeReference = parsers.fail end + if options.contentLevel == "inline" then + syntax[1] = "Inlines" + syntax.Inlines = V("InitializeState") + * parsers.Inline^0 + * ( parsers.spacing^0 + * parsers.eof / "") + syntax.Space = parsers.Space + parsers.blankline / writer.space + end + local blocks_nested_t = util.table_copy(syntax) blocks_nested_t.ExpectedJekyllData = parsers.fail parsers.blocks_nested = Ct(blocks_nested_t) @@ -4070,10 +6095,6 @@ end * parsers.eof / "") parsers.inlines = Ct(inlines_t) - local inlines_no_link_t = util.table_copy(inlines_t) - inlines_no_link_t.Link = parsers.fail - parsers.inlines_no_link = Ct(inlines_no_link_t) - local inlines_no_inline_note_t = util.table_copy(inlines_t) inlines_no_inline_note_t.InlineNote = parsers.fail parsers.inlines_no_inline_note = Ct(inlines_no_inline_note_t) @@ -4088,6 +6109,11 @@ end inlines_nbsp_t.Endline = parsers.NonbreakingEndline inlines_nbsp_t.Space = parsers.NonbreakingSpace parsers.inlines_nbsp = Ct(inlines_nbsp_t) + + local inlines_no_link_or_emphasis_t = util.table_copy(inlines_t) + inlines_no_link_or_emphasis_t.LinkAndEmph = parsers.fail + inlines_no_link_or_emphasis_t.EndlineExceptions = parsers.EndlineExceptions - parsers.eof + parsers.inlines_no_link_or_emphasis = Ct(inlines_no_link_or_emphasis_t) return function(input) input = input:gsub("\r\n?", "\n") if input:sub(-1) ~= "\n" then @@ -4145,6 +6171,7 @@ M.extensions.bracketed_spans = function() name = "built-in bracketed_spans syntax extension", extend_writer = function(self) function self.span(s, attr) + if self.flatten_inlines then return s end return {"\\markdownRendererBracketedSpanAttributeContextBegin", self.attributes(attr), s, @@ -4154,13 +6181,25 @@ M.extensions.bracketed_spans = function() local parsers = self.parsers local writer = self.writer - local Span = parsers.between(parsers.Inline, - parsers.lbracket, - parsers.rbracket) + local span_label = parsers.lbracket + * (Cs((parsers.alphanumeric^1 + + parsers.inticks + + parsers.autolink + + V("InlineHtml") + + ( parsers.backslash * parsers.backslash) + + ( parsers.backslash * (parsers.lbracket + parsers.rbracket) + + V("Space") + V("Endline") + + (parsers.any + - (parsers.newline + parsers.lbracket + parsers.rbracket + + parsers.blankline^2))))^1) + / self.parser_functions.parse_inlines) + * parsers.rbracket + + local Span = span_label * Ct(parsers.attributes) / writer.span - self.insert_pattern("Inline after Emph", + self.insert_pattern("Inline before LinkAndEmph", Span, "Span") end } @@ -4170,11 +6209,24 @@ M.extensions.citations = function(citation_nbsps) name = "built-in citations syntax extension", extend_writer = function(self) function self.citations(text_cites, cites) - local buffer = {"\\markdownRenderer", text_cites and "TextCite" or "Cite", - "{", #cites, "}"} - for _,cite in ipairs(cites) do - buffer[#buffer+1] = {cite.suppress_author and "-" or "+", "{", - cite.prenote or "", "}{", cite.postnote or "", "}{", cite.name, "}"} + local buffer = {} + if self.flatten_inlines then + for _,cite in ipairs(cites) do + if cite.prenote then + table.insert(buffer, {cite.prenote, " "}) + end + table.insert(buffer, cite.name) + if cite.postnote then + table.insert(buffer, {" ", cite.postnote}) + end + end + else + table.insert(buffer, {"\\markdownRenderer", text_cites and "TextCite" or "Cite", + "{", #cites, "}"}) + for _,cite in ipairs(cites) do + table.insert(buffer, {cite.suppress_author and "-" or "+", "{", + cite.prenote or "", "}{", cite.postnote or "", "}{", cite.name, "}"}) + end end return buffer end @@ -4201,42 +6253,51 @@ M.extensions.citations = function(citation_nbsps) = Cs((parsers.alphanumeric^1 + parsers.bracketed + parsers.inticks + + parsers.autolink + + V("InlineHtml") + + V("Space") + V("Endline") + (parsers.anyescaped - - (parsers.rbracket + parsers.blankline^2)) + - (parsers.newline + parsers.rbracket + parsers.blankline^2)) - (parsers.spnl * parsers.dash^-1 * parsers.at))^0) local citation_body_postnote = Cs((parsers.alphanumeric^1 + parsers.bracketed + parsers.inticks + + parsers.autolink + + V("InlineHtml") + + V("Space") + V("Endline") + (parsers.anyescaped - - (parsers.rbracket + parsers.semicolon + - (parsers.newline + parsers.rbracket + parsers.semicolon + parsers.blankline^2)) - (parsers.spnl * parsers.rbracket))^0) local citation_body_chunk = citation_body_prenote - * parsers.spnl * citation_name + * parsers.spnlc * citation_name * (parsers.internal_punctuation - parsers.semicolon)^-1 - * parsers.spnl * citation_body_postnote + * parsers.spnlc * citation_body_postnote local citation_body = citation_body_chunk - * (parsers.semicolon * parsers.spnl + * (parsers.semicolon * parsers.spnlc * citation_body_chunk)^0 local citation_headless_body_postnote = Cs((parsers.alphanumeric^1 + parsers.bracketed + parsers.inticks + + parsers.autolink + + V("InlineHtml") + + V("Space") + V("Endline") + (parsers.anyescaped - - (parsers.rbracket + parsers.at + - (parsers.newline + parsers.rbracket + parsers.at + parsers.semicolon + parsers.blankline^2)) - (parsers.spnl * parsers.rbracket))^0) local citation_headless_body = citation_headless_body_postnote - * (parsers.sp * parsers.semicolon * parsers.spnl + * (parsers.sp * parsers.semicolon * parsers.spnlc * citation_body_chunk)^0 local citations @@ -4265,10 +6326,10 @@ M.extensions.citations = function(citation_nbsps) end local TextCitations - = Ct((parsers.spnl + = Ct((parsers.spnlc * Cc("") * citation_name - * ((parsers.spnl + * ((parsers.spnlc * parsers.lbracket * citation_headless_body * parsers.rbracket) + Cc("")))^1) @@ -4277,7 +6338,7 @@ M.extensions.citations = function(citation_nbsps) end local ParenthesizedCitations - = Ct((parsers.spnl + = Ct((parsers.spnlc * parsers.lbracket * citation_body * parsers.rbracket)^1) @@ -4287,7 +6348,7 @@ M.extensions.citations = function(citation_nbsps) local Citations = TextCitations + ParenthesizedCitations - self.insert_pattern("Inline after Emph", + self.insert_pattern("Inline before LinkAndEmph", Citations, "Citations") self.add_special_character("@") @@ -4381,6 +6442,7 @@ M.extensions.content_blocks = function(language_map) = (parsers.less * Cs((parsers.anyescaped - parsers.more + - parsers.spacing - #(parsers.period * onlineimagesuffix * parsers.more @@ -4413,7 +6475,7 @@ M.extensions.content_blocks = function(language_map) * Cc("localfile") local ContentBlock - = parsers.leader + = parsers.check_trail_no_rem * (localfilepath + onlineimageurl) * contentblock_tail / writer.contentblock @@ -4457,18 +6519,26 @@ M.extensions.definition_lists = function(tight_lists) local defstartchar = S("~:") - local defstart = ( defstartchar * #parsers.spacing + local defstart = parsers.check_trail_length(0) * defstartchar * #parsers.spacing * (parsers.tab + parsers.space^-3) - + parsers.space * defstartchar * #parsers.spacing + + parsers.check_trail_length(1) * defstartchar * #parsers.spacing * (parsers.tab + parsers.space^-2) - + parsers.space * parsers.space * defstartchar - * #parsers.spacing + + parsers.check_trail_length(2) * defstartchar * #parsers.spacing * (parsers.tab + parsers.space^-1) - + parsers.space * parsers.space * parsers.space - * defstartchar * #parsers.spacing - ) + + parsers.check_trail_length(3) * defstartchar * #parsers.spacing + + local indented_line = (parsers.check_minimal_indent / "") * parsers.check_code_trail * parsers.line - local dlchunk = Cs(parsers.line * (parsers.indentedline - parsers.blankline)^0) + local blank = parsers.check_minimal_blank_indent_and_any_trail * parsers.optionalspace * parsers.newline + + local dlchunk = Cs(parsers.line * (indented_line - blank)^0) + + local indented_blocks = function(bl) + return Cs( bl + * (blank^1 * (parsers.check_minimal_indent / "") + * parsers.check_code_trail * -parsers.blankline * bl)^0 + * (blank^1 + parsers.eof)) + end local function definition_list_item(term, defs, _) return { term = self.parser_functions.parse_inlines(term), @@ -4476,22 +6546,22 @@ M.extensions.definition_lists = function(tight_lists) end local DefinitionListItemLoose - = C(parsers.line) * parsers.skipblanklines - * Ct((defstart - * parsers.indented_blocks(dlchunk) - / self.parser_functions.parse_blocks_nested)^1) + = C(parsers.line) * blank^0 + * Ct((parsers.check_minimal_indent * (defstart + * indented_blocks(dlchunk) + / self.parser_functions.parse_blocks_nested))^1) * Cc(false) / definition_list_item local DefinitionListItemTight = C(parsers.line) - * Ct((defstart * dlchunk - / self.parser_functions.parse_blocks_nested)^1) + * Ct((parsers.check_minimal_indent * (defstart * dlchunk + / self.parser_functions.parse_blocks_nested))^1) * Cc(true) / definition_list_item local DefinitionList = ( Ct(DefinitionListItemLoose^1) * Cc(false) + Ct(DefinitionListItemTight^1) - * (parsers.skipblanklines + * (blank^0 * -DefinitionListItemLoose * Cc(true)) ) / writer.definitionlist @@ -4511,8 +6581,10 @@ M.extensions.fancy_lists = function() local buffer = {} local num = startnum for _,item in ipairs(items) do - buffer[#buffer + 1] = self.fancyitem(item,num) - if num ~= nil then + if item ~= "" then + buffer[#buffer + 1] = self.fancyitem(item,num) + end + if num ~= nil and item ~= "" then num = num + 1 end end @@ -4540,52 +6612,101 @@ M.extensions.fancy_lists = function() local options = self.options local writer = self.writer - local label = parsers.dig + parsers.letter - local numdelim = parsers.period + parsers.rparent - local enumerator = C(label^3 * numdelim) * #parsers.spacing - + C(label^2 * numdelim) * #parsers.spacing - * (parsers.tab + parsers.space^1) - + C(label * numdelim) * #parsers.spacing - * (parsers.tab + parsers.space^-2) - + parsers.space * C(label^2 * numdelim) - * #parsers.spacing - + parsers.space * C(label * numdelim) - * #parsers.spacing - * (parsers.tab + parsers.space^-1) - + parsers.space * parsers.space * C(label^1 - * numdelim) * #parsers.spacing - local starter = parsers.bullet + enumerator + local function combine_markers_and_delims(markers, delims) + local markers_table = {} + for _,marker in ipairs(markers) do + local start_marker + local continuation_marker + if type(marker) == "table" then + start_marker = marker[1] + continuation_marker = marker[2] + else + start_marker = marker + continuation_marker = marker + end + for _,delim in ipairs(delims) do + table.insert(markers_table, {start_marker, continuation_marker, delim}) + end + end + return markers_table + end - local NestedList = Cs((parsers.optionallyindentedline - - starter)^1) - / function(a) return "\001"..a end + local function join_table_with_func(func, markers_table) + local pattern = func(table.unpack(markers_table[1])) + for i = 2, #markers_table do + pattern = pattern + func(table.unpack(markers_table[i])) + end + return pattern + end + + local lowercase_letter_marker = R("az") + local uppercase_letter_marker = R("AZ") + + local roman_marker = function(chars) + local m, d, c = P(chars[1]), P(chars[2]), P(chars[3]) + local l, x, v, i = P(chars[4]), P(chars[5]), P(chars[6]), P(chars[7]) + return m^-3 + * (c*m + c*d + d^-1 * c^-3) + * (x*c + x*l + l^-1 * x^-3) + * (i*x + i*v + v^-1 * i^-3) + end - local ListBlockLine = parsers.optionallyindentedline - - parsers.blankline - (parsers.indent^-1 - * starter) + local lowercase_roman_marker = roman_marker({"m", "d", "c", "l", "x", "v", "i"}) + local uppercase_roman_marker = roman_marker({"M", "D", "C", "L", "X", "V", "I"}) - local ListBlock = parsers.line * ListBlockLine^0 + local lowercase_opening_roman_marker = P("i") + local uppercase_opening_roman_marker = P("I") - local ListContinuationBlock = parsers.blanklines * (parsers.indent / "") - * ListBlock + local digit_marker = parsers.dig * parsers.dig^-8 + + local markers = { + {lowercase_opening_roman_marker, lowercase_roman_marker}, + {uppercase_opening_roman_marker, uppercase_roman_marker}, + lowercase_letter_marker, + uppercase_letter_marker, + lowercase_roman_marker, + uppercase_roman_marker, + digit_marker + } + + local delims = { + parsers.period, + parsers.rparent + } + + local markers_table = combine_markers_and_delims(markers, delims) + + local function enumerator(start_marker, _, delimiter_type, interrupting) + local delimiter_range + local allowed_end + if interrupting then + delimiter_range = P("1") + allowed_end = C(parsers.spacechar^1) * #parsers.linechar + else + delimiter_range = start_marker + allowed_end = C(parsers.spacechar^1) + #(parsers.newline + parsers.eof) + end + + return parsers.check_trail + * Ct(C(delimiter_range) * C(delimiter_type)) + * allowed_end + end + + local starter = join_table_with_func(enumerator, markers_table) local TightListItem = function(starter) - return -parsers.ThematicBreak - * (Cs(starter / "" * parsers.tickbox^-1 * ListBlock * NestedList^-1) - / self.parser_functions.parse_blocks_nested) - * -(parsers.blanklines * parsers.indent) + return parsers.add_indent(starter, "li") + * parsers.indented_content_tight end local LooseListItem = function(starter) - return -parsers.ThematicBreak - * Cs( starter / "" * parsers.tickbox^-1 * ListBlock * Cc("\n") - * (NestedList + ListContinuationBlock^0) - * (parsers.blanklines / "\n\n") - ) / self.parser_functions.parse_blocks_nested + return parsers.add_indent(starter, "li") + * parsers.indented_content_loose + * remove_indent("li") end local function roman2number(roman) - local romans = { ["L"] = 50, ["X"] = 10, ["V"] = 5, ["I"] = 1 } + local romans = { ["M"] = 1000, ["D"] = 500, ["C"] = 100, ["L"] = 50, ["X"] = 10, ["V"] = 5, ["I"] = 1 } local numeral = 0 local i = 1 @@ -4604,8 +6725,7 @@ M.extensions.fancy_lists = function() return numeral end - local function sniffstyle(itemprefix) - local numstr, delimend = itemprefix:match("^([A-Za-z0-9]*)([.)]*)") + local function sniffstyle(numstr, delimend) local numdelim if delimend == ")" then numdelim = "OneParen" @@ -4614,46 +6734,72 @@ M.extensions.fancy_lists = function() else numdelim = "Default" end - numstr = numstr or itemprefix local num - num = numstr:match("^([IVXL]+)") + num = numstr:match("^([I])$") if num then return roman2number(num), "UpperRoman", numdelim end - num = numstr:match("^([ivxl]+)") + num = numstr:match("^([i])$") if num then return roman2number(string.upper(num)), "LowerRoman", numdelim end - num = numstr:match("^([A-Z])") + num = numstr:match("^([A-Z])$") if num then return string.byte(num) - string.byte("A") + 1, "UpperAlpha", numdelim end - num = numstr:match("^([a-z])") + num = numstr:match("^([a-z])$") if num then return string.byte(num) - string.byte("a") + 1, "LowerAlpha", numdelim end + num = numstr:match("^([IVXLCDM]+)") + if num then + return roman2number(num), "UpperRoman", numdelim + end + num = numstr:match("^([ivxlcdm]+)") + if num then + return roman2number(string.upper(num)), "LowerRoman", numdelim + end return math.floor(tonumber(numstr) or 1), "Decimal", numdelim end local function fancylist(items,tight,start) - local startnum, numstyle, numdelim = sniffstyle(start) + local startnum, numstyle, numdelim = sniffstyle(start[2][1], start[2][2]) return writer.fancylist(items,tight, - options.startNumber and startnum, + options.startNumber and startnum or 1, numstyle or "Decimal", numdelim or "Default") end - local FancyList = Cg(enumerator, "listtype") * - ( Ct(TightListItem(Cb("listtype")) - * TightListItem(enumerator)^0) - * Cc(true) * parsers.skipblanklines * -enumerator - + Ct(LooseListItem(Cb("listtype")) - * LooseListItem(enumerator)^0) - * Cc(false) * parsers.skipblanklines - ) * Cb("listtype") / fancylist + local FancyListOfType = function(start_marker, continuation_marker, delimiter_type) + local enumerator_start = enumerator(start_marker, continuation_marker, delimiter_type) + local enumerator_cont = enumerator(continuation_marker, continuation_marker, delimiter_type) + return Cg(enumerator_start, "listtype") + * (Ct( TightListItem(Cb("listtype")) + * ((parsers.check_minimal_indent / "") * TightListItem(enumerator_cont))^0) + * Cc(true) + * -#((parsers.conditionally_indented_blankline^0 / "") + * parsers.check_minimal_indent * enumerator_cont) + + Ct( LooseListItem(Cb("listtype")) + * ((parsers.conditionally_indented_blankline^0 / "") + * (parsers.check_minimal_indent / "") * LooseListItem(enumerator_cont))^0) + * Cc(false) + ) * Ct(Cb("listtype")) / fancylist + end + + local FancyList = join_table_with_func(FancyListOfType, markers_table) + + local Endline = parsers.newline + * (parsers.check_minimal_indent + * -parsers.EndlineExceptions + + parsers.check_optional_indent + * -parsers.EndlineExceptions + * -starter) + * parsers.spacechar^0 + / writer.soft_line_break self.update_rule("OrderedList", FancyList) + self.update_rule("Endline", Endline) end } end @@ -4675,7 +6821,7 @@ M.extensions.fenced_code = function(blank_before_code_fence, end local name = util.cache_verbatim(options.cacheDir, s) table.insert(buf, {"\\markdownRendererInputFencedCode{", - name,"}{",self.string(i),"}"}) + name,"}{",self.string(i),"}{",self.infostring(i),"}"}) if attr ~= nil then table.insert(buf, "\\markdownRendererFencedCodeAttributeContextEnd") end @@ -4699,18 +6845,52 @@ M.extensions.fenced_code = function(blank_before_code_fence, return #a >= #b and i end - local tilde_infostring - = C((parsers.linechar - - (parsers.spacechar^1 * parsers.newline))^0) + local function strip_enclosing_whitespaces(str) + return str:gsub("^%s*(.-)%s*$", "%1") + end + + local tilde_infostring = Cs(Cs((V("HtmlEntity") + + parsers.anyescaped + - parsers.newline)^0) + / strip_enclosing_whitespaces) - local backtick_infostring - = C((parsers.linechar - - (parsers.backtick - + parsers.spacechar^1 * parsers.newline))^0) + local backtick_infostring = Cs(Cs((V("HtmlEntity") + + (-#(parsers.backslash * parsers.backtick) * parsers.anyescaped) + - parsers.newline + - parsers.backtick)^0) + / strip_enclosing_whitespaces) local fenceindent + + local function has_trail(indent_table) + return indent_table ~= nil and + indent_table.trail ~= nil and + next(indent_table.trail) ~= nil + end + + local function has_indents(indent_table) + return indent_table ~= nil and + indent_table.indents ~= nil and + next(indent_table.indents) ~= nil + end + + local function get_last_indent_name(indent_table) + if has_indents(indent_table) then + return indent_table.indents[#indent_table.indents].name + end + end + + local function count_fenced_start_indent(_, _, indent_table, trail) + local last_indent_name = get_last_indent_name(indent_table) + fenceindent = 0 + if last_indent_name ~= "li" then + fenceindent = #trail + end + return true + end + local fencehead = function(char, infostring) - return C(parsers.nonindentspace) / function(s) fenceindent = #s end + return Cmt(Cb("indent_info") * parsers.check_trail, count_fenced_start_indent) * Cg(char^3, "fencelength") * parsers.optionalspace * infostring @@ -4718,52 +6898,69 @@ M.extensions.fenced_code = function(blank_before_code_fence, end local fencetail = function(char) - return parsers.nonindentspace + return parsers.check_trail_no_rem * Cmt(C(char^3) * Cb("fencelength"), captures_geq_length) * parsers.optionalspace * (parsers.newline + parsers.eof) + parsers.eof end - local fencedline = function(char) - return C(parsers.line - fencetail(char)) - / function(s) - local i = 1 - local remaining = fenceindent - while true do - local c = s:sub(i, i) - if c == " " and remaining > 0 then - remaining = remaining - 1 - i = i + 1 - elseif c == "\t" and remaining > 3 then - remaining = remaining - 4 - i = i + 1 - else - break - end - end - return s:sub(i) - end + local function process_fenced_line(s, i, indent_table, line_content, is_blank) -- luacheck: ignore s i + local remainder = "" + if has_trail(indent_table) then + remainder = indent_table.trail.internal_remainder + end + + if is_blank and get_last_indent_name(indent_table) == "li" then + remainder = "" + end + + local str = remainder .. line_content + local index = 1 + local remaining = fenceindent + + while true do + local c = str:sub(index, index) + if c == " " and remaining > 0 then + remaining = remaining - 1 + index = index + 1 + elseif c == "\t" and remaining > 3 then + remaining = remaining - 4 + index = index + 1 + else + break + end + end + + return true, str:sub(index) end + local fencedline = function(char) + return Cmt(Cb("indent_info") * C(parsers.line - fencetail(char)) * Cc(false), process_fenced_line) + end + + local blankfencedline = Cmt(Cb("indent_info") * C(parsers.blankline) * Cc(true), process_fenced_line) + local TildeFencedCode = fencehead(parsers.tilde, tilde_infostring) - * Cs(fencedline(parsers.tilde)^0) - * fencetail(parsers.tilde) + * Cs(((parsers.check_minimal_blank_indent / "") * blankfencedline + + (parsers.check_minimal_indent / "") * fencedline(parsers.tilde))^0) + * ((parsers.check_minimal_indent / "") * fencetail(parsers.tilde) + parsers.succeed) local BacktickFencedCode = fencehead(parsers.backtick, backtick_infostring) - * Cs(fencedline(parsers.backtick)^0) - * fencetail(parsers.backtick) + * Cs(((parsers.check_minimal_blank_indent / "") * blankfencedline + + (parsers.check_minimal_indent / "") * fencedline(parsers.backtick))^0) + * ((parsers.check_minimal_indent / "") * fencetail(parsers.backtick) + parsers.succeed) - local infostring_with_attributes - = Ct(C((parsers.linechar - - ( parsers.optionalspace - * parsers.attributes))^0) - * parsers.optionalspace - * Ct(parsers.attributes)) + local infostring_with_attributes + = Ct(C((parsers.linechar + - ( parsers.optionalspace + * parsers.attributes))^0) + * parsers.optionalspace + * Ct(parsers.attributes)) local FencedCode - = (TildeFencedCode + BacktickFencedCode) + = ((TildeFencedCode + BacktickFencedCode) / function(infostring, code) local expanded_code = self.expandtabs(code) @@ -4784,7 +6981,7 @@ M.extensions.fenced_code = function(blank_before_code_fence, end end return writer.fencedCode(expanded_code, infostring, attr) - end + end) self.insert_pattern("Block after Verbatim", FencedCode, "FencedCode") @@ -4816,7 +7013,7 @@ M.extensions.fenced_divs = function(blank_before_div_fence) function self.div_begin(attributes) local start_output = {"\\markdownRendererFencedDivAttributeContextBegin\n", self.attributes(attributes)} - local end_output = {"\n\\markdownRendererFencedDivAttributeContextEnd "} + local end_output = {"\\markdownRendererFencedDivAttributeContextEnd "} return self.push_attributes("div", attributes, start_output, end_output) end function self.div_end() @@ -4856,6 +7053,31 @@ M.extensions.fenced_divs = function(blank_before_div_fence) , "div_level") end + local non_fenced_div_block = parsers.check_minimal_indent * V("Block") + - parsers.check_minimal_indent_and_trail * fenced_div_end + + local non_fenced_div_paragraph = parsers.check_minimal_indent * V("Paragraph") + - parsers.check_minimal_indent_and_trail * fenced_div_end + + local blank = parsers.minimally_indented_blank + + local block_separated = parsers.block_sep_group(blank) + * non_fenced_div_block + + local loop_body_pair = parsers.create_loop_body_pair(block_separated, + non_fenced_div_paragraph, + parsers.block_sep_group(blank), + parsers.par_sep_group(blank)) + + local content_loop = ( non_fenced_div_block + * loop_body_pair.block^0 + + non_fenced_div_paragraph + * block_separated + * loop_body_pair.block^0 + + non_fenced_div_paragraph + * loop_body_pair.par^0) + * blank^0 + local FencedDiv = fenced_div_begin / function (infostring) local attr = lpeg.match(Ct(parsers.attributes), infostring) @@ -4867,14 +7089,9 @@ M.extensions.fenced_divs = function(blank_before_div_fence) / writer.div_begin * increment_div_level(1) * parsers.skipblanklines - * Ct( (V("Block") - fenced_div_end)^-1 - * ( parsers.blanklines - / function() - return writer.interblocksep - end - * (V("Block") - fenced_div_end))^0) - * parsers.skipblanklines - * fenced_div_end * increment_div_level(-1) + * Ct(content_loop) + * parsers.minimally_indented_blank^0 + * parsers.check_minimal_indent_and_trail * fenced_div_end * increment_div_level(-1) * (Cc("") / writer.div_end) self.insert_pattern("Block after Verbatim", @@ -4890,13 +7107,6 @@ M.extensions.fenced_divs = function(blank_before_div_fence) local is_inside_div = Cmt(Cb("div_level"), check_div_level) local fencestart = is_inside_div * fenced_div_end - self.update_rule("BlockquoteExceptions", function(previous_pattern) - if previous_pattern == nil then - previous_pattern = parsers.BlockquoteExceptions - end - return previous_pattern + fencestart - end) - if not blank_before_div_fence then self.update_rule("EndlineExceptions", function(previous_pattern) if previous_pattern == nil then @@ -4916,47 +7126,58 @@ M.extensions.header_attributes = function() local parsers = self.parsers local writer = self.writer + local function strip_atx_end(s) + return s:gsub("%s+#*%s*$","") + end + local AtxHeading = Cg(parsers.heading_start, "level") * parsers.optionalspace * (C(((parsers.linechar - - ((parsers.hash^1 + - (parsers.attributes * parsers.optionalspace - * parsers.attributes^-1 - + parsers.attributes) - * parsers.optionalspace - * parsers.newline)) - * (parsers.linechar - - parsers.hash - - parsers.lbrace)^0)^1) - / self.parser_functions.parse_inlines) + * parsers.newline)) + * (parsers.linechar + - parsers.lbrace)^0)^1) + / strip_atx_end + / parsers.parse_heading_text) * Cg(Ct(parsers.newline - + (parsers.hash^1 + + (parsers.attributes * parsers.optionalspace - * parsers.attributes^-1 - + parsers.attributes) - * parsers.optionalspace - * parsers.newline), "attributes") + * parsers.newline)), "attributes") * Cb("level") * Cb("attributes") / writer.heading - local SetextHeading = #(parsers.line * S("=-")) - * (C(((parsers.linechar - - (parsers.attributes - * parsers.optionalspace - * parsers.newline)) - * (parsers.linechar - - parsers.lbrace)^0)^1) - / self.parser_functions.parse_inlines) - * Cg(Ct(parsers.newline - + (parsers.attributes - * parsers.optionalspace - * parsers.newline)), "attributes") - * parsers.heading_level - * Cb("attributes") - * parsers.optionalspace - * parsers.newline - / writer.heading + local function strip_trailing_spaces(s) + return s:gsub("%s*$","") + end + + local heading_line = (parsers.linechar + - (parsers.attributes + * parsers.optionalspace + * parsers.newline))^1 + - parsers.thematic_break_lines + + local heading_text = heading_line + * ((V("Endline") / "\n") * (heading_line - parsers.heading_level))^0 + * parsers.newline^-1 + + local SetextHeading = parsers.freeze_trail * parsers.check_trail_no_rem + * #(heading_text + * (parsers.attributes + * parsers.optionalspace + * parsers.newline)^-1 + * parsers.check_minimal_indent * parsers.check_trail * parsers.heading_level) + * Cs(heading_text) / strip_trailing_spaces + / parsers.parse_heading_text + * Cg(Ct((parsers.attributes + * parsers.optionalspace + * parsers.newline)^-1), "attributes") + * parsers.check_minimal_indent_and_trail * parsers.heading_level + * Cb("attributes") + * parsers.newline + * parsers.unfreeze_trail + / writer.heading local Heading = AtxHeading + SetextHeading self.update_rule("Heading", Heading) @@ -5018,95 +7239,55 @@ M.extensions.line_blocks = function() end } end +M.extensions.mark = function() + return { + name = "built-in mark syntax extension", + extend_writer = function(self) + function self.mark(s) + if self.flatten_inlines then return s end + return {"\\markdownRendererMark{", s, "}"} + end + end, extend_reader = function(self) + local parsers = self.parsers + local writer = self.writer + + local doubleequals = P("==") + + local Mark = parsers.between(V("Inline"), doubleequals, doubleequals) + / function (inlines) return writer.mark(inlines) end + + self.add_special_character("=") + self.insert_pattern("Inline before LinkAndEmph", + Mark, "Mark") + end + } +end M.extensions.link_attributes = function() return { name = "built-in link_attributes syntax extension", extend_writer = function() end, extend_reader = function(self) local parsers = self.parsers - local writer = self.writer local options = self.options - - local define_reference_parser = parsers.define_reference_parser - * ( parsers.spnl - * Ct(parsers.attributes))^-1 + local define_reference_parser = (parsers.check_trail / "") * parsers.link_label * parsers.colon + * parsers.spnlc * parsers.url + * ( parsers.spnlc_sep * parsers.title * (parsers.spnlc * Ct(parsers.attributes)) + * parsers.only_blank + + parsers.spnlc_sep * parsers.title * parsers.only_blank + + Cc("") * (parsers.spnlc * Ct(parsers.attributes)) * parsers.only_blank + + Cc("") * parsers.only_blank) local ReferenceWithAttributes = define_reference_parser - * parsers.blankline^1 / self.register_link self.update_rule("Reference", ReferenceWithAttributes) - local function indirect_link(label, sps, tag, - attribute_text, - attributes) - return writer.defer_call(function() - local r, fallback = self.lookup_reference(label, sps, tag, - attributes) - if r then - return writer.link( - self.parser_functions.parse_inlines_no_link(label), - r.url, r.title, r.attributes) - else - local buf = {fallback} - if attributes then - table.insert(buf, writer.string(attribute_text)) - end - return buf - end - end) - end - - local DirectLinkWithAttributes = parsers.direct_link - * (Ct(parsers.attributes))^-1 - / writer.link - - local IndirectLinkWithAttributes = parsers.indirect_link - * (C(Ct(parsers.attributes)))^-1 - / indirect_link - - local LinkWithAttributes = DirectLinkWithAttributes - + IndirectLinkWithAttributes - - self.update_rule("Link", LinkWithAttributes) - - - local function indirect_image(label, sps, tag, - attribute_text, - attributes) - return writer.defer_call(function() - local r, fallback = self.lookup_reference(label, sps, tag, - attributes) - if r then - return writer.image(writer.string(label), - r.url, r.title, r.attributes) - else - local buf = {"!", fallback} - if attributes then - table.insert(buf, writer.string(attribute_text)) - end - return buf - end - end) - end - - local DirectImageWithAttributes = parsers.direct_image - * Ct(parsers.attributes) - / writer.image - - local IndirectImageWithAttributes = parsers.indirect_image - * C(Ct(parsers.attributes)) - / indirect_image - - local ImageWithAttributes = DirectImageWithAttributes - + IndirectImageWithAttributes - - self.insert_pattern("Inline before Image", - ImageWithAttributes, - "ImageWithAttributes") + local LinkWithAttributesAndEmph = Ct(parsers.link_and_emph_table * Cg(Cc(true), "match_link_attributes")) + / self.defer_link_and_emphasis_processing + self.update_rule("LinkAndEmph", LinkWithAttributesAndEmph) local AutoLinkUrlWithAttributes = parsers.auto_link_url @@ -5149,6 +7330,7 @@ M.extensions.notes = function(notes, inline_notes) name = "built-in notes syntax extension", extend_writer = function(self) function self.note(s) + if self.flatten_inlines then return "" end return {"\\markdownRendererNote{",s,"}"} end end, extend_reader = function(self) @@ -5158,10 +7340,10 @@ M.extensions.notes = function(notes, inline_notes) if inline_notes then local InlineNote = parsers.circumflex - * (parsers.tag / self.parser_functions.parse_inlines_no_inline_note) + * (parsers.link_label / self.parser_functions.parse_inlines_no_inline_note) / writer.note - self.insert_pattern("Inline after Emph", + self.insert_pattern("Inline after LinkAndEmph", InlineNote, "InlineNote") end if notes then @@ -5171,7 +7353,7 @@ M.extensions.notes = function(notes, inline_notes) local RawNoteRef = #(parsers.lbracket * parsers.circumflex) - * parsers.tag / strip_first_char + * parsers.link_label / strip_first_char local rawnotes = {} @@ -5190,21 +7372,36 @@ M.extensions.notes = function(notes, inline_notes) end local function register_note(ref,rawnote) - rawnotes[self.normalize_tag(ref)] = rawnote + local normalized_tag = self.normalize_tag(ref) + if rawnotes[normalized_tag] == nil then + rawnotes[normalized_tag] = rawnote + end return "" end local NoteRef = RawNoteRef / lookup_note + local optionally_indented_line = parsers.check_optional_indent_and_any_trail * parsers.line + + local blank = parsers.check_optional_blank_indent_and_any_trail * parsers.optionalspace * parsers.newline + + local chunk = Cs(parsers.line * (optionally_indented_line - blank)^0) + + local indented_blocks = function(bl) + return Cs( bl + * (blank^1 * (parsers.check_optional_indent / "") + * parsers.check_code_trail * -parsers.blankline * bl)^0) + end + local NoteBlock - = parsers.leader * RawNoteRef * parsers.colon - * parsers.spnl * parsers.indented_blocks(parsers.chunk) + = parsers.check_trail_no_rem * RawNoteRef * parsers.colon + * parsers.spnlc * indented_blocks(chunk) / register_note - local Blank = NoteBlock + parsers.Blank - self.update_rule("Blank", Blank) + local Reference = NoteBlock + parsers.Reference - self.insert_pattern("Inline after Emph", + self.update_rule("Reference", Reference) + self.insert_pattern("Inline before LinkAndEmph", NoteRef, "NoteRef") end @@ -5212,7 +7409,7 @@ M.extensions.notes = function(notes, inline_notes) end } end -M.extensions.pipe_tables = function(table_captions) +M.extensions.pipe_tables = function(table_captions, table_attributes) local function make_pipe_table_rectangular(rows) local num_columns = #rows[2] @@ -5270,10 +7467,18 @@ M.extensions.pipe_tables = function(table_captions) return { name = "built-in pipe_tables syntax extension", extend_writer = function(self) - function self.table(rows, caption) + function self.table(rows, caption, attributes) if not self.is_writing then return "" end - local buffer = {"\\markdownRendererTable{", - caption or "", "}{", #rows - 1, "}{", #rows[1], "}"} + local buffer = {} + if attributes ~= nil then + table.insert(buffer, + "\\markdownRendererTableAttributeContextBegin\n") + table.insert(buffer, self.attributes(attributes)) + end + table.insert(buffer, + {"\\markdownRendererTable{", + caption or "", "}{", #rows - 1, "}{", + #rows[1], "}"}) local temp = rows[2] -- put alignments on the first row rows[2] = rows[1] rows[1] = temp @@ -5290,6 +7495,10 @@ M.extensions.pipe_tables = function(table_captions) end table.insert(buffer, "}") end + if attributes ~= nil then + table.insert(buffer, + "\\markdownRendererTableAttributeContextEnd{}") + end return buffer end end, extend_reader = function(self) @@ -5319,31 +7528,65 @@ M.extensions.pipe_tables = function(table_captions) , table_hline_separator , table_hline_column) - local table_caption_beginning = parsers.skipblanklines - * parsers.nonindentspace + local table_caption_beginning = (parsers.check_minimal_blank_indent_and_any_trail_no_rem + * parsers.optionalspace * parsers.newline)^0 + * parsers.check_minimal_indent_and_trail * (P("Table")^-1 * parsers.colon) * parsers.optionalspace + local function strip_trailing_spaces(s) + return s:gsub("%s*$","") + end + local table_row = pipe_table_row(true , (C((parsers.linechar - parsers.pipe)^1) + / strip_trailing_spaces / self.parser_functions.parse_inlines) , parsers.pipe , (C((parsers.linechar - parsers.pipe)^0) + / strip_trailing_spaces / self.parser_functions.parse_inlines)) local table_caption if table_captions then table_caption = #table_caption_beginning * table_caption_beginning - * Ct(parsers.IndentedInline^1) - * parsers.newline + if table_attributes then + table_caption = table_caption + * (C(((( parsers.linechar + - (parsers.attributes + * parsers.optionalspace + * parsers.newline + * -#( parsers.optionalspace + * parsers.linechar))) + + ( parsers.newline + * #( parsers.optionalspace + * parsers.linechar) + * C(parsers.optionalspace) / writer.space)) + * (parsers.linechar + - parsers.lbrace)^0)^1) + / self.parser_functions.parse_inlines) + * (parsers.newline + + ( Ct(parsers.attributes) + * parsers.optionalspace + * parsers.newline)) + else + table_caption = table_caption + * C(( parsers.linechar + + ( parsers.newline + * #( parsers.optionalspace + * parsers.linechar) + * C(parsers.optionalspace) / writer.space))^1) + / self.parser_functions.parse_inlines + * parsers.newline + end else table_caption = parsers.fail end - local PipeTable = Ct(table_row * parsers.newline - * table_hline - * (parsers.newline * table_row)^0) + local PipeTable = Ct(table_row * parsers.newline * (parsers.check_minimal_indent_and_trail / {}) + * table_hline * parsers.newline + * ((parsers.check_minimal_indent / {}) * table_row * parsers.newline)^0) / make_pipe_table_rectangular * table_caption^-1 / writer.table @@ -5361,6 +7604,7 @@ M.extensions.raw_inline = function() function self.rawInline(s, attr) if not self.is_writing then return "" end + if self.flatten_inlines then return s end local name = util.cache_verbatim(options.cacheDir, s) return {"\\markdownRendererInputRawInline{", name,"}{", self.string(attr),"}"} @@ -5382,6 +7626,7 @@ M.extensions.strike_through = function() name = "built-in strike_through syntax extension", extend_writer = function(self) function self.strike_through(s) + if self.flatten_inlines then return s end return {"\\markdownRendererStrikeThrough{",s,"}"} end end, extend_reader = function(self) @@ -5393,7 +7638,7 @@ M.extensions.strike_through = function() parsers.doubletildes) ) / writer.strike_through - self.insert_pattern("Inline after Emph", + self.insert_pattern("Inline after LinkAndEmph", StrikeThrough, "StrikeThrough") self.add_special_character("~") @@ -5405,6 +7650,7 @@ M.extensions.subscripts = function() name = "built-in subscripts syntax extension", extend_writer = function(self) function self.subscript(s) + if self.flatten_inlines then return s end return {"\\markdownRendererSubscript{",s,"}"} end end, extend_reader = function(self) @@ -5415,7 +7661,7 @@ M.extensions.subscripts = function() parsers.between(parsers.Str, parsers.tilde, parsers.tilde) ) / writer.subscript - self.insert_pattern("Inline after Emph", + self.insert_pattern("Inline after LinkAndEmph", Subscript, "Subscript") self.add_special_character("~") @@ -5427,6 +7673,7 @@ M.extensions.superscripts = function() name = "built-in superscripts syntax extension", extend_writer = function(self) function self.superscript(s) + if self.flatten_inlines then return s end return {"\\markdownRendererSuperscript{",s,"}"} end end, extend_reader = function(self) @@ -5437,7 +7684,7 @@ M.extensions.superscripts = function() parsers.between(parsers.Str, parsers.circumflex, parsers.circumflex) ) / writer.superscript - self.insert_pattern("Inline after Emph", + self.insert_pattern("Inline after LinkAndEmph", Superscript, "Superscript") self.add_special_character("^") @@ -5451,11 +7698,11 @@ M.extensions.tex_math = function(tex_math_dollars, name = "built-in tex_math syntax extension", extend_writer = function(self) function self.display_math(s) - if not self.is_writing then return "" end + if self.flatten_inlines then return s end return {"\\markdownRendererDisplayMath{",self.math(s),"}"} end function self.inline_math(s) - if not self.is_writing then return "" end + if self.flatten_inlines then return s end return {"\\markdownRendererInlineMath{",self.math(s),"}"} end end, extend_reader = function(self) @@ -5463,24 +7710,33 @@ M.extensions.tex_math = function(tex_math_dollars, local writer = self.writer local function between(p, starter, ender) - return (starter * C(p * (p - ender)^0) * ender) + return (starter * Cs(p * (p - ender)^0) * ender) + end + + local function strip_preceding_whitespaces(str) + return str:gsub("^%s*(.-)$", "%1") end local allowed_before_closing = B( parsers.backslash * parsers.any - + parsers.any * (parsers.nonspacechar - parsers.backslash)) - local dollar_math_content = parsers.backslash^-1 - * parsers.any + + parsers.any * (parsers.any - parsers.backslash)) + + local allowed_before_closing_no_space = B( parsers.backslash * parsers.any + + parsers.any * (parsers.nonspacechar - parsers.backslash)) + + local dollar_math_content = (parsers.newline * (parsers.check_optional_indent / "") + + parsers.backslash^-1 + * parsers.linechar) - parsers.blankline^2 - parsers.dollar local inline_math_opening_dollars = parsers.dollar * #(parsers.nonspacechar) - local inline_math_closing_dollars = allowed_before_closing + local inline_math_closing_dollars = allowed_before_closing_no_space * parsers.dollar * -#(parsers.digit) - local inline_math_dollars = between(C( dollar_math_content), + local inline_math_dollars = between(Cs( dollar_math_content), inline_math_opening_dollars, inline_math_closing_dollars) @@ -5490,59 +7746,66 @@ M.extensions.tex_math = function(tex_math_dollars, local display_math_closing_dollars = parsers.dollar * parsers.dollar - local display_math_dollars = between(C( dollar_math_content), + local display_math_dollars = between(Cs( dollar_math_content), display_math_opening_dollars, display_math_closing_dollars) - local backslash_math_content = parsers.any + local backslash_math_content = (parsers.newline * (parsers.check_optional_indent / "") + + parsers.linechar) - parsers.blankline^2 local inline_math_opening_double = parsers.backslash * parsers.backslash * parsers.lparent - * #(parsers.nonspacechar) local inline_math_closing_double = allowed_before_closing + * parsers.spacechar^0 * parsers.backslash * parsers.backslash * parsers.rparent - local inline_math_double = between(C( backslash_math_content), + local inline_math_double = between(Cs( backslash_math_content), inline_math_opening_double, inline_math_closing_double) + / strip_preceding_whitespaces local display_math_opening_double = parsers.backslash * parsers.backslash * parsers.lbracket local display_math_closing_double = allowed_before_closing + * parsers.spacechar^0 * parsers.backslash * parsers.backslash * parsers.rbracket - local display_math_double = between(C( backslash_math_content), + local display_math_double = between(Cs( backslash_math_content), display_math_opening_double, display_math_closing_double) + / strip_preceding_whitespaces local inline_math_opening_single = parsers.backslash * parsers.lparent - * #(parsers.nonspacechar) local inline_math_closing_single = allowed_before_closing + * parsers.spacechar^0 * parsers.backslash * parsers.rparent - local inline_math_single = between(C( backslash_math_content), + local inline_math_single = between(Cs( backslash_math_content), inline_math_opening_single, inline_math_closing_single) + / strip_preceding_whitespaces local display_math_opening_single = parsers.backslash * parsers.lbracket local display_math_closing_single = allowed_before_closing + * parsers.spacechar^0 * parsers.backslash * parsers.rbracket - local display_math_single = between(C( backslash_math_content), + local display_math_single = between(Cs( backslash_math_content), display_math_opening_single, display_math_closing_single) + / strip_preceding_whitespaces local display_math = parsers.fail @@ -5566,7 +7829,7 @@ M.extensions.tex_math = function(tex_math_dollars, local TexMath = display_math / writer.display_math + inline_math / writer.inline_math - self.insert_pattern("Inline after Emph", + self.insert_pattern("Inline after LinkAndEmph", TexMath, "TexMath") if tex_math_dollars then @@ -5719,6 +7982,21 @@ function M.new(options) options = options or {} setmetatable(options, { __index = function (_, key) return defaultOptions[key] end }) + if options.singletonCache and singletonCache.convert then + for k, v in pairs(defaultOptions) do + if type(v) == "table" then + for i = 1, math.max(#singletonCache.options[k], #options[k]) do + if singletonCache.options[k][i] ~= options[k][i] then + goto miss + end + end + elseif singletonCache.options[k] ~= options[k] then + goto miss + end + end + return singletonCache.convert + end + ::miss:: local extensions = {} if options.bracketedSpans then @@ -5780,9 +8058,14 @@ function M.new(options) table.insert(extensions, line_block_extension) end + if options.mark then + local mark_extension = M.extensions.mark() + table.insert(extensions, mark_extension) + end + if options.pipeTables then local pipe_tables_extension = M.extensions.pipe_tables( - options.tableCaptions) + options.tableCaptions, options.tableAttributes) table.insert(extensions, pipe_tables_extension) end @@ -5816,11 +8099,9 @@ function M.new(options) table.insert(extensions, tex_math_extension) end - if options.footnotes or options.inlineFootnotes or - options.notes or options.inlineNotes then + if options.notes or options.inlineNotes then local notes_extension = M.extensions.notes( - options.footnotes or options.notes, - options.inlineFootnotes or options.inlineNotes) + options.notes, options.inlineNotes) table.insert(extensions, notes_extension) end @@ -5901,7 +8182,18 @@ function M.new(options) local writer = M.writer.new(options) local reader = M.reader.new(writer, options) local convert = reader.finalize_grammar(extensions) - + collectgarbage("collect") + if options.singletonCache then + local singletonCacheOptions = {} + for k, v in pairs(options) do + singletonCacheOptions[k] = v + end + setmetatable(singletonCacheOptions, + { __index = function (_, key) + return defaultOptions[key] end }) + singletonCache.options = singletonCacheOptions + singletonCache.convert = convert + end return convert end |