From da0bd16b0ba9d42d044af47137003788f0b7f773 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sat, 24 Dec 2022 03:01:20 +0000 Subject: CTAN sync 202212240301 --- FILES.byname | 462 +- FILES.byname.gz | Bin 2488576 -> 2488701 bytes FILES.last07days | 445 +- biblio/ctan-bibdata/ctan.bib | 33 +- biblio/ctan-bibdata/ctan.pdf | Bin 3632523 -> 3632513 bytes macros/generic/markdown/CHANGES.md | 28 +- macros/generic/markdown/LICENSE | 415 - macros/generic/markdown/Makefile | 205 - macros/generic/markdown/README.md | 30 +- macros/generic/markdown/VERSION | 2 +- macros/generic/markdown/examples/README.md | 7 - macros/generic/markdown/examples/context-mkii.pdf | Bin 213638 -> 0 bytes macros/generic/markdown/examples/context-mkiv.pdf | Bin 57852 -> 0 bytes macros/generic/markdown/examples/latex-luatex.pdf | Bin 89912 -> 0 bytes macros/generic/markdown/examples/latex-pdftex.pdf | Bin 334207 -> 0 bytes macros/generic/markdown/examples/latex-tex4ht.css | 219 - macros/generic/markdown/examples/latex-tex4ht.html | 452 - macros/generic/markdown/examples/latex-xetex.pdf | Bin 61861 -> 0 bytes macros/generic/markdown/latexmkrc | 5 - macros/generic/markdown/markdown.dtx | 9055 ++++++++-------- macros/generic/markdown/markdown.html | 10672 ++++++++++--------- macros/generic/markdown/markdown.pdf | Bin 917637 -> 929724 bytes macros/latex/contrib/pythonimmediate/DEPENDS.txt | 4 + macros/latex/contrib/pythonimmediate/README | 24 + .../contrib/pythonimmediate/pythonimmediate.pdf | Bin 0 -> 402484 bytes .../contrib/pythonimmediate/pythonimmediate.sty | 183 + .../contrib/pythonimmediate/pythonimmediate.tex | 535 + .../pythonimmediate_script_pytotex.py | 57 + .../pythonimmediate_script_textopy.py | 2295 ++++ macros/latex/contrib/saveenv/saveenv.pdf | Bin 384203 -> 395762 bytes macros/latex/contrib/saveenv/saveenv.sty | 59 +- macros/latex/contrib/saveenv/saveenv.tex | 78 +- macros/latex/contrib/tagpdf/README.md | 4 +- macros/latex/contrib/tagpdf/tagpdf-backend.dtx | 45 +- macros/latex/contrib/tagpdf/tagpdf-checks.dtx | 70 +- macros/latex/contrib/tagpdf/tagpdf-code.pdf | Bin 1240872 -> 1523569 bytes macros/latex/contrib/tagpdf/tagpdf-data.dtx | 581 + macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx | 28 +- macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx | 33 +- macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx | 4 +- macros/latex/contrib/tagpdf/tagpdf-roles.dtx | 1455 ++- macros/latex/contrib/tagpdf/tagpdf-space.dtx | 4 +- macros/latex/contrib/tagpdf/tagpdf-struct.dtx | 207 +- macros/latex/contrib/tagpdf/tagpdf-tree.dtx | 133 +- macros/latex/contrib/tagpdf/tagpdf-user.dtx | 17 +- macros/latex/contrib/tagpdf/tagpdf.dtx | 57 +- macros/latex/contrib/tagpdf/tagpdf.ins | 21 + macros/latex/contrib/tagpdf/tagpdf.pdf | Bin 492448 -> 738728 bytes macros/latex/contrib/tagpdf/tagpdf.tex | 559 +- macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty | 285 +- macros/luatex/generic/luakeys/luakeys-debug.sty | 2 +- macros/luatex/generic/luakeys/luakeys-doc.pdf | Bin 395011 -> 398632 bytes macros/luatex/generic/luakeys/luakeys-doc.tex | 64 +- macros/luatex/generic/luakeys/luakeys.lua | 12 +- macros/luatex/generic/luakeys/luakeys.sty | 2 +- .../texlive/tlnet/tlpkg/installer/ctan-mirrors.pl | 11 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb | 83 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 | 2 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 | 2 +- .../texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc | 14 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz | Bin 2438944 -> 2439412 bytes systems/win32/miktex/tm/packages/files.csv.lzma | Bin 752827 -> 751958 bytes .../win32/miktex/tm/packages/next/files.csv.lzma | Bin 753546 -> 751921 bytes systems/win32/miktex/tm/packages/next/pr.ini | 10 +- systems/win32/miktex/tm/packages/pr.ini | 12 +- timestamp | 2 +- 66 files changed, 16784 insertions(+), 12200 deletions(-) delete mode 100644 macros/generic/markdown/LICENSE delete mode 100644 macros/generic/markdown/Makefile delete mode 100644 macros/generic/markdown/examples/README.md delete mode 100644 macros/generic/markdown/examples/context-mkii.pdf delete mode 100644 macros/generic/markdown/examples/context-mkiv.pdf delete mode 100644 macros/generic/markdown/examples/latex-luatex.pdf delete mode 100644 macros/generic/markdown/examples/latex-pdftex.pdf delete mode 100644 macros/generic/markdown/examples/latex-tex4ht.css delete mode 100644 macros/generic/markdown/examples/latex-tex4ht.html delete mode 100644 macros/generic/markdown/examples/latex-xetex.pdf delete mode 100644 macros/generic/markdown/latexmkrc create mode 100644 macros/latex/contrib/pythonimmediate/DEPENDS.txt create mode 100644 macros/latex/contrib/pythonimmediate/README create mode 100644 macros/latex/contrib/pythonimmediate/pythonimmediate.pdf create mode 100644 macros/latex/contrib/pythonimmediate/pythonimmediate.sty create mode 100644 macros/latex/contrib/pythonimmediate/pythonimmediate.tex create mode 100755 macros/latex/contrib/pythonimmediate/pythonimmediate_script_pytotex.py create mode 100755 macros/latex/contrib/pythonimmediate/pythonimmediate_script_textopy.py create mode 100644 macros/latex/contrib/tagpdf/tagpdf-data.dtx diff --git a/FILES.byname b/FILES.byname index 4b76aed46a..dbb23d7866 100644 --- a/FILES.byname +++ b/FILES.byname @@ -2035,12 +2035,12 @@ 2022/09/23 | 1673 | biblio/citation-style-language/README.md 2022/09/23 | 11958 | biblio/citation-style-language/vancouver.csl 2022/09/23 | 591448 | biblio/citation-style-language.zip -2022/12/22 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx +2022/12/23 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx 2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx -2022/12/22 | 2751756 | biblio/ctan-bibdata/ctan.bib -2022/12/22 | 3629216 | biblio/ctan-bibdata/ctan.pdf +2022/12/23 | 2752029 | biblio/ctan-bibdata/ctan.bib +2022/12/23 | 3632523 | biblio/ctan-bibdata/ctan.pdf 2022/10/08 | 1415 | biblio/ctan-bibdata/README -2022/12/22 | 4022506 | biblio/ctan-bibdata.zip +2022/12/23 | 4026296 | biblio/ctan-bibdata.zip 2022/02/06 | 3110 | biblio/pbibtex/pbibtex-base/cpp.awk 2022/02/06 | 1009 | biblio/pbibtex/pbibtex-base/generate.sh 2022/02/06 | 22422 | biblio/pbibtex/pbibtex-base/jabbrv.bst @@ -5414,7 +5414,7 @@ 1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp 1990/10/02 | 812 | dviware/vutex/vaxvms.ins 1990/10/02 | 127576 | dviware/vutex/vutex.web -2022/12/22 | 50749 | FILES.last07days +2022/12/23 | 46609 | FILES.last07days 2021/07/24 | 1139410 | fonts/aboensis/Aboensis.glyphs 2021/07/24 | 18907382 | fonts/aboensis/aboensis.pdf 2021/07/24 | 137860 | fonts/aboensis/Aboensis-Regular.otf @@ -190261,7 +190261,7 @@ 2021/09/21 | 514924 | install/macros/generic/expkv.tds.zip 2022/02/04 | 232668 | install/macros/generic/iftex.tds.zip 2012/09/20 | 321508 | install/macros/generic/langcode.tds.zip -2022/10/30 | 1324216 | install/macros/generic/markdown.tds.zip +2022/12/23 | 1343442 | install/macros/generic/markdown.tds.zip 2014/06/11 | 428488 | install/macros/generic/mathdots.tds.zip 2014/01/02 | 496633 | install/macros/generic/minifp.tds.zip 2012/09/20 | 369585 | install/macros/generic/plainpkg.tds.zip @@ -199051,34 +199051,23 @@ 2016/06/15 | 170646 | macros/generic/luatex85/luatex85.pdf 2016/06/15 | 316 | macros/generic/luatex85/README.md 2016/06/15 | 173375 | macros/generic/luatex85.zip -2022/10/30 | 28311 | macros/generic/markdown/CHANGES.md -2022/10/30 | 4377 | macros/generic/markdown/docstrip.cfg -2022/10/30 | 213638 | macros/generic/markdown/examples/context-mkii.pdf -2022/10/30 | 1552 | macros/generic/markdown/examples/context-mkii.tex -2022/10/30 | 57852 | macros/generic/markdown/examples/context-mkiv.pdf -2022/10/30 | 1743 | macros/generic/markdown/examples/context-mkiv.tex -2022/10/30 | 3608 | macros/generic/markdown/examples/example.md -2022/10/30 | 89912 | macros/generic/markdown/examples/latex-luatex.pdf -2022/10/30 | 334207 | macros/generic/markdown/examples/latex-pdftex.pdf -2022/10/30 | 1765 | macros/generic/markdown/examples/latex.tex -2022/10/30 | 12772 | macros/generic/markdown/examples/latex-tex4ht.css -2022/10/30 | 31800 | macros/generic/markdown/examples/latex-tex4ht.html -2022/10/30 | 61861 | macros/generic/markdown/examples/latex-xetex.pdf -2022/10/30 | 417 | macros/generic/markdown/examples/README.md -2022/10/30 | 75 | macros/generic/markdown/examples/scientists.csv -2022/10/30 | 145 | macros/generic/markdown/latexmkrc -2022/10/30 | 22371 | macros/generic/markdown/libraries/markdown-tinyyaml.lua -2022/10/30 | 19105 | macros/generic/markdown/LICENSE -2022/10/30 | 8268 | macros/generic/markdown/Makefile -2022/10/30 | 4530 | macros/generic/markdown/markdown.css -2022/10/30 | 714677 | macros/generic/markdown/markdown.dtx -2022/10/30 | 814992 | macros/generic/markdown/markdown.html -2022/10/30 | 1333 | macros/generic/markdown/markdown.ins -2022/10/30 | 917637 | macros/generic/markdown/markdown.pdf -2022/10/30 | 140951 | macros/generic/markdown/markdown.png -2022/10/30 | 17812 | macros/generic/markdown/README.md -2022/10/30 | 31 | macros/generic/markdown/VERSION -2022/10/31 | 2007163 | macros/generic/markdown.zip +2022/12/23 | 28939 | macros/generic/markdown/CHANGES.md +2022/12/23 | 4377 | macros/generic/markdown/docstrip.cfg +2022/12/23 | 1552 | macros/generic/markdown/examples/context-mkii.tex +2022/12/23 | 1743 | macros/generic/markdown/examples/context-mkiv.tex +2022/12/23 | 3608 | macros/generic/markdown/examples/example.md +2022/12/23 | 1765 | macros/generic/markdown/examples/latex.tex +2022/12/23 | 75 | macros/generic/markdown/examples/scientists.csv +2022/12/23 | 22371 | macros/generic/markdown/libraries/markdown-tinyyaml.lua +2022/12/23 | 4530 | macros/generic/markdown/markdown.css +2022/12/23 | 730937 | macros/generic/markdown/markdown.dtx +2022/12/23 | 836776 | macros/generic/markdown/markdown.html +2022/12/23 | 1333 | macros/generic/markdown/markdown.ins +2022/12/23 | 929724 | macros/generic/markdown/markdown.pdf +2022/12/23 | 140951 | macros/generic/markdown/markdown.png +2022/12/23 | 17894 | macros/generic/markdown/README.md +2022/12/23 | 31 | macros/generic/markdown/VERSION +2022/12/23 | 1273531 | macros/generic/markdown.zip 2014/06/11 | 20744 | macros/generic/mathdots/mathdots.dtx 2014/06/11 | 1203 | macros/generic/mathdots/mathdots.ins 2014/06/11 | 258547 | macros/generic/mathdots/mathdots.pdf @@ -229492,6 +229481,14 @@ 2017/02/09 | 4900 | macros/latex/contrib/pythonhighlight/pythonhighlight.sty 2017/02/09 | 662 | macros/latex/contrib/pythonhighlight/README.md 2017/02/09 | 3487 | macros/latex/contrib/pythonhighlight.zip +2022/12/23 | 35 | macros/latex/contrib/pythonimmediate/DEPENDS.txt +2022/12/23 | 402484 | macros/latex/contrib/pythonimmediate/pythonimmediate.pdf +2022/12/23 | 1649 | macros/latex/contrib/pythonimmediate/pythonimmediate_script_pytotex.py +2022/12/23 | 69227 | macros/latex/contrib/pythonimmediate/pythonimmediate_script_textopy.py +2022/12/23 | 7340 | macros/latex/contrib/pythonimmediate/pythonimmediate.sty +2022/12/23 | 17505 | macros/latex/contrib/pythonimmediate/pythonimmediate.tex +2022/12/23 | 773 | macros/latex/contrib/pythonimmediate/README +2022/12/23 | 429551 | macros/latex/contrib/pythonimmediate.zip 2021/08/03 | 3375 | macros/latex/contrib/python/python.sty 2012/06/11 | 934 | macros/latex/contrib/python/README 2021/06/07 | 70760 | macros/latex/contrib/pythontex/depythontex2.py @@ -230564,12 +230561,12 @@ 1998/11/11 | 2580 | macros/latex/contrib/sauterfonts/sauterfonts.ins 1998/11/11 | 1078 | macros/latex/contrib/sauterfonts/sbbm.sty 2005/04/30 | 6199 | macros/latex/contrib/sauterfonts.zip -2022/07/08 | 9 | macros/latex/contrib/saveenv/DEPENDS.txt -2022/07/08 | 735 | macros/latex/contrib/saveenv/README -2022/07/08 | 384203 | macros/latex/contrib/saveenv/saveenv.pdf -2022/07/08 | 4042 | macros/latex/contrib/saveenv/saveenv.sty -2022/07/08 | 6793 | macros/latex/contrib/saveenv/saveenv.tex -2022/07/08 | 387687 | macros/latex/contrib/saveenv.zip +2022/12/23 | 9 | macros/latex/contrib/saveenv/DEPENDS.txt +2022/12/23 | 735 | macros/latex/contrib/saveenv/README +2022/12/23 | 395762 | macros/latex/contrib/saveenv/saveenv.pdf +2022/12/23 | 4738 | macros/latex/contrib/saveenv/saveenv.sty +2022/12/23 | 8729 | macros/latex/contrib/saveenv/saveenv.tex +2022/12/23 | 399930 | macros/latex/contrib/saveenv.zip 2000/05/11 | 9162 | macros/latex/contrib/savefnmark/savefnmark.dtx 2000/05/10 | 903 | macros/latex/contrib/savefnmark/savefnmark.ins 2005/06/22 | 186881 | macros/latex/contrib/savefnmark/savefnmark.pdf @@ -233414,53 +233411,54 @@ 2016/02/03 | 1428 | macros/latex/contrib/tagpair/tagpair.sty 2016/09/23 | 3615 | macros/latex/contrib/tagpair/tagpair.tex 2016/09/23 | 71796 | macros/latex/contrib/tagpair.zip -2022/08/24 | 8652 | macros/latex/contrib/tagpdf/ex-AF-file.pdf -2022/08/24 | 1237 | macros/latex/contrib/tagpdf/ex-AF-file.tex -2022/08/24 | 17742 | macros/latex/contrib/tagpdf/ex-alt-actualtext-luatex.pdf -2022/08/24 | 4153 | macros/latex/contrib/tagpdf/ex-alt-actualtext.tex -2022/08/24 | 6626 | macros/latex/contrib/tagpdf/ex-attribute-luatex.pdf -2022/08/24 | 1398 | macros/latex/contrib/tagpdf/ex-attribute.tex -2022/08/24 | 7854 | macros/latex/contrib/tagpdf/ex-formula-problem-luatex.pdf -2022/08/24 | 1019 | macros/latex/contrib/tagpdf/ex-formula-problem.tex -2022/08/24 | 22818 | macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf -2022/08/24 | 2150 | macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.tex -2022/08/24 | 16888 | macros/latex/contrib/tagpdf/ex-patch-list-luatex.pdf -2022/08/24 | 2528 | macros/latex/contrib/tagpdf/ex-patch-list-obsolete.tex -2022/08/24 | 2637 | macros/latex/contrib/tagpdf/ex-patch-list.tex -2022/08/24 | 18461 | macros/latex/contrib/tagpdf/ex-patch-sectioning-koma-luatex.pdf -2022/08/24 | 4284 | macros/latex/contrib/tagpdf/ex-patch-sectioning-koma.tex -2022/08/24 | 21067 | macros/latex/contrib/tagpdf/ex-patch-sectioning-memoir.pdf -2022/08/24 | 5797 | macros/latex/contrib/tagpdf/ex-patch-sectioning-memoir.tex -2022/08/24 | 6842 | macros/latex/contrib/tagpdf/ex-softhyphen.pdf -2022/08/24 | 1073 | macros/latex/contrib/tagpdf/ex-softhyphen.tex -2022/08/24 | 4618 | macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf -2022/08/24 | 777 | macros/latex/contrib/tagpdf/ex-spaceglyph-listings.tex -2022/08/24 | 1537 | macros/latex/contrib/tagpdf/ex-structure-obsolete.tex -2022/08/24 | 19363 | macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf -2022/08/24 | 801 | macros/latex/contrib/tagpdf/ex-tagpdf-template.tex -2022/08/24 | 8281 | macros/latex/contrib/tagpdf/global-ex.png -2022/08/24 | 2022 | macros/latex/contrib/tagpdf/link-figure-input.tex -2022/08/24 | 141163 | macros/latex/contrib/tagpdf/pac3.PNG -2022/08/24 | 1176 | macros/latex/contrib/tagpdf/README.md -2022/08/24 | 40036 | macros/latex/contrib/tagpdf/tagpdf-backend.dtx -2022/08/24 | 1730 | macros/latex/contrib/tagpdf/tagpdf.bib -2022/08/24 | 28601 | macros/latex/contrib/tagpdf/tagpdf-checks.dtx -2022/08/24 | 1240872 | macros/latex/contrib/tagpdf/tagpdf-code.pdf -2022/08/24 | 2262 | macros/latex/contrib/tagpdf/tagpdf-code.tex -2022/08/24 | 8113 | macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty -2022/08/24 | 21643 | macros/latex/contrib/tagpdf/tagpdf.dtx -2022/08/24 | 3211 | macros/latex/contrib/tagpdf/tagpdf.ins -2022/08/24 | 25856 | macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx -2022/08/24 | 13465 | macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx -2022/08/24 | 15239 | macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx -2022/08/24 | 492448 | macros/latex/contrib/tagpdf/tagpdf.pdf -2022/08/24 | 19661 | macros/latex/contrib/tagpdf/tagpdf-roles.dtx -2022/08/24 | 5107 | macros/latex/contrib/tagpdf/tagpdf-space.dtx -2022/08/24 | 50213 | macros/latex/contrib/tagpdf/tagpdf-struct.dtx -2022/08/24 | 101271 | macros/latex/contrib/tagpdf/tagpdf.tex -2022/08/24 | 13260 | macros/latex/contrib/tagpdf/tagpdf-tree.dtx -2022/08/24 | 27127 | macros/latex/contrib/tagpdf/tagpdf-user.dtx -2022/08/24 | 2044307 | macros/latex/contrib/tagpdf.zip +2022/12/23 | 8652 | macros/latex/contrib/tagpdf/ex-AF-file.pdf +2022/12/23 | 1237 | macros/latex/contrib/tagpdf/ex-AF-file.tex +2022/12/23 | 17742 | macros/latex/contrib/tagpdf/ex-alt-actualtext-luatex.pdf +2022/12/23 | 4153 | macros/latex/contrib/tagpdf/ex-alt-actualtext.tex +2022/12/23 | 6626 | macros/latex/contrib/tagpdf/ex-attribute-luatex.pdf +2022/12/23 | 1398 | macros/latex/contrib/tagpdf/ex-attribute.tex +2022/12/23 | 7854 | macros/latex/contrib/tagpdf/ex-formula-problem-luatex.pdf +2022/12/23 | 1019 | macros/latex/contrib/tagpdf/ex-formula-problem.tex +2022/12/23 | 22818 | macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf +2022/12/23 | 2150 | macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.tex +2022/12/23 | 16888 | macros/latex/contrib/tagpdf/ex-patch-list-luatex.pdf +2022/12/23 | 2528 | macros/latex/contrib/tagpdf/ex-patch-list-obsolete.tex +2022/12/23 | 2637 | macros/latex/contrib/tagpdf/ex-patch-list.tex +2022/12/23 | 18461 | macros/latex/contrib/tagpdf/ex-patch-sectioning-koma-luatex.pdf +2022/12/23 | 4284 | macros/latex/contrib/tagpdf/ex-patch-sectioning-koma.tex +2022/12/23 | 21067 | macros/latex/contrib/tagpdf/ex-patch-sectioning-memoir.pdf +2022/12/23 | 5797 | macros/latex/contrib/tagpdf/ex-patch-sectioning-memoir.tex +2022/12/23 | 6842 | macros/latex/contrib/tagpdf/ex-softhyphen.pdf +2022/12/23 | 1073 | macros/latex/contrib/tagpdf/ex-softhyphen.tex +2022/12/23 | 4618 | macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf +2022/12/23 | 777 | macros/latex/contrib/tagpdf/ex-spaceglyph-listings.tex +2022/12/23 | 1537 | macros/latex/contrib/tagpdf/ex-structure-obsolete.tex +2022/12/23 | 19363 | macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf +2022/12/23 | 801 | macros/latex/contrib/tagpdf/ex-tagpdf-template.tex +2022/12/23 | 8281 | macros/latex/contrib/tagpdf/global-ex.png +2022/12/23 | 2022 | macros/latex/contrib/tagpdf/link-figure-input.tex +2022/12/23 | 141163 | macros/latex/contrib/tagpdf/pac3.PNG +2022/12/23 | 1176 | macros/latex/contrib/tagpdf/README.md +2022/12/23 | 40913 | macros/latex/contrib/tagpdf/tagpdf-backend.dtx +2022/12/23 | 1730 | macros/latex/contrib/tagpdf/tagpdf.bib +2022/12/23 | 30466 | macros/latex/contrib/tagpdf/tagpdf-checks.dtx +2022/12/23 | 1523569 | macros/latex/contrib/tagpdf/tagpdf-code.pdf +2022/12/23 | 2262 | macros/latex/contrib/tagpdf/tagpdf-code.tex +2022/12/23 | 34230 | macros/latex/contrib/tagpdf/tagpdf-data.dtx +2022/12/23 | 5838 | macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty +2022/12/23 | 20670 | macros/latex/contrib/tagpdf/tagpdf.dtx +2022/12/23 | 3928 | macros/latex/contrib/tagpdf/tagpdf.ins +2022/12/23 | 26784 | macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx +2022/12/23 | 14480 | macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx +2022/12/23 | 15239 | macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx +2022/12/23 | 738728 | macros/latex/contrib/tagpdf/tagpdf.pdf +2022/12/23 | 42959 | macros/latex/contrib/tagpdf/tagpdf-roles.dtx +2022/12/23 | 5107 | macros/latex/contrib/tagpdf/tagpdf-space.dtx +2022/12/23 | 56286 | macros/latex/contrib/tagpdf/tagpdf-struct.dtx +2022/12/23 | 106650 | macros/latex/contrib/tagpdf/tagpdf.tex +2022/12/23 | 14508 | macros/latex/contrib/tagpdf/tagpdf-tree.dtx +2022/12/23 | 27277 | macros/latex/contrib/tagpdf/tagpdf-user.dtx +2022/12/23 | 2144330 | macros/latex/contrib/tagpdf.zip 2007/08/04 | 1263 | macros/latex/contrib/talk/example.tex 2007/08/04 | 465 | macros/latex/contrib/talk/Makefile 2007/08/04 | 2162 | macros/latex/contrib/talk/README @@ -239333,15 +239331,15 @@ 2022/03/20 | 258501 | macros/luatex/generic/luaaddplot/luaaddplot.pdf 2022/03/19 | 700 | macros/luatex/generic/luaaddplot/README.md 2022/03/20 | 259821 | macros/luatex/generic/luaaddplot.zip -2022/12/16 | 795 | macros/luatex/generic/luakeys/luakeys-debug.sty -2022/12/16 | 1179 | macros/luatex/generic/luakeys/luakeys-debug.tex -2022/12/16 | 395011 | macros/luatex/generic/luakeys/luakeys-doc.pdf -2022/12/16 | 59045 | macros/luatex/generic/luakeys/luakeys-doc.tex -2022/12/16 | 37560 | macros/luatex/generic/luakeys/luakeys.lua -2022/12/16 | 808 | macros/luatex/generic/luakeys/luakeys.sty -2022/12/16 | 701 | macros/luatex/generic/luakeys/luakeys.tex -2022/12/16 | 5855 | macros/luatex/generic/luakeys/README.md -2022/12/16 | 416864 | macros/luatex/generic/luakeys.zip +2022/12/23 | 795 | macros/luatex/generic/luakeys/luakeys-debug.sty +2022/12/23 | 1179 | macros/luatex/generic/luakeys/luakeys-debug.tex +2022/12/23 | 398632 | macros/luatex/generic/luakeys/luakeys-doc.pdf +2022/12/23 | 61066 | macros/luatex/generic/luakeys/luakeys-doc.tex +2022/12/23 | 37840 | macros/luatex/generic/luakeys/luakeys.lua +2022/12/23 | 808 | macros/luatex/generic/luakeys/luakeys.sty +2022/12/23 | 701 | macros/luatex/generic/luakeys/luakeys.tex +2022/12/23 | 5855 | macros/luatex/generic/luakeys/README.md +2022/12/23 | 420991 | macros/luatex/generic/luakeys.zip 2022/10/04 | 18092 | macros/luatex/generic/lualibs/LICENSE 2022/10/04 | 130531 | macros/luatex/generic/lualibs/lualibs-basic-merged.lua 2022/10/04 | 1850 | macros/luatex/generic/lualibs/lualibs-boolean.lua @@ -286369,7 +286367,7 @@ 2022/11/13 | 6796 | systems/texlive/tlnet/archive/collection-latexextra.r65001.tar.xz 2022/06/10 | 700 | systems/texlive/tlnet/archive/collection-latex.r63515.tar.xz 2022/06/12 | 736 | systems/texlive/tlnet/archive/collection-latexrecommended.r63547.tar.xz -2022/12/13 | 932 | systems/texlive/tlnet/archive/collection-luatex.r65256.tar.xz +2022/12/23 | 936 | systems/texlive/tlnet/archive/collection-luatex.r65333.tar.xz 2022/12/20 | 1644 | systems/texlive/tlnet/archive/collection-mathscience.r65312.tar.xz 2022/11/01 | 556 | systems/texlive/tlnet/archive/collection-metapost.r64878.tar.xz 2022/11/08 | 484 | systems/texlive/tlnet/archive/collection-music.r64966.tar.xz @@ -291427,8 +291425,8 @@ 2019/02/28 | 9164 | systems/texlive/tlnet/archive/lxfonts.source.r32354.tar.xz 2022/06/13 | 3652 | systems/texlive/tlnet/archive/ly1.doc.r63565.tar.xz 2022/06/13 | 54900 | systems/texlive/tlnet/archive/ly1.r63565.tar.xz -2022/11/08 | 821876 | systems/texlive/tlnet/archive/lyluatex.doc.r64967.tar.xz -2022/11/08 | 14556 | systems/texlive/tlnet/archive/lyluatex.r64967.tar.xz +2022/12/23 | 834068 | systems/texlive/tlnet/archive/lyluatex.doc.r65332.tar.xz +2022/12/23 | 14576 | systems/texlive/tlnet/archive/lyluatex.r65332.tar.xz 2021/08/02 | 190676 | systems/texlive/tlnet/archive/macrolist.doc.r60139.tar.xz 2021/08/02 | 2340 | systems/texlive/tlnet/archive/macrolist.r60139.tar.xz 2021/08/02 | 4528 | systems/texlive/tlnet/archive/macrolist.source.r60139.tar.xz @@ -295843,7 +295841,7 @@ 2022/09/13 | 600 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r64356.tar.xz 2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r64356.tar.xz 2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r64356.tar.xz -2022/12/22 | 423684 | systems/texlive/tlnet/archive/texlive-scripts.doc.r65323.tar.xz +2022/12/23 | 423816 | systems/texlive/tlnet/archive/texlive-scripts.doc.r65329.tar.xz 2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.aarch64-linux.r53577.tar.xz 2020/01/27 | 924 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-freebsd.r53577.tar.xz 2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-netbsd.r53577.tar.xz @@ -295867,7 +295865,7 @@ 2022/09/13 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r64356.tar.xz 2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r64356.tar.xz 2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r64356.tar.xz -2022/12/22 | 113672 | systems/texlive/tlnet/archive/texlive-scripts.r65323.tar.xz +2022/12/23 | 113724 | systems/texlive/tlnet/archive/texlive-scripts.r65329.tar.xz 2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz 2022/11/29 | 36264 | systems/texlive/tlnet/archive/texlive-scripts.win32.r65128.tar.xz 2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz @@ -296562,6 +296560,8 @@ 2021/10/10 | 144676 | systems/texlive/tlnet/archive/truthtable.doc.r60717.tar.xz 2021/10/10 | 2136 | systems/texlive/tlnet/archive/truthtable.r60717.tar.xz 2019/02/28 | 1228 | systems/texlive/tlnet/archive/tsemlines.r23440.tar.xz +2022/12/23 | 48608 | systems/texlive/tlnet/archive/tsvtemplate.doc.r65333.tar.xz +2022/12/23 | 1312 | systems/texlive/tlnet/archive/tsvtemplate.r65333.tar.xz 2022/03/01 | 420704 | systems/texlive/tlnet/archive/ttfutils.aarch64-linux.r62280.tar.xz 2022/02/27 | 463352 | systems/texlive/tlnet/archive/ttfutils.amd64-freebsd.r62206.tar.xz 2022/02/27 | 399336 | systems/texlive/tlnet/archive/ttfutils.amd64-netbsd.r62220.tar.xz @@ -296810,8 +296810,8 @@ 2022/10/24 | 134736 | systems/texlive/tlnet/archive/unigrazpub.doc.r64797.tar.xz 2022/10/24 | 5952 | systems/texlive/tlnet/archive/unigrazpub.r64797.tar.xz 2022/10/24 | 8892 | systems/texlive/tlnet/archive/unigrazpub.source.r64797.tar.xz -2022/11/27 | 49976 | systems/texlive/tlnet/archive/unimath-plain-xetex.doc.r65110.tar.xz -2022/11/27 | 6788 | systems/texlive/tlnet/archive/unimath-plain-xetex.r65110.tar.xz +2022/12/23 | 53192 | systems/texlive/tlnet/archive/unimath-plain-xetex.doc.r65334.tar.xz +2022/12/23 | 7152 | systems/texlive/tlnet/archive/unimath-plain-xetex.r65334.tar.xz 2020/12/30 | 63868 | systems/texlive/tlnet/archive/uninormalize.doc.r57257.tar.xz 2020/12/30 | 5720 | systems/texlive/tlnet/archive/uninormalize.r57257.tar.xz 2019/12/18 | 291268 | systems/texlive/tlnet/archive/uniquecounter.doc.r53162.tar.xz @@ -297734,16 +297734,16 @@ 2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz 2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz 2022/07/17 | 124404 | systems/texlive/tlnet/install-tl -2022/12/22 | 5834590 | systems/texlive/tlnet/install-tl-unx.tar.gz -2022/12/22 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 -2022/12/22 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2022/12/23 | 5834747 | systems/texlive/tlnet/install-tl-unx.tar.gz +2022/12/23 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2022/12/23 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc 2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat -2022/12/22 | 20433623 | systems/texlive/tlnet/install-tl-windows.exe -2022/12/22 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 -2022/12/22 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2022/12/22 | 25518497 | systems/texlive/tlnet/install-tl.zip -2022/12/22 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2022/12/22 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2022/12/23 | 20433915 | systems/texlive/tlnet/install-tl-windows.exe +2022/12/23 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2022/12/23 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2022/12/23 | 25518557 | systems/texlive/tlnet/install-tl.zip +2022/12/23 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2022/12/23 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc 2022/04/03 | 1229 | systems/texlive/tlnet/README.md 2022/04/03 | 0 | systems/texlive/tlnet/TEXLIVE_2022 2022/02/28 | 7791 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg @@ -297753,7 +297753,7 @@ 2022/02/28 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg 2022/10/09 | 49938 | systems/texlive/tlnet/tlpkg/installer/config.guess 2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt -2022/12/21 | 7223 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +2022/12/22 | 7464 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2022/10/13 | 225403 | systems/texlive/tlnet/tlpkg/installer/curl/curl-ca-bundle.crt 2020/04/15 | 2606592 | systems/texlive/tlnet/tlpkg/installer/curl/curl.exe 2017/04/16 | 2629 | systems/texlive/tlnet/tlpkg/installer/installer-options.txt @@ -297796,12 +297796,12 @@ 2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm 2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm 2021/12/21 | 27582 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm -2022/12/22 | 17907721 | systems/texlive/tlnet/tlpkg/texlive.tlpdb -2022/12/22 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2022/12/23 | 17909045 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2022/12/23 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 2022/04/18 | 86658 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm -2022/12/22 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 -2022/12/22 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2022/12/22 | 2438944 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2022/12/23 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2022/12/23 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2022/12/23 | 2439412 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2022/09/14 | 58922 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm 2022/10/04 | 42404 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm 2021/12/21 | 16130 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm @@ -303264,7 +303264,7 @@ 2022/11/01 | 5115 | systems/win32/miktex/tm/packages/filehook.tar.lzma 2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma 2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma -2022/12/20 | 752827 | systems/win32/miktex/tm/packages/files.csv.lzma +2022/12/23 | 751958 | systems/win32/miktex/tm/packages/files.csv.lzma 2001/05/14 | 5617 | systems/win32/miktex/tm/packages/finbib.tar.lzma 2015/10/20 | 44379 | systems/win32/miktex/tm/packages/findhyph.tar.lzma 2011/10/21 | 89323 | systems/win32/miktex/tm/packages/fink.tar.lzma @@ -303601,9 +303601,9 @@ 2022/12/01 | 79915 | systems/win32/miktex/tm/packages/graph35__source.tar.lzma 2022/12/01 | 22324 | systems/win32/miktex/tm/packages/graph35.tar.lzma 2018/01/18 | 284778 | systems/win32/miktex/tm/packages/graphbox.tar.lzma -2021/08/03 | 244232 | systems/win32/miktex/tm/packages/graphicscache__doc.tar.lzma -2021/08/03 | 7188 | systems/win32/miktex/tm/packages/graphicscache__source.tar.lzma -2021/08/03 | 3485 | systems/win32/miktex/tm/packages/graphicscache.tar.lzma +2022/12/23 | 177171 | systems/win32/miktex/tm/packages/graphicscache__doc.tar.lzma +2022/12/23 | 7658 | systems/win32/miktex/tm/packages/graphicscache__source.tar.lzma +2022/12/23 | 3792 | systems/win32/miktex/tm/packages/graphicscache.tar.lzma 2016/11/04 | 1845 | systems/win32/miktex/tm/packages/graphics-cfg.tar.lzma 2022/10/06 | 1094 | systems/win32/miktex/tm/packages/graphics-def__doc.tar.lzma 2022/10/06 | 10939 | systems/win32/miktex/tm/packages/graphics-def.tar.lzma @@ -304613,9 +304613,9 @@ 2013/12/23 | 1470948 | systems/win32/miktex/tm/packages/lxfonts.tar.lzma 2022/06/12 | 4108 | systems/win32/miktex/tm/packages/ly1__doc.tar.lzma 2022/06/12 | 55350 | systems/win32/miktex/tm/packages/ly1.tar.lzma -2022/11/15 | 794936 | systems/win32/miktex/tm/packages/lyluatex__doc.tar.lzma -2022/11/15 | 28391 | systems/win32/miktex/tm/packages/lyluatex__source.tar.lzma -2022/11/15 | 14840 | systems/win32/miktex/tm/packages/lyluatex.tar.lzma +2022/12/23 | 807017 | systems/win32/miktex/tm/packages/lyluatex__doc.tar.lzma +2022/12/23 | 28415 | systems/win32/miktex/tm/packages/lyluatex__source.tar.lzma +2022/12/23 | 14857 | systems/win32/miktex/tm/packages/lyluatex.tar.lzma 2006/01/13 | 1323609 | systems/win32/miktex/tm/packages/m3d.cab 2021/08/01 | 191252 | systems/win32/miktex/tm/packages/macrolist__doc.tar.lzma 2021/08/01 | 4944 | systems/win32/miktex/tm/packages/macrolist__source.tar.lzma @@ -305049,9 +305049,9 @@ 2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma 2022/07/26 | 39695 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma 2022/12/11 | 43709 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma -2022/12/20 | 307286 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma -2022/12/20 | 1863002 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma -2022/12/20 | 1632725 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma +2022/12/23 | 307561 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma +2022/12/23 | 1863966 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma +2022/12/23 | 1633330 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma 2022/07/26 | 13519 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma 2022/12/11 | 14432 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma 2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma @@ -305307,102 +305307,102 @@ 2022/11/01 | 230073 | systems/win32/miktex/tm/packages/newverbs__doc.tar.lzma 2022/11/01 | 7969 | systems/win32/miktex/tm/packages/newverbs__source.tar.lzma 2022/11/01 | 3030 | systems/win32/miktex/tm/packages/newverbs.tar.lzma -2022/12/20 | 753546 | systems/win32/miktex/tm/packages/next/files.csv.lzma -2022/12/20 | 57187 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma -2022/12/20 | 1167231 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma -2022/12/20 | 31732 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma -2022/12/20 | 35315 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma -2022/12/20 | 65794 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma -2022/12/20 | 101616 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma -2022/12/20 | 77620 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma -2022/12/20 | 31611 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma -2022/12/20 | 394717 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma -2022/12/20 | 37063 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma -2022/12/20 | 57857 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma -2022/12/20 | 271266 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma -2022/12/20 | 196618 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma -2022/12/20 | 103598 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma -2022/12/20 | 24121 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma -2022/12/20 | 472932 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma -2022/12/20 | 52685 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma -2022/12/20 | 327761 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma -2022/12/20 | 45804 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma -2022/12/20 | 136061 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma -2022/12/20 | 1457300 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma -2022/12/20 | 121130 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma -2022/12/20 | 48968 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma -2022/12/20 | 28752 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma -2022/12/20 | 62793 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma -2022/12/20 | 155951 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma -2022/12/20 | 79797 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma -2022/12/20 | 81474 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma -2022/12/20 | 296235 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma -2022/12/20 | 25216 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma -2022/12/20 | 113223 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma -2022/12/20 | 73344 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma -2022/12/20 | 115700 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma -2022/12/20 | 44093 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma -2022/12/20 | 571878 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma -2022/12/20 | 247556 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma -2022/12/20 | 180176 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma -2022/12/20 | 109756 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma -2022/12/20 | 18362 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma -2022/12/20 | 30498 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma -2022/12/20 | 702355 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma -2022/12/20 | 602056 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma -2022/12/20 | 529968 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma -2022/12/20 | 103718 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma -2022/12/20 | 1985368 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma -2022/12/20 | 73953 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma -2022/12/20 | 32315 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma -2022/12/20 | 8829 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma -2022/12/20 | 209014 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma -2022/12/20 | 287100 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma -2022/12/20 | 105478 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma -2022/12/20 | 140785 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma -2022/12/20 | 327205 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma -2022/12/20 | 181674 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma -2022/12/20 | 55855 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma -2022/12/20 | 35226 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma -2022/12/20 | 43847 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma -2022/12/20 | 48138 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma -2022/12/20 | 52540 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma -2022/12/20 | 213902 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma -2022/12/20 | 41711 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma -2022/12/20 | 826914 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma -2022/12/20 | 203717 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma -2022/12/20 | 245732 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma -2022/12/20 | 88411 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma -2022/12/20 | 1337660 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma -2022/12/20 | 24025 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma -2022/12/20 | 37418 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma -2022/12/20 | 72797 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma -2022/12/20 | 58416 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma -2022/12/20 | 759794 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma -2022/12/20 | 1515522 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma -2022/12/20 | 52735 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma -2022/12/20 | 64357 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma -2022/12/20 | 27721 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma -2022/12/20 | 18488 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma -2022/12/20 | 71203 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma -2022/12/20 | 173395 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma -2022/12/20 | 69197 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma -2022/12/20 | 109288 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma -2022/12/20 | 2832462 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma -2022/12/20 | 62045 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma -2022/12/20 | 42469 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma -2022/12/20 | 33940 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma -2022/12/20 | 74351 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma -2022/12/20 | 352492 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma -2022/12/20 | 57425 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma -2022/12/20 | 637449 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma -2022/12/20 | 43689 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma -2022/12/20 | 307226 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma -2022/12/20 | 1862215 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma -2022/12/20 | 1633261 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma -2022/12/20 | 14447 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma +2022/12/23 | 751921 | systems/win32/miktex/tm/packages/next/files.csv.lzma +2022/12/23 | 57197 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma +2022/12/23 | 1167193 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma +2022/12/23 | 31788 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma +2022/12/23 | 35319 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma +2022/12/23 | 65893 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma +2022/12/23 | 101631 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma +2022/12/23 | 77654 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma +2022/12/23 | 31620 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma +2022/12/23 | 394637 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma +2022/12/23 | 37094 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma +2022/12/23 | 57842 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma +2022/12/23 | 271541 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma +2022/12/23 | 196594 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma +2022/12/23 | 103620 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma +2022/12/23 | 24052 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma +2022/12/23 | 472957 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma +2022/12/23 | 52664 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma +2022/12/23 | 327340 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma +2022/12/23 | 45769 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma +2022/12/23 | 136095 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma +2022/12/23 | 1457484 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma +2022/12/23 | 121081 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma +2022/12/23 | 48968 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma +2022/12/23 | 28811 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma +2022/12/23 | 62787 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma +2022/12/23 | 155980 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma +2022/12/23 | 79754 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma +2022/12/23 | 81264 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma +2022/12/23 | 296255 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma +2022/12/23 | 25243 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma +2022/12/23 | 112941 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma +2022/12/23 | 73337 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma +2022/12/23 | 115767 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma +2022/12/23 | 44073 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma +2022/12/23 | 571745 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma +2022/12/23 | 247487 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma +2022/12/23 | 175515 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma +2022/12/23 | 109856 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma +2022/12/23 | 18383 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma +2022/12/23 | 30489 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma +2022/12/23 | 702785 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma +2022/12/23 | 602730 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma +2022/12/23 | 530061 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma +2022/12/23 | 103718 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma +2022/12/23 | 1995887 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma +2022/12/23 | 73971 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma +2022/12/23 | 32400 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma +2022/12/23 | 8827 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma +2022/12/23 | 209199 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma +2022/12/23 | 287139 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma +2022/12/23 | 105318 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma +2022/12/23 | 140700 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma +2022/12/23 | 326752 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma +2022/12/23 | 181663 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma +2022/12/23 | 55780 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma +2022/12/23 | 35213 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma +2022/12/23 | 43869 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma +2022/12/23 | 48160 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma +2022/12/23 | 52525 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma +2022/12/23 | 213714 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma +2022/12/23 | 41736 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma +2022/12/23 | 827257 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma +2022/12/23 | 203394 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma +2022/12/23 | 245719 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma +2022/12/23 | 88428 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma +2022/12/23 | 1336776 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma +2022/12/23 | 24034 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma +2022/12/23 | 37415 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma +2022/12/23 | 72740 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma +2022/12/23 | 58713 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma +2022/12/23 | 759352 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma +2022/12/23 | 1514492 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma +2022/12/23 | 52754 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma +2022/12/23 | 64339 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma +2022/12/23 | 27671 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma +2022/12/23 | 18493 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma +2022/12/23 | 71211 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma +2022/12/23 | 173409 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma +2022/12/23 | 69230 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma +2022/12/23 | 109250 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma +2022/12/23 | 2831432 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma +2022/12/23 | 61772 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma +2022/12/23 | 42457 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma +2022/12/23 | 33881 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma +2022/12/23 | 74355 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma +2022/12/23 | 352561 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma +2022/12/23 | 57434 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma +2022/12/23 | 637422 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma +2022/12/23 | 43711 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma +2022/12/23 | 307507 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma +2022/12/23 | 1862150 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma +2022/12/23 | 1633541 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma +2022/12/23 | 14453 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma 2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma -2022/12/20 | 1150 | systems/win32/miktex/tm/packages/next/pr.ini +2022/12/23 | 1150 | systems/win32/miktex/tm/packages/next/pr.ini 2018/07/06 | 145915 | systems/win32/miktex/tm/packages/nexus-otf.tar.lzma 2017/03/30 | 191149 | systems/win32/miktex/tm/packages/nfssext-cfr.tar.lzma 2022/12/11 | 604085 | systems/win32/miktex/tm/packages/nicefilelist__doc.tar.lzma @@ -305681,6 +305681,9 @@ 2022/11/15 | 139279 | systems/win32/miktex/tm/packages/pdfmanagement-testphase__source.tar.lzma 2022/11/15 | 75410 | systems/win32/miktex/tm/packages/pdfmanagement-testphase.tar.lzma 2011/08/11 | 384460 | systems/win32/miktex/tm/packages/pdfmarginpar.tar.lzma +2022/12/23 | 215831 | systems/win32/miktex/tm/packages/pdfmsym__doc.tar.lzma +2022/12/23 | 7978 | systems/win32/miktex/tm/packages/pdfmsym__source.tar.lzma +2022/12/23 | 5909 | systems/win32/miktex/tm/packages/pdfmsym.tar.lzma 2022/08/28 | 567970 | systems/win32/miktex/tm/packages/pdfoverlay__doc.tar.lzma 2022/08/28 | 6310 | systems/win32/miktex/tm/packages/pdfoverlay__source.tar.lzma 2022/08/28 | 3190 | systems/win32/miktex/tm/packages/pdfoverlay.tar.lzma @@ -305935,7 +305938,7 @@ 2022/02/22 | 6917 | systems/win32/miktex/tm/packages/preview.tar.lzma 2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma 2021/04/23 | 274028 | systems/win32/miktex/tm/packages/principia.tar.lzma -2022/12/20 | 933 | systems/win32/miktex/tm/packages/pr.ini +2022/12/23 | 957 | systems/win32/miktex/tm/packages/pr.ini 2010/09/27 | 248469 | systems/win32/miktex/tm/packages/printlen.tar.lzma 2008/06/17 | 77313 | systems/win32/miktex/tm/packages/proba.tar.lzma 2017/07/12 | 988486 | systems/win32/miktex/tm/packages/probsoln.tar.lzma @@ -307180,6 +307183,9 @@ 2021/10/14 | 141616 | systems/win32/miktex/tm/packages/truthtable__doc.tar.lzma 2021/10/14 | 4427 | systems/win32/miktex/tm/packages/truthtable__source.tar.lzma 2021/10/14 | 2351 | systems/win32/miktex/tm/packages/truthtable.tar.lzma +2022/12/23 | 47577 | systems/win32/miktex/tm/packages/tsvtemplate__doc.tar.lzma +2022/12/23 | 2317 | systems/win32/miktex/tm/packages/tsvtemplate__source.tar.lzma +2022/12/23 | 1569 | systems/win32/miktex/tm/packages/tsvtemplate.tar.lzma 2005/06/02 | 90162 | systems/win32/miktex/tm/packages/ttcmex.cab 2016/11/04 | 106224 | systems/win32/miktex/tm/packages/ttf2pk.tar.lzma 2010/12/13 | 260868 | systems/win32/miktex/tm/packages/tucv.tar.lzma @@ -307306,9 +307312,9 @@ 2022/10/15 | 129483 | systems/win32/miktex/tm/packages/unigrazpub__doc.tar.lzma 2022/10/15 | 14893 | systems/win32/miktex/tm/packages/unigrazpub__source.tar.lzma 2022/10/15 | 6140 | systems/win32/miktex/tm/packages/unigrazpub.tar.lzma -2022/11/27 | 46361 | systems/win32/miktex/tm/packages/unimath-plain-xetex__doc.tar.lzma -2022/11/27 | 4724 | systems/win32/miktex/tm/packages/unimath-plain-xetex__source.tar.lzma -2022/11/27 | 6801 | systems/win32/miktex/tm/packages/unimath-plain-xetex.tar.lzma +2022/12/23 | 47979 | systems/win32/miktex/tm/packages/unimath-plain-xetex__doc.tar.lzma +2022/12/23 | 6343 | systems/win32/miktex/tm/packages/unimath-plain-xetex__source.tar.lzma +2022/12/23 | 6939 | systems/win32/miktex/tm/packages/unimath-plain-xetex.tar.lzma 2021/01/02 | 70067 | systems/win32/miktex/tm/packages/uninormalize.tar.lzma 2019/12/20 | 298441 | systems/win32/miktex/tm/packages/uniquecounter.tar.lzma 2022/05/04 | 197277 | systems/win32/miktex/tm/packages/unisc__doc.tar.lzma @@ -307962,7 +307968,7 @@ 2014/07/05 | 611 | systems/win32/yandy/README 2014/07/05 | 1004628 | systems/win32/yandy/yandy-src.tar.xz 2014/07/05 | 1012416 | systems/win32/yandy.zip -2022/12/23 | 186 | timestamp +2022/12/24 | 186 | timestamp 2002/08/26 | 61898 | usergrps/dante/antrag.pdf 2002/08/26 | 118217 | usergrps/dante/antrag.ps 2021/11/11 | 917 | usergrps/dante/dtk/doc/beispiel.bib diff --git a/FILES.byname.gz b/FILES.byname.gz index 6633ada383..553196e759 100644 Binary files a/FILES.byname.gz and b/FILES.byname.gz differ diff --git a/FILES.last07days b/FILES.last07days index f4fce0989e..58e37c75c0 100644 --- a/FILES.last07days +++ b/FILES.last07days @@ -1,22 +1,245 @@ +2022/12/23 | 9 | macros/latex/contrib/saveenv/DEPENDS.txt +2022/12/23 | 957 | systems/win32/miktex/tm/packages/pr.ini +2022/12/23 | 936 | systems/texlive/tlnet/archive/collection-luatex.r65333.tar.xz +2022/12/23 | 929724 | macros/generic/markdown/markdown.pdf +2022/12/23 | 88428 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma +2022/12/23 | 8827 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma +2022/12/23 | 8729 | macros/latex/contrib/saveenv/saveenv.tex +2022/12/23 | 8652 | macros/latex/contrib/tagpdf/ex-AF-file.pdf +2022/12/23 | 836776 | macros/generic/markdown/markdown.html +2022/12/23 | 834068 | systems/texlive/tlnet/archive/lyluatex.doc.r65332.tar.xz +2022/12/23 | 8281 | macros/latex/contrib/tagpdf/global-ex.png +2022/12/23 | 827257 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma +2022/12/23 | 81264 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma +2022/12/23 | 808 | macros/luatex/generic/luakeys/luakeys.sty +2022/12/23 | 807017 | systems/win32/miktex/tm/packages/lyluatex__doc.tar.lzma +2022/12/23 | 801 | macros/latex/contrib/tagpdf/ex-tagpdf-template.tex +2022/12/23 | 7978 | systems/win32/miktex/tm/packages/pdfmsym__source.tar.lzma +2022/12/23 | 79754 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma +2022/12/23 | 795 | macros/luatex/generic/luakeys/luakeys-debug.sty +2022/12/23 | 7854 | macros/latex/contrib/tagpdf/ex-formula-problem-luatex.pdf +2022/12/23 | 777 | macros/latex/contrib/tagpdf/ex-spaceglyph-listings.tex +2022/12/23 | 77654 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma +2022/12/23 | 773 | macros/latex/contrib/pythonimmediate/README +2022/12/23 | 7658 | systems/win32/miktex/tm/packages/graphicscache__source.tar.lzma +2022/12/23 | 75 | macros/generic/markdown/examples/scientists.csv +2022/12/23 | 759352 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma +2022/12/23 | 751958 | systems/win32/miktex/tm/packages/files.csv.lzma +2022/12/23 | 751921 | systems/win32/miktex/tm/packages/next/files.csv.lzma +2022/12/23 | 74355 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma +2022/12/23 | 73971 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma +2022/12/23 | 738728 | macros/latex/contrib/tagpdf/tagpdf.pdf +2022/12/23 | 735 | macros/latex/contrib/saveenv/README +2022/12/23 | 7340 | macros/latex/contrib/pythonimmediate/pythonimmediate.sty +2022/12/23 | 73337 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma +2022/12/23 | 730937 | macros/generic/markdown/markdown.dtx +2022/12/23 | 72740 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma +2022/12/23 | 7152 | systems/texlive/tlnet/archive/unimath-plain-xetex.r65334.tar.xz +2022/12/23 | 71211 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma +2022/12/23 | 702785 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma +2022/12/23 | 701 | macros/luatex/generic/luakeys/luakeys.tex +2022/12/23 | 6939 | systems/win32/miktex/tm/packages/unimath-plain-xetex.tar.lzma +2022/12/23 | 69230 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma +2022/12/23 | 69227 | macros/latex/contrib/pythonimmediate/pythonimmediate_script_textopy.py +2022/12/23 | 6842 | macros/latex/contrib/tagpdf/ex-softhyphen.pdf +2022/12/23 | 6626 | macros/latex/contrib/tagpdf/ex-attribute-luatex.pdf +2022/12/23 | 65893 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma +2022/12/23 | 64339 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma +2022/12/23 | 637422 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma +2022/12/23 | 6343 | systems/win32/miktex/tm/packages/unimath-plain-xetex__source.tar.lzma +2022/12/23 | 62787 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma +2022/12/23 | 61772 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma +2022/12/23 | 61066 | macros/luatex/generic/luakeys/luakeys-doc.tex +2022/12/23 | 602730 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma +2022/12/23 | 5909 | systems/win32/miktex/tm/packages/pdfmsym.tar.lzma +2022/12/23 | 58713 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma +2022/12/23 | 5855 | macros/luatex/generic/luakeys/README.md +2022/12/23 | 5838 | macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty +2022/12/23 | 5834747 | systems/texlive/tlnet/install-tl-unx.tar.gz +2022/12/23 | 5797 | macros/latex/contrib/tagpdf/ex-patch-sectioning-memoir.tex +2022/12/23 | 57842 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma +2022/12/23 | 57434 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma +2022/12/23 | 57197 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma +2022/12/23 | 571745 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma +2022/12/23 | 56286 | macros/latex/contrib/tagpdf/tagpdf-struct.dtx +2022/12/23 | 55780 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma +2022/12/23 | 53192 | systems/texlive/tlnet/archive/unimath-plain-xetex.doc.r65334.tar.xz +2022/12/23 | 530061 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma +2022/12/23 | 52754 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma +2022/12/23 | 52664 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma +2022/12/23 | 52525 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma +2022/12/23 | 5107 | macros/latex/contrib/tagpdf/tagpdf-space.dtx 2022/12/23 | 49273 | macros/xetex/plain/unimath-plain-xetex/doc/unimath-plain-xetex-doc.pdf +2022/12/23 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2022/12/23 | 48968 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma 2022/12/23 | 4866 | macros/xetex/plain/unimath-plain-xetex/source/unimath-plain-genalphabet.lua +2022/12/23 | 48608 | systems/texlive/tlnet/archive/tsvtemplate.doc.r65333.tar.xz +2022/12/23 | 48160 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma +2022/12/23 | 47979 | systems/win32/miktex/tm/packages/unimath-plain-xetex__doc.tar.lzma +2022/12/23 | 47577 | systems/win32/miktex/tm/packages/tsvtemplate__doc.tar.lzma +2022/12/23 | 4738 | macros/latex/contrib/saveenv/saveenv.sty +2022/12/23 | 472957 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma +2022/12/23 | 4618 | macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf +2022/12/23 | 45769 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma +2022/12/23 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2022/12/23 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2022/12/23 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2022/12/23 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2022/12/23 | 4530 | macros/generic/markdown/markdown.css +2022/12/23 | 44073 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma 2022/12/23 | 43924 | macros/xetex/plain/unimath-plain-xetex/tex/unimath-plain-alphabet.tex +2022/12/23 | 43869 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma +2022/12/23 | 4377 | macros/generic/markdown/docstrip.cfg +2022/12/23 | 43711 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma +2022/12/23 | 42959 | macros/latex/contrib/tagpdf/tagpdf-roles.dtx +2022/12/23 | 429551 | macros/latex/contrib/pythonimmediate.zip +2022/12/23 | 4284 | macros/latex/contrib/tagpdf/ex-patch-sectioning-koma.tex +2022/12/23 | 42457 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma +2022/12/23 | 423816 | systems/texlive/tlnet/archive/texlive-scripts.doc.r65329.tar.xz +2022/12/23 | 420991 | macros/luatex/generic/luakeys.zip +2022/12/23 | 41736 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma +2022/12/23 | 4153 | macros/latex/contrib/tagpdf/ex-alt-actualtext.tex +2022/12/23 | 40913 | macros/latex/contrib/tagpdf/tagpdf-backend.dtx +2022/12/23 | 4026296 | biblio/ctan-bibdata.zip +2022/12/23 | 402484 | macros/latex/contrib/pythonimmediate/pythonimmediate.pdf +2022/12/23 | 399930 | macros/latex/contrib/saveenv.zip +2022/12/23 | 398632 | macros/luatex/generic/luakeys/luakeys-doc.pdf +2022/12/23 | 395762 | macros/latex/contrib/saveenv/saveenv.pdf +2022/12/23 | 394637 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma +2022/12/23 | 3928 | macros/latex/contrib/tagpdf/tagpdf.ins +2022/12/23 | 3792 | systems/win32/miktex/tm/packages/graphicscache.tar.lzma +2022/12/23 | 37840 | macros/luatex/generic/luakeys/luakeys.lua +2022/12/23 | 37415 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma +2022/12/23 | 37094 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma +2022/12/23 | 3632523 | biblio/ctan-bibdata/ctan.pdf +2022/12/23 | 3608 | macros/generic/markdown/examples/example.md +2022/12/23 | 35 | macros/latex/contrib/pythonimmediate/DEPENDS.txt +2022/12/23 | 35319 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma +2022/12/23 | 352561 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma +2022/12/23 | 35213 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma +2022/12/23 | 34230 | macros/latex/contrib/tagpdf/tagpdf-data.dtx +2022/12/23 | 33881 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma +2022/12/23 | 327340 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma +2022/12/23 | 326752 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma +2022/12/23 | 32400 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma +2022/12/23 | 31 | macros/generic/markdown/VERSION +2022/12/23 | 31788 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma +2022/12/23 | 31620 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma +2022/12/23 | 307561 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma +2022/12/23 | 307507 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma +2022/12/23 | 30489 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma +2022/12/23 | 30466 | macros/latex/contrib/tagpdf/tagpdf-checks.dtx +2022/12/23 | 296255 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma +2022/12/23 | 28939 | macros/generic/markdown/CHANGES.md +2022/12/23 | 28811 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma +2022/12/23 | 287139 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma +2022/12/23 | 28415 | systems/win32/miktex/tm/packages/lyluatex__source.tar.lzma +2022/12/23 | 2831432 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma +2022/12/23 | 27671 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma +2022/12/23 | 2752029 | biblio/ctan-bibdata/ctan.bib +2022/12/23 | 27277 | macros/latex/contrib/tagpdf/tagpdf-user.dtx +2022/12/23 | 271541 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma +2022/12/23 | 26784 | macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx +2022/12/23 | 2637 | macros/latex/contrib/tagpdf/ex-patch-list.tex +2022/12/23 | 25518557 | systems/texlive/tlnet/install-tl.zip +2022/12/23 | 2528 | macros/latex/contrib/tagpdf/ex-patch-list-obsolete.tex +2022/12/23 | 25243 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma +2022/12/23 | 247487 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma +2022/12/23 | 245719 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma +2022/12/23 | 2439412 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2022/12/23 | 24052 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma +2022/12/23 | 24034 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma +2022/12/23 | 2317 | systems/win32/miktex/tm/packages/tsvtemplate__source.tar.lzma +2022/12/23 | 22818 | macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf +2022/12/23 | 2262 | macros/latex/contrib/tagpdf/tagpdf-code.tex +2022/12/23 | 22371 | macros/generic/markdown/libraries/markdown-tinyyaml.lua +2022/12/23 | 215831 | systems/win32/miktex/tm/packages/pdfmsym__doc.tar.lzma +2022/12/23 | 2150 | macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.tex +2022/12/23 | 2144330 | macros/latex/contrib/tagpdf.zip +2022/12/23 | 213714 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma 2022/12/23 | 21103 | macros/xetex/plain/unimath-plain-xetex/tex/unimath-plain-xetex.tex +2022/12/23 | 21067 | macros/latex/contrib/tagpdf/ex-patch-sectioning-memoir.pdf +2022/12/23 | 209199 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma +2022/12/23 | 20670 | macros/latex/contrib/tagpdf/tagpdf.dtx +2022/12/23 | 20433915 | systems/texlive/tlnet/install-tl-windows.exe +2022/12/23 | 203394 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma +2022/12/23 | 2022 | macros/latex/contrib/tagpdf/link-figure-input.tex +2022/12/23 | 1995887 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma +2022/12/23 | 196594 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma +2022/12/23 | 19363 | macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf +2022/12/23 | 1863966 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma +2022/12/23 | 1862150 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma +2022/12/23 | 18493 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma +2022/12/23 | 18461 | macros/latex/contrib/tagpdf/ex-patch-sectioning-koma-luatex.pdf +2022/12/23 | 18383 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma +2022/12/23 | 181663 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma +2022/12/23 | 17909045 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2022/12/23 | 17894 | macros/generic/markdown/README.md +2022/12/23 | 17742 | macros/latex/contrib/tagpdf/ex-alt-actualtext-luatex.pdf +2022/12/23 | 177171 | systems/win32/miktex/tm/packages/graphicscache__doc.tar.lzma +2022/12/23 | 1765 | macros/generic/markdown/examples/latex.tex +2022/12/23 | 175515 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma +2022/12/23 | 17505 | macros/latex/contrib/pythonimmediate/pythonimmediate.tex +2022/12/23 | 1743 | macros/generic/markdown/examples/context-mkiv.tex +2022/12/23 | 173409 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma +2022/12/23 | 1730 | macros/latex/contrib/tagpdf/tagpdf.bib +2022/12/23 | 16888 | macros/latex/contrib/tagpdf/ex-patch-list-luatex.pdf +2022/12/23 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx +2022/12/23 | 1649 | macros/latex/contrib/pythonimmediate/pythonimmediate_script_pytotex.py +2022/12/23 | 1633541 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma +2022/12/23 | 1633330 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma +2022/12/23 | 1569 | systems/win32/miktex/tm/packages/tsvtemplate.tar.lzma +2022/12/23 | 155980 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma +2022/12/23 | 1552 | macros/generic/markdown/examples/context-mkii.tex +2022/12/23 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2022/12/23 | 1537 | macros/latex/contrib/tagpdf/ex-structure-obsolete.tex +2022/12/23 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2022/12/23 | 15239 | macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx +2022/12/23 | 1523569 | macros/latex/contrib/tagpdf/tagpdf-code.pdf +2022/12/23 | 1514492 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma +2022/12/23 | 14857 | systems/win32/miktex/tm/packages/lyluatex.tar.lzma +2022/12/23 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2022/12/23 | 14576 | systems/texlive/tlnet/archive/lyluatex.r65332.tar.xz +2022/12/23 | 1457484 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma +2022/12/23 | 14508 | macros/latex/contrib/tagpdf/tagpdf-tree.dtx +2022/12/23 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2022/12/23 | 14480 | macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx +2022/12/23 | 14453 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma +2022/12/23 | 141163 | macros/latex/contrib/tagpdf/pac3.PNG +2022/12/23 | 140951 | macros/generic/markdown/markdown.png +2022/12/23 | 140700 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma +2022/12/23 | 1398 | macros/latex/contrib/tagpdf/ex-attribute.tex +2022/12/23 | 136095 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma +2022/12/23 | 1343442 | install/macros/generic/markdown.tds.zip +2022/12/23 | 1336776 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma +2022/12/23 | 1333 | macros/generic/markdown/markdown.ins +2022/12/23 | 1312 | systems/texlive/tlnet/archive/tsvtemplate.r65333.tar.xz +2022/12/23 | 1273531 | macros/generic/markdown.zip +2022/12/23 | 1237 | macros/latex/contrib/tagpdf/ex-AF-file.tex +2022/12/23 | 121081 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma 2022/12/23 | 12037 | macros/xetex/plain/unimath-plain-xetex/doc/unimath-plain-xetex-doc.tex +2022/12/23 | 1179 | macros/luatex/generic/luakeys/luakeys-debug.tex +2022/12/23 | 1176 | macros/latex/contrib/tagpdf/README.md +2022/12/23 | 1167193 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma +2022/12/23 | 115767 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma +2022/12/23 | 1150 | systems/win32/miktex/tm/packages/next/pr.ini +2022/12/23 | 113724 | systems/texlive/tlnet/archive/texlive-scripts.r65329.tar.xz +2022/12/23 | 112941 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma +2022/12/23 | 109856 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma +2022/12/23 | 109250 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma +2022/12/23 | 1073 | macros/latex/contrib/tagpdf/ex-softhyphen.tex +2022/12/23 | 106650 | macros/latex/contrib/tagpdf/tagpdf.tex +2022/12/23 | 105318 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma +2022/12/23 | 103718 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma +2022/12/23 | 103620 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma +2022/12/23 | 1019 | macros/latex/contrib/tagpdf/ex-formula-problem.tex +2022/12/23 | 101631 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma 2022/12/22 | 976404 | systems/texlive/tlnet/archive/tex4ht.r65326.tar.xz 2022/12/22 | 97472 | systems/texlive/tlnet/archive/texinfo.r65323.tar.xz +2022/12/22 | 7464 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2022/12/22 | 69512 | fonts/cm/tfm.zip 2022/12/22 | 65314 | macros/xetex/plain/unimath-plain-xetex.zip -2022/12/22 | 5834590 | systems/texlive/tlnet/install-tl-unx.tar.gz 2022/12/22 | 5660 | systems/texlive/tlnet/archive/pdfmsym.r65324.tar.xz -2022/12/22 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 -2022/12/22 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2022/12/22 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc -2022/12/22 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2022/12/22 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc -2022/12/22 | 423684 | systems/texlive/tlnet/archive/texlive-scripts.doc.r65323.tar.xz -2022/12/22 | 4022506 | biblio/ctan-bibdata.zip -2022/12/22 | 3629216 | biblio/ctan-bibdata/ctan.pdf 2022/12/22 | 344 | systems/texlive/tlnet/archive/xput.x86_64-linuxmusl.r65325.tar.xz 2022/12/22 | 344 | systems/texlive/tlnet/archive/xput.x86_64-darwinlegacy.r65325.tar.xz 2022/12/22 | 340 | systems/texlive/tlnet/archive/xput.x86_64-solaris.r65325.tar.xz @@ -32,26 +255,14 @@ 2022/12/22 | 336 | systems/texlive/tlnet/archive/xput.i386-cygwin.r65325.tar.xz 2022/12/22 | 336 | systems/texlive/tlnet/archive/xput.armhf-linux.r65325.tar.xz 2022/12/22 | 336 | systems/texlive/tlnet/archive/xput.aarch64-linux.r65325.tar.xz -2022/12/22 | 2751756 | biblio/ctan-bibdata/ctan.bib -2022/12/22 | 25518497 | systems/texlive/tlnet/install-tl.zip -2022/12/22 | 2438944 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2022/12/22 | 23244 | systems/texlive/tlnet/archive/xput.r65325.tar.xz 2022/12/22 | 222104 | systems/texlive/tlnet/archive/pdfmsym.doc.r65324.tar.xz -2022/12/22 | 20433623 | systems/texlive/tlnet/install-tl-windows.exe -2022/12/22 | 17907721 | systems/texlive/tlnet/tlpkg/texlive.tlpdb -2022/12/22 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx 2022/12/22 | 1556 | systems/texlive/tlnet/archive/collection-pictures.r65325.tar.xz -2022/12/22 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 -2022/12/22 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 -2022/12/22 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2022/12/22 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 2022/12/22 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r65326.tar.xz 2022/12/22 | 1302060 | systems/texlive/tlnet/archive/tex4ht.source.r65326.tar.xz 2022/12/22 | 12697552 | systems/texlive/tlnet/archive/xput.doc.r65325.tar.xz -2022/12/22 | 113672 | systems/texlive/tlnet/archive/texlive-scripts.r65323.tar.xz 2022/12/21 | 985 | support/lyluatex/lyluatexmanual.cls 2022/12/21 | 97207 | support/lyluatex/lyluatex.tex -2022/12/21 | 7223 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2022/12/21 | 7072 | systems/texlive/tlnet/archive/graphicscache.source.r65318.tar.xz 2022/12/21 | 58 | support/lyluatex/latexmkrc 2022/12/21 | 57753 | macros/luatex/generic/tsvtemplate/tsvtemplate.pdf @@ -85,181 +296,81 @@ 2022/12/21 | 1107 | support/lyluatex/lyluatexbase.cls 2022/12/21 | 1090 | support/lyluatex/LICENSE 2022/12/21 | 10256 | support/lyluatex/lyluatex.sty -2022/12/20 | 933 | systems/win32/miktex/tm/packages/pr.ini -2022/12/20 | 88411 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma -2022/12/20 | 8829 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma 2022/12/20 | 85971 | systems/win32/miktex/tm/packages/jourcl__doc.tar.lzma -2022/12/20 | 826914 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma 2022/12/20 | 82633 | systems/win32/miktex/tm/packages/ibrackets__doc.tar.lzma 2022/12/20 | 82268 | systems/texlive/tlnet/archive/ibrackets.doc.r65312.tar.xz -2022/12/20 | 81474 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma -2022/12/20 | 79797 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma 2022/12/20 | 79004 | systems/texlive/tlnet/archive/dtk.doc.r65315.tar.xz 2022/12/20 | 7803 | systems/win32/miktex/tm/packages/pst-flags__source.tar.lzma -2022/12/20 | 77620 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma -2022/12/20 | 759794 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma -2022/12/20 | 753546 | systems/win32/miktex/tm/packages/next/files.csv.lzma -2022/12/20 | 752827 | systems/win32/miktex/tm/packages/files.csv.lzma -2022/12/20 | 74351 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma -2022/12/20 | 73953 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma -2022/12/20 | 73344 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma -2022/12/20 | 72797 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma 2022/12/20 | 7139 | systems/win32/miktex/tm/packages/eolang.tar.lzma -2022/12/20 | 71203 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma -2022/12/20 | 702355 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma -2022/12/20 | 69197 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma 2022/12/20 | 6809 | systems/win32/miktex/tm/packages/ocgx2__doc.tar.lzma -2022/12/20 | 65794 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma -2022/12/20 | 64357 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma -2022/12/20 | 637449 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma 2022/12/20 | 6359 | systems/win32/miktex/tm/packages/bibcop.tar.lzma -2022/12/20 | 62793 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma -2022/12/20 | 62045 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma -2022/12/20 | 602056 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma 2022/12/20 | 601493 | systems/win32/miktex/tm/packages/l3kernel__source.tar.lzma 2022/12/20 | 5855 | systems/win32/miktex/tm/packages/bibcop__source.tar.lzma -2022/12/20 | 58416 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma -2022/12/20 | 57857 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma -2022/12/20 | 57425 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma -2022/12/20 | 57187 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma -2022/12/20 | 571878 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma -2022/12/20 | 55855 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma -2022/12/20 | 529968 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma -2022/12/20 | 52735 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma -2022/12/20 | 52685 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma -2022/12/20 | 52540 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma -2022/12/20 | 48968 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma -2022/12/20 | 48138 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma -2022/12/20 | 472932 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma 2022/12/20 | 46343 | systems/win32/miktex/tm/packages/l3packages__source.tar.lzma -2022/12/20 | 45804 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma 2022/12/20 | 442371 | systems/win32/miktex/tm/packages/ufrgscca__doc.tar.lzma -2022/12/20 | 44093 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma -2022/12/20 | 43847 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma -2022/12/20 | 43689 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma 2022/12/20 | 4286 | systems/win32/miktex/tm/packages/nodetree__source.tar.lzma -2022/12/20 | 42469 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma 2022/12/20 | 42426 | systems/win32/miktex/tm/packages/bithesis__source.tar.lzma 2022/12/20 | 42076 | systems/win32/miktex/tm/packages/platex.tar.lzma 2022/12/20 | 4179 | systems/win32/miktex/tm/packages/ibrackets__source.tar.lzma -2022/12/20 | 41711 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma 2022/12/20 | 40264 | systems/texlive/tlnet/archive/bithesis.source.r65314.tar.xz -2022/12/20 | 394717 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma 2022/12/20 | 389836 | systems/win32/miktex/tm/packages/luakeys__doc.tar.lzma 2022/12/20 | 3808 | systems/texlive/tlnet/archive/ibrackets.source.r65312.tar.xz 2022/12/20 | 376453 | systems/win32/miktex/tm/packages/msu-thesis__source.tar.lzma -2022/12/20 | 37418 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma -2022/12/20 | 37063 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma 2022/12/20 | 35763 | systems/win32/miktex/tm/packages/pdfpages__source.tar.lzma -2022/12/20 | 35315 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma -2022/12/20 | 352492 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma -2022/12/20 | 35226 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma 2022/12/20 | 346187 | systems/win32/miktex/tm/packages/bibcop__doc.tar.lzma -2022/12/20 | 33940 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma 2022/12/20 | 33602 | systems/win32/miktex/tm/packages/jourcl__source.tar.lzma -2022/12/20 | 327761 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma -2022/12/20 | 327205 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma 2022/12/20 | 324272 | systems/win32/miktex/tm/packages/pdfpages__doc.tar.lzma -2022/12/20 | 32315 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma 2022/12/20 | 3198 | systems/win32/miktex/tm/packages/jourcl.tar.lzma -2022/12/20 | 31732 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma -2022/12/20 | 31611 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma 2022/12/20 | 30861 | systems/win32/miktex/tm/packages/srdp-mathematik.tar.lzma -2022/12/20 | 307286 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma -2022/12/20 | 307226 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma -2022/12/20 | 30498 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma -2022/12/20 | 296235 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma -2022/12/20 | 28752 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma 2022/12/20 | 28742 | systems/win32/miktex/tm/packages/ufrgscca.tar.lzma -2022/12/20 | 287100 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma 2022/12/20 | 2850 | systems/win32/miktex/tm/packages/biblatex-lncs.tar.lzma -2022/12/20 | 2832462 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma -2022/12/20 | 27721 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma 2022/12/20 | 274134 | systems/win32/miktex/tm/packages/nodetree__doc.tar.lzma 2022/12/20 | 2734118 | systems/win32/miktex/tm/packages/simpleicons.tar.lzma -2022/12/20 | 271266 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma 2022/12/20 | 26091 | systems/win32/miktex/tm/packages/proflycee.tar.lzma 2022/12/20 | 25924 | systems/texlive/tlnet/archive/proflycee.r65313.tar.xz -2022/12/20 | 25216 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma -2022/12/20 | 247556 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma -2022/12/20 | 245732 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma 2022/12/20 | 24370 | systems/win32/miktex/tm/packages/bithesis.tar.lzma -2022/12/20 | 24121 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma -2022/12/20 | 24025 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma 2022/12/20 | 23436 | systems/win32/miktex/tm/packages/xput.tar.lzma 2022/12/20 | 23343 | macros/latex/contrib/graphicscache/graphicscache.dtx 2022/12/20 | 23108 | systems/win32/miktex/tm/packages/miktex-misc.tar.lzma 2022/12/20 | 2294 | macros/latex/contrib/graphicscache/README.md 2022/12/20 | 22162 | systems/win32/miktex/tm/packages/l3packages.tar.lzma 2022/12/20 | 21960 | systems/texlive/tlnet/archive/bithesis.r65314.tar.xz -2022/12/20 | 213902 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma -2022/12/20 | 209014 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma -2022/12/20 | 203717 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma 2022/12/20 | 1995017 | systems/win32/miktex/tm/packages/simpleicons__doc.tar.lzma -2022/12/20 | 1985368 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma -2022/12/20 | 196618 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma 2022/12/20 | 1957969 | systems/win32/miktex/tm/packages/platex__doc.tar.lzma -2022/12/20 | 1863002 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma -2022/12/20 | 1862215 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma -2022/12/20 | 18488 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma -2022/12/20 | 18362 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma 2022/12/20 | 1834430 | systems/win32/miktex/tm/packages/l3packages__doc.tar.lzma 2022/12/20 | 182981 | macros/latex/contrib/graphicscache.zip -2022/12/20 | 181674 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma -2022/12/20 | 180176 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma 2022/12/20 | 17915 | systems/win32/miktex/tm/packages/simpleicons__source.tar.lzma 2022/12/20 | 176773 | macros/latex/contrib/graphicscache/graphicscache.pdf 2022/12/20 | 17498 | systems/win32/miktex/tm/packages/luakeys__source.tar.lzma 2022/12/20 | 174870 | systems/win32/miktex/tm/packages/l3kernel.tar.lzma 2022/12/20 | 17477 | systems/win32/miktex/tm/packages/ocgx2.tar.lzma -2022/12/20 | 173395 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma 2022/12/20 | 1644 | systems/texlive/tlnet/archive/collection-mathscience.r65312.tar.xz 2022/12/20 | 16419 | systems/win32/miktex/tm/packages/ufrgscca__source.tar.lzma -2022/12/20 | 1633261 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma -2022/12/20 | 1632725 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma 2022/12/20 | 16024 | systems/win32/miktex/tm/packages/eolang__source.tar.lzma 2022/12/20 | 1586746 | systems/win32/miktex/tm/packages/eolang__doc.tar.lzma 2022/12/20 | 1577021 | systems/win32/miktex/tm/packages/pst-flags.tar.lzma -2022/12/20 | 155951 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma 2022/12/20 | 154569 | systems/win32/miktex/tm/packages/proflycee__source.tar.lzma 2022/12/20 | 1516 | macros/latex/contrib/graphicscache/LICENSE -2022/12/20 | 1515522 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma 2022/12/20 | 14932 | systems/texlive/tlnet/archive/dtk.r65315.tar.xz 2022/12/20 | 1478748 | systems/texlive/tlnet/archive/proflycee.doc.r65313.tar.xz -2022/12/20 | 1457300 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma -2022/12/20 | 14447 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma 2022/12/20 | 14280 | systems/win32/miktex/tm/packages/pdfpages.tar.lzma 2022/12/20 | 142477 | systems/win32/miktex/tm/packages/srdp-mathematik__doc.tar.lzma -2022/12/20 | 140785 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma 2022/12/20 | 140563 | systems/win32/miktex/tm/packages/platex__source.tar.lzma 2022/12/20 | 1391736 | systems/win32/miktex/tm/packages/pst-flags__doc.tar.lzma 2022/12/20 | 1365 | systems/win32/miktex/tm/packages/namedtensor__source.tar.lzma 2022/12/20 | 1365 | macros/latex/contrib/graphicscache/graphicscache.ins 2022/12/20 | 1361 | systems/win32/miktex/tm/packages/ibrackets.tar.lzma -2022/12/20 | 136061 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma 2022/12/20 | 1353 | systems/win32/miktex/tm/packages/namedtensor__doc.tar.lzma -2022/12/20 | 1337660 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma 2022/12/20 | 1324354 | systems/win32/miktex/tm/packages/proflycee__doc.tar.lzma 2022/12/20 | 13114 | systems/win32/miktex/tm/packages/nodetree.tar.lzma 2022/12/20 | 13078 | systems/win32/miktex/tm/packages/msu-thesis.tar.lzma 2022/12/20 | 12715087 | systems/win32/miktex/tm/packages/xput__doc.tar.lzma -2022/12/20 | 121130 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma 2022/12/20 | 11935900 | systems/win32/miktex/tm/packages/l3kernel__doc.tar.lzma -2022/12/20 | 1167231 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma -2022/12/20 | 115700 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma -2022/12/20 | 1150 | systems/win32/miktex/tm/packages/next/pr.ini -2022/12/20 | 113223 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma 2022/12/20 | 1120 | systems/texlive/tlnet/archive/ibrackets.r65312.tar.xz -2022/12/20 | 109756 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma -2022/12/20 | 109288 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma 2022/12/20 | 106554 | systems/win32/miktex/tm/packages/msu-thesis__doc.tar.lzma -2022/12/20 | 105478 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma -2022/12/20 | 103718 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma -2022/12/20 | 103598 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma 2022/12/20 | 1031816 | systems/texlive/tlnet/archive/bithesis.doc.r65314.tar.xz 2022/12/20 | 1030906 | systems/win32/miktex/tm/packages/bithesis__doc.tar.lzma 2022/12/20 | 10242 | systems/win32/miktex/tm/packages/luakeys.tar.lzma -2022/12/20 | 101616 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma 2022/12/20 | 1010 | systems/win32/miktex/tm/packages/namedtensor.tar.lzma 2022/12/20 | 10080 | systems/win32/miktex/tm/packages/srdp-mathematik__source.tar.lzma 2022/12/19 | 99376 | usergrps/dante/dtk.zip @@ -510,95 +621,3 @@ 2022/12/17 | 105029 | macros/latex/contrib/l3kernel/l3fp-parse.dtx 2022/12/17 | 101011 | macros/latex/contrib/l3packages/xtemplate.dtx 2022/12/17 | 10080 | systems/texlive/tlnet/archive/luakeys.r65294.tar.xz -2022/12/16 | 986 | macros/latex/contrib/srdp-mathematik/README.md -2022/12/16 | 980 | systems/texlive/tlnet/archive/collection-plaingeneric.r65277.tar.xz -2022/12/16 | 8862 | macros/latex/contrib/jourcl/jourcl.cls -2022/12/16 | 8668 | systems/texlive/tlnet/archive/biblatex-lncs.doc.r65280.tar.xz -2022/12/16 | 808 | macros/luatex/generic/luakeys/luakeys.sty -2022/12/16 | 795 | macros/luatex/generic/luakeys/luakeys-debug.sty -2022/12/16 | 79483 | macros/latex/contrib/srdp-mathematik/srdp-mathematik.sty -2022/12/16 | 7263 | macros/latex/contrib/ocgx2/ChangeLog -2022/12/16 | 701 | macros/luatex/generic/luakeys/luakeys.tex -2022/12/16 | 665 | fonts/simpleicons/README.md -2022/12/16 | 65 | systems/mac/mactex/mactex-MacTeXtras-20221216.zip.md5 -2022/12/16 | 644 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsOneZero.tfm -2022/12/16 | 641 | macros/latex/contrib/eolang/eolang.bib -2022/12/16 | 59045 | macros/luatex/generic/luakeys/luakeys-doc.tex -2022/12/16 | 5855 | macros/luatex/generic/luakeys/README.md -2022/12/16 | 54367 | macros/latex/contrib/eolang/eolang.dtx -2022/12/16 | 527462670 | systems/mac/mactex/mactex-MacTeXtras-20221216.zip -2022/12/16 | 49 | systems/mac/mactex/MacTeXtras.zip.md5 -2022/12/16 | 4940968 | fonts/simpleicons.zip -2022/12/16 | 48458 | macros/latex/contrib/srdp-mathematik/srdp-mathematik.tex -2022/12/16 | 4822 | macros/latex/contrib/jourcl/jourcl.tex -2022/12/16 | 480696 | systems/texlive/tlnet/archive/msu-thesis.doc.r65282.tar.xz -2022/12/16 | 47687 | macros/latex/contrib/eolang/cactus.pdf -2022/12/16 | 457460 | systems/texlive/tlnet/archive/ufrgscca.doc.r65284.tar.xz -2022/12/16 | 4246 | macros/latex/contrib/jourcl/README.md -2022/12/16 | 416864 | macros/luatex/generic/luakeys.zip -2022/12/16 | 395011 | macros/luatex/generic/luakeys/luakeys-doc.pdf -2022/12/16 | 38083 | systems/mac/mactex/ExtrasFolder.pdf -2022/12/16 | 37560 | macros/luatex/generic/luakeys/luakeys.lua -2022/12/16 | 34891 | install/macros/latex/contrib/ocgx2.tds.zip -2022/12/16 | 33839 | macros/latex/contrib/ocgx2.zip -2022/12/16 | 33322 | macros/latex/contrib/jourcl/imgs/jourcl-logo.png -2022/12/16 | 28484 | systems/texlive/tlnet/archive/ufrgscca.r65284.tar.xz -2022/12/16 | 2842 | fonts/simpleicons/enc/simpleiconsOne.enc -2022/12/16 | 274 | fonts/simpleicons/tex/usimpleiconsOneZero.fd -2022/12/16 | 2745 | fonts/simpleicons/enc/simpleiconsFour.enc -2022/12/16 | 2673 | fonts/simpleicons/enc/simpleiconsSix.enc -2022/12/16 | 2663 | fonts/simpleicons/enc/simpleiconsEight.enc -2022/12/16 | 264 | fonts/simpleicons/tex/usimpleiconsThree.fd -2022/12/16 | 264 | fonts/simpleicons/tex/usimpleiconsSeven.fd -2022/12/16 | 264 | fonts/simpleicons/tex/usimpleiconsEight.fd -2022/12/16 | 2647 | fonts/simpleicons/enc/simpleiconsTwo.enc -2022/12/16 | 2628 | macros/latex/contrib/eolang/eolang.ins -2022/12/16 | 2624 | systems/texlive/tlnet/archive/biblatex-lncs.r65280.tar.xz -2022/12/16 | 2613 | fonts/simpleicons/enc/simpleiconsSeven.enc -2022/12/16 | 259 | fonts/simpleicons/tex/usimpleiconsNine.fd -2022/12/16 | 259 | fonts/simpleicons/tex/usimpleiconsFour.fd -2022/12/16 | 259 | fonts/simpleicons/tex/usimpleiconsFive.fd -2022/12/16 | 2570 | fonts/simpleicons/enc/simpleiconsNine.enc -2022/12/16 | 254 | fonts/simpleicons/tex/usimpleiconsTwo.fd -2022/12/16 | 254 | fonts/simpleicons/tex/usimpleiconsSix.fd -2022/12/16 | 254 | fonts/simpleicons/tex/usimpleiconsOne.fd -2022/12/16 | 2496 | fonts/simpleicons/enc/simpleiconsThree.enc -2022/12/16 | 2431 | fonts/simpleicons/enc/simpleiconsFive.enc -2022/12/16 | 2366 | fonts/simpleicons/enc/simpleiconsOneZero.enc -2022/12/16 | 216737 | fonts/simpleicons/tex/simpleiconsglyphs-pdftex.tex -2022/12/16 | 212684 | fonts/simpleicons/tex/simpleiconsglyphs-xeluatex.tex -2022/12/16 | 2013977 | macros/latex/contrib/eolang.zip -2022/12/16 | 20131 | macros/latex/contrib/jourcl/LICENSE -2022/12/16 | 2004235 | macros/latex/contrib/eolang/eolang.pdf -2022/12/16 | 1979268 | fonts/simpleicons/doc/simpleicons.pdf -2022/12/16 | 191342 | macros/latex/contrib/srdp-mathematik.zip -2022/12/16 | 1876288 | fonts/simpleicons/opentype/SimpleIcons.otf -2022/12/16 | 1844 | fonts/simpleicons/doc/simpleicons.tex -2022/12/16 | 180732 | macros/latex/contrib/srdp-mathematik/srdp-mathematik.pdf -2022/12/16 | 1748159 | fonts/simpleicons/type1/SimpleIcons.pfb -2022/12/16 | 172 | macros/latex/contrib/eolang/DEPENDS.txt -2022/12/16 | 161 | systems/mac/mactex/mactex-MacTeXtras-20221216.zip.sha512 -2022/12/16 | 1612 | systems/mac/mactex/Licenses.txt -2022/12/16 | 1557 | fonts/simpleicons/tex/simpleicons.sty -2022/12/16 | 145 | systems/mac/mactex/MacTeXtras.zip.sha512 -2022/12/16 | 13842 | macros/latex/contrib/jourcl/imgs/jourcl-signature.png -2022/12/16 | 1347 | macros/latex/contrib/eolang/README.md -2022/12/16 | 12928 | systems/texlive/tlnet/archive/msu-thesis.r65282.tar.xz -2022/12/16 | 128599 | fonts/simpleicons/doc/bindings.tex -2022/12/16 | 1236 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsSeven.tfm -2022/12/16 | 1232 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsTwo.tfm -2022/12/16 | 1232 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsThree.tfm -2022/12/16 | 1232 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsSix.tfm -2022/12/16 | 1232 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsNine.tfm -2022/12/16 | 1232 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsFour.tfm -2022/12/16 | 1232 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsFive.tfm -2022/12/16 | 1232 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsEight.tfm -2022/12/16 | 1228 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsOne.tfm -2022/12/16 | 122312 | macros/latex/contrib/jourcl.zip -2022/12/16 | 1179 | macros/luatex/generic/luakeys/luakeys-debug.tex -2022/12/16 | 1151141 | support/TeX4ht/source/tex4ht-4ht.tex -2022/12/16 | 113298 | macros/latex/contrib/jourcl/jourcl.pdf -2022/12/16 | 1119 | fonts/simpleicons/map/simpleicons.map -2022/12/16 | 110082 | macros/latex/contrib/ocgx2/ocgx2.sty -2022/12/16 | 1083 | macros/latex/contrib/eolang/LICENSE.txt -2022/12/16 | 10427 | macros/latex/contrib/ocgx2/README.md diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib index 3495502357..63fdc5aced 100644 --- a/biblio/ctan-bibdata/ctan.bib +++ b/biblio/ctan-bibdata/ctan.bib @@ -1,7 +1,7 @@ %% bib file of all CTAN packages %% (C) Herbert Voß %% -%% created at 23-12-2022, 02:01:08 +%% created at 24-12-2022, 02:01:18 %% %% This file is provided under the terms of the LPPL v1.3 or @@ -40840,8 +40840,8 @@ title = {The \texttt{luakeys} package}, subtitle = {A Lua module for parsing key-value options}, author = {Josef Friedrich}, - date = {2022-12-16}, - version = {0.10.0}, + date = {2022-12-23}, + version = {0.11.0}, license = {lppl1.3c}, mirror = {https://mirror.ctan.org/macros/luatex/generic/luakeys}, url = {https://ctan.org/pkg/luakeys}, @@ -42325,10 +42325,10 @@ @manual{ctan-markdown, title = {The \texttt{markdown} package}, - subtitle = {A package for converting and rendering markdown documents inside \TeX{}}, + subtitle = {Converting and rendering markdown documents inside \TeX{}}, author = {Vít Novotný}, - date = {2022-10-31}, - version = {2.18.0-0-gd8ae860}, + date = {2022-12-23}, + version = {2.19.0-0-g80fcf20}, license = {lppl1.3c}, mirror = {https://mirror.ctan.org/macros/generic/markdown}, url = {https://ctan.org/pkg/markdown}, @@ -56424,6 +56424,17 @@ url = {https://ctan.org/pkg/pythonhighlight}, } +@manual{ctan-pythonimmediate, + title = {The \texttt{Library to run Python code} package}, + subtitle = {Library to run Python code}, + author = {{user202729}}, + date = {2022-12-23}, + version = {0.0.0}, + license = {lppl1.3c}, + mirror = {https://mirror.ctan.org/macros/latex/contrib/pythonimmediate}, + url = {https://ctan.org/pkg/pythonimmediate}, +} + @manual{ctan-pythontex, title = {The \texttt{pythontex} package}, subtitle = {Run Python from within a document, typesetting the results}, @@ -59075,8 +59086,8 @@ title = {The \texttt{saveenv} package}, subtitle = {Save environment content verbatim}, author = {{user202729}}, - date = {2022-07-15}, - version = {0.0.0}, + date = {2022-12-23}, + version = {0.0.1}, license = {lppl1.3c}, mirror = {https://mirror.ctan.org/macros/latex/contrib/saveenv}, url = {https://ctan.org/pkg/saveenv}, @@ -65037,8 +65048,8 @@ title = {The \texttt{tagpdf} package}, subtitle = {Tools for experimenting with tagging using pdf\LaTeX{} and LuaLaTeX}, author = {Ulrike Fischer}, - date = {2022-08-24}, - version = {0.97}, + date = {2022-12-23}, + version = {0.98}, license = {lppl1.3c}, mirror = {https://mirror.ctan.org/macros/latex/contrib/tagpdf}, url = {https://ctan.org/pkg/tagpdf}, @@ -70454,7 +70465,7 @@ title = {The \texttt{tsvtemplate} package}, subtitle = {Apply a template to a tsv file}, author = {Esger Renkema}, - date = {2022-12-21}, + date = {2022-12-23}, version = {2022/1.0}, license = {other-free}, mirror = {https://mirror.ctan.org/macros/luatex/generic/tsvtemplate}, diff --git a/biblio/ctan-bibdata/ctan.pdf b/biblio/ctan-bibdata/ctan.pdf index 2f8b0ff1a0..f15bbda93a 100644 Binary files a/biblio/ctan-bibdata/ctan.pdf and b/biblio/ctan-bibdata/ctan.pdf differ diff --git a/macros/generic/markdown/CHANGES.md b/macros/generic/markdown/CHANGES.md index 7e6575d20d..5cbde41192 100644 --- a/macros/generic/markdown/CHANGES.md +++ b/macros/generic/markdown/CHANGES.md @@ -1,6 +1,32 @@ # Changes -## 2.18.0 (2022-10-31) +## 2.19.0 (2022-12-23) + +Development: + +- Add support for fenced divs and bracketed spans. (#207) + +Fixes: + +- Fix incorrect category codes in plain TeX renderer prototype definitions. + (f156f05) +- Allow backticks in tilde code block infostrings. (#214, #219, #221) + +Refactoring: + +- Sort Lua options, token renderers, and built-in syntax extensions. (#208) + +Documentation: + +- Link article [*High-Level Languages for + TeX*](https://www.doi.org/10.5300/2022-1-4/35) (in Czech) from + CSTUG Bulletin 1–4/2022 to `README.md`. (authored by @witiko, a2bbdea) + +Continuous Integration: + +- Make latexmk treat warnings as errors. (#228) + +## 2.18.0 (2022-10-30) Development: diff --git a/macros/generic/markdown/LICENSE b/macros/generic/markdown/LICENSE deleted file mode 100644 index 4db9b5af29..0000000000 --- a/macros/generic/markdown/LICENSE +++ /dev/null @@ -1,415 +0,0 @@ -The LaTeX Project Public License -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - -LPPL Version 1.3c 2008-05-04 - -Copyright 1999 2002-2008 LaTeX3 Project - Everyone is allowed to distribute verbatim copies of this - license document, but modification of it is not allowed. - - -PREAMBLE -======== - -The LaTeX Project Public License (LPPL) is the primary license under -which the LaTeX kernel and the base LaTeX packages are distributed. - -You may use this license for any work of which you hold the copyright -and which you wish to distribute. This license may be particularly -suitable if your work is TeX-related (such as a LaTeX package), but -it is written in such a way that you can use it even if your work is -unrelated to TeX. - -The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE', -below, gives instructions, examples, and recommendations for authors -who are considering distributing their works under this license. - -This license gives conditions under which a work may be distributed -and modified, as well as conditions under which modified versions of -that work may be distributed. - -We, the LaTeX3 Project, believe that the conditions below give you -the freedom to make and distribute modified versions of your work -that conform with whatever technical specifications you wish while -maintaining the availability, integrity, and reliability of -that work. If you do not see how to achieve your goal while -meeting these conditions, then read the document `cfgguide.tex' -and `modguide.tex' in the base LaTeX distribution for suggestions. - - -DEFINITIONS -=========== - -In this license document the following terms are used: - - `Work' - Any work being distributed under this License. - - `Derived Work' - Any work that under any applicable law is derived from the Work. - - `Modification' - Any procedure that produces a Derived Work under any applicable - law -- for example, the production of a file containing an - original file associated with the Work or a significant portion of - such a file, either verbatim or with modifications and/or - translated into another language. - - `Modify' - To apply any procedure that produces a Derived Work under any - applicable law. - - `Distribution' - Making copies of the Work available from one person to another, in - whole or in part. Distribution includes (but is not limited to) - making any electronic components of the Work accessible by - file transfer protocols such as FTP or HTTP or by shared file - systems such as Sun's Network File System (NFS). - - `Compiled Work' - A version of the Work that has been processed into a form where it - is directly usable on a computer system. This processing may - include using installation facilities provided by the Work, - transformations of the Work, copying of components of the Work, or - other activities. Note that modification of any installation - facilities provided by the Work constitutes modification of the Work. - - `Current Maintainer' - A person or persons nominated as such within the Work. If there is - no such explicit nomination then it is the `Copyright Holder' under - any applicable law. - - `Base Interpreter' - A program or process that is normally needed for running or - interpreting a part or the whole of the Work. - - A Base Interpreter may depend on external components but these - are not considered part of the Base Interpreter provided that each - external component clearly identifies itself whenever it is used - interactively. Unless explicitly specified when applying the - license to the Work, the only applicable Base Interpreter is a - `LaTeX-Format' or in the case of files belonging to the - `LaTeX-format' a program implementing the `TeX language'. - - - -CONDITIONS ON DISTRIBUTION AND MODIFICATION -=========================================== - -1. Activities other than distribution and/or modification of the Work -are not covered by this license; they are outside its scope. In -particular, the act of running the Work is not restricted and no -requirements are made concerning any offers of support for the Work. - -2. You may distribute a complete, unmodified copy of the Work as you -received it. Distribution of only part of the Work is considered -modification of the Work, and no right to distribute such a Derived -Work may be assumed under the terms of this clause. - -3. You may distribute a Compiled Work that has been generated from a -complete, unmodified copy of the Work as distributed under Clause 2 -above, as long as that Compiled Work is distributed in such a way that -the recipients may install the Compiled Work on their system exactly -as it would have been installed if they generated a Compiled Work -directly from the Work. - -4. If you are the Current Maintainer of the Work, you may, without -restriction, modify the Work, thus creating a Derived Work. You may -also distribute the Derived Work without restriction, including -Compiled Works generated from the Derived Work. Derived Works -distributed in this manner by the Current Maintainer are considered to -be updated versions of the Work. - -5. If you are not the Current Maintainer of the Work, you may modify -your copy of the Work, thus creating a Derived Work based on the Work, -and compile this Derived Work, thus creating a Compiled Work based on -the Derived Work. - -6. If you are not the Current Maintainer of the Work, you may -distribute a Derived Work provided the following conditions are met -for every component of the Work unless that component clearly states -in the copyright notice that it is exempt from that condition. Only -the Current Maintainer is allowed to add such statements of exemption -to a component of the Work. - - a. If a component of this Derived Work can be a direct replacement - for a component of the Work when that component is used with the - Base Interpreter, then, wherever this component of the Work - identifies itself to the user when used interactively with that - Base Interpreter, the replacement component of this Derived Work - clearly and unambiguously identifies itself as a modified version - of this component to the user when used interactively with that - Base Interpreter. - - b. Every component of the Derived Work contains prominent notices - detailing the nature of the changes to that component, or a - prominent reference to another file that is distributed as part - of the Derived Work and that contains a complete and accurate log - of the changes. - - c. No information in the Derived Work implies that any persons, - including (but not limited to) the authors of the original version - of the Work, provide any support, including (but not limited to) - the reporting and handling of errors, to recipients of the - Derived Work unless those persons have stated explicitly that - they do provide such support for the Derived Work. - - d. You distribute at least one of the following with the Derived Work: - - 1. A complete, unmodified copy of the Work; - if your distribution of a modified component is made by - offering access to copy the modified component from a - designated place, then offering equivalent access to copy - the Work from the same or some similar place meets this - condition, even though third parties are not compelled to - copy the Work along with the modified component; - - 2. Information that is sufficient to obtain a complete, - unmodified copy of the Work. - -7. If you are not the Current Maintainer of the Work, you may -distribute a Compiled Work generated from a Derived Work, as long as -the Derived Work is distributed to all recipients of the Compiled -Work, and as long as the conditions of Clause 6, above, are met with -regard to the Derived Work. - -8. The conditions above are not intended to prohibit, and hence do not -apply to, the modification, by any method, of any component so that it -becomes identical to an updated version of that component of the Work as -it is distributed by the Current Maintainer under Clause 4, above. - -9. Distribution of the Work or any Derived Work in an alternative -format, where the Work or that Derived Work (in whole or in part) is -then produced by applying some process to that format, does not relax or -nullify any sections of this license as they pertain to the results of -applying that process. - -10. a. A Derived Work may be distributed under a different license - provided that license itself honors the conditions listed in - Clause 6 above, in regard to the Work, though it does not have - to honor the rest of the conditions in this license. - - b. If a Derived Work is distributed under a different license, that - Derived Work must provide sufficient documentation as part of - itself to allow each recipient of that Derived Work to honor the - restrictions in Clause 6 above, concerning changes from the Work. - -11. This license places no restrictions on works that are unrelated to -the Work, nor does this license place any restrictions on aggregating -such works with the Work by any means. - -12. Nothing in this license is intended to, or may be used to, prevent -complete compliance by all parties with all applicable laws. - - -NO WARRANTY -=========== - -There is no warranty for the Work. Except when otherwise stated in -writing, the Copyright Holder provides the Work `as is', without -warranty of any kind, either expressed or implied, including, but not -limited to, the implied warranties of merchantability and fitness for a -particular purpose. The entire risk as to the quality and performance -of the Work is with you. Should the Work prove defective, you assume -the cost of all necessary servicing, repair, or correction. - -In no event unless required by applicable law or agreed to in writing -will The Copyright Holder, or any author named in the components of the -Work, or any other party who may distribute and/or modify the Work as -permitted above, be liable to you for damages, including any general, -special, incidental or consequential damages arising out of any use of -the Work or out of inability to use the Work (including, but not limited -to, loss of data, data being rendered inaccurate, or losses sustained by -anyone as a result of any failure of the Work to operate with any other -programs), even if the Copyright Holder or said author or said other -party has been advised of the possibility of such damages. - - -MAINTENANCE OF THE WORK -======================= - -The Work has the status `author-maintained' if the Copyright Holder -explicitly and prominently states near the primary copyright notice in -the Work that the Work can only be maintained by the Copyright Holder -or simply that it is `author-maintained'. - -The Work has the status `maintained' if there is a Current Maintainer -who has indicated in the Work that they are willing to receive error -reports for the Work (for example, by supplying a valid e-mail -address). It is not required for the Current Maintainer to acknowledge -or act upon these error reports. - -The Work changes from status `maintained' to `unmaintained' if there -is no Current Maintainer, or the person stated to be Current -Maintainer of the work cannot be reached through the indicated means -of communication for a period of six months, and there are no other -significant signs of active maintenance. - -You can become the Current Maintainer of the Work by agreement with -any existing Current Maintainer to take over this role. - -If the Work is unmaintained, you can become the Current Maintainer of -the Work through the following steps: - - 1. Make a reasonable attempt to trace the Current Maintainer (and - the Copyright Holder, if the two differ) through the means of - an Internet or similar search. - - 2. If this search is successful, then enquire whether the Work - is still maintained. - - a. If it is being maintained, then ask the Current Maintainer - to update their communication data within one month. - - b. If the search is unsuccessful or no action to resume active - maintenance is taken by the Current Maintainer, then announce - within the pertinent community your intention to take over - maintenance. (If the Work is a LaTeX work, this could be - done, for example, by posting to comp.text.tex.) - - 3a. If the Current Maintainer is reachable and agrees to pass - maintenance of the Work to you, then this takes effect - immediately upon announcement. - - b. If the Current Maintainer is not reachable and the Copyright - Holder agrees that maintenance of the Work be passed to you, - then this takes effect immediately upon announcement. - - 4. If you make an `intention announcement' as described in 2b. above - and after three months your intention is challenged neither by - the Current Maintainer nor by the Copyright Holder nor by other - people, then you may arrange for the Work to be changed so as - to name you as the (new) Current Maintainer. - - 5. If the previously unreachable Current Maintainer becomes - reachable once more within three months of a change completed - under the terms of 3b) or 4), then that Current Maintainer must - become or remain the Current Maintainer upon request provided - they then update their communication data within one month. - -A change in the Current Maintainer does not, of itself, alter the fact -that the Work is distributed under the LPPL license. - -If you become the Current Maintainer of the Work, you should -immediately provide, within the Work, a prominent and unambiguous -statement of your status as Current Maintainer. You should also -announce your new status to the same pertinent community as -in 2b) above. - - -WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE -====================================================== - -This section contains important instructions, examples, and -recommendations for authors who are considering distributing their -works under this license. These authors are addressed as `you' in -this section. - -Choosing This License or Another License ----------------------------------------- - -If for any part of your work you want or need to use *distribution* -conditions that differ significantly from those in this license, then -do not refer to this license anywhere in your work but, instead, -distribute your work under a different license. You may use the text -of this license as a model for your own license, but your license -should not refer to the LPPL or otherwise give the impression that -your work is distributed under the LPPL. - -The document `modguide.tex' in the base LaTeX distribution explains -the motivation behind the conditions of this license. It explains, -for example, why distributing LaTeX under the GNU General Public -License (GPL) was considered inappropriate. Even if your work is -unrelated to LaTeX, the discussion in `modguide.tex' may still be -relevant, and authors intending to distribute their works under any -license are encouraged to read it. - -A Recommendation on Modification Without Distribution ------------------------------------------------------ - -It is wise never to modify a component of the Work, even for your own -personal use, without also meeting the above conditions for -distributing the modified component. While you might intend that such -modifications will never be distributed, often this will happen by -accident -- you may forget that you have modified that component; or -it may not occur to you when allowing others to access the modified -version that you are thus distributing it and violating the conditions -of this license in ways that could have legal implications and, worse, -cause problems for the community. It is therefore usually in your -best interest to keep your copy of the Work identical with the public -one. Many works provide ways to control the behavior of that work -without altering any of its licensed components. - -How to Use This License ------------------------ - -To use this license, place in each of the components of your work both -an explicit copyright notice including your name and the year the work -was authored and/or last substantially modified. Include also a -statement that the distribution and/or modification of that -component is constrained by the conditions in this license. - -Here is an example of such a notice and statement: - - %% pig.dtx - %% Copyright 2005 M. Y. Name - % - % This work may be distributed and/or modified under the - % conditions of the LaTeX Project Public License, either version 1.3 - % 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 - % and version 1.3 or later is part of all distributions of LaTeX - % version 2005/12/01 or later. - % - % This work has the LPPL maintenance status `maintained'. - % - % The Current Maintainer of this work is M. Y. Name. - % - % This work consists of the files pig.dtx and pig.ins - % and the derived file pig.sty. - -Given such a notice and statement in a file, the conditions -given in this license document would apply, with the `Work' referring -to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being -generated from `pig.dtx' using `pig.ins'), the `Base Interpreter' -referring to any `LaTeX-Format', and both `Copyright Holder' and -`Current Maintainer' referring to the person `M. Y. Name'. - -If you do not want the Maintenance section of LPPL to apply to your -Work, change `maintained' above into `author-maintained'. -However, we recommend that you use `maintained', as the Maintenance -section was added in order to ensure that your Work remains useful to -the community even when you can no longer maintain and support it -yourself. - -Derived Works That Are Not Replacements ---------------------------------------- - -Several clauses of the LPPL specify means to provide reliability and -stability for the user community. They therefore concern themselves -with the case that a Derived Work is intended to be used as a -(compatible or incompatible) replacement of the original Work. If -this is not the case (e.g., if a few lines of code are reused for a -completely different task), then clauses 6b and 6d shall not apply. - - -Important Recommendations -------------------------- - - Defining What Constitutes the Work - - The LPPL requires that distributions of the Work contain all the - files of the Work. It is therefore important that you provide a - way for the licensee to determine which files constitute the Work. - This could, for example, be achieved by explicitly listing all the - files of the Work near the copyright notice of each file or by - using a line such as: - - % This work consists of all files listed in manifest.txt. - - in that place. In the absence of an unequivocal list it might be - impossible for the licensee to determine what is considered by you - to comprise the Work and, in such a case, the licensee would be - entitled to make reasonable conjectures as to which files comprise - the Work. diff --git a/macros/generic/markdown/Makefile b/macros/generic/markdown/Makefile deleted file mode 100644 index fb68360821..0000000000 --- a/macros/generic/markdown/Makefile +++ /dev/null @@ -1,205 +0,0 @@ -.PHONY: all base clean implode dist test docker-image force - -SHELL=/bin/bash - -AUXFILES=markdown.bbl markdown.cb markdown.cb2 markdown.glo markdown.bbl \ - markdown.run.xml markdown.markdown.in markdown.markdown.lua \ - markdown.markdown.out markdown-interfaces.md markdown-miscellanea.md \ - markdown-options.md markdown-tokens.md $(TECHNICAL_DOCUMENTATION_RESOURCES) \ - $(VERSION_FILE) -AUXDIRS=_minted-markdown _markdown_markdown markdown pkgcheck -TDSARCHIVE=markdown.tds.zip -CTANARCHIVE=markdown.ctan.zip -DISTARCHIVE=markdown.zip -ARCHIVES=$(TDSARCHIVE) $(CTANARCHIVE) $(DISTARCHIVE) -EXAMPLES_RESOURCES=examples/example.md examples/scientists.csv -EXAMPLES_SOURCES=examples/context-mkii.tex examples/context-mkiv.tex examples/latex.tex -EXAMPLES=examples/context-mkii.pdf examples/context-mkiv.pdf \ - examples/latex-pdftex.pdf examples/latex-luatex.pdf examples/latex-xetex.pdf \ - examples/latex-tex4ht.html examples/latex-tex4ht.css -TESTS=tests/test.sh tests/support/*.tex tests/templates/*/*.tex.m4 \ - tests/templates/*/COMMANDS.m4 tests/testfiles/*/*.test -MAKES=Makefile $(addsuffix /Makefile, $(SUBDIRECTORIES)) latexmkrc -ROOT_README=README.md markdown.png -READMES=$(ROOT_README) LICENSE examples/README.md tests/README.md \ - tests/support/README.md tests/templates/README.md tests/testfiles/README.md \ - tests/templates/*/README.md tests/testfiles/*/README.md -VERSION_FILE=VERSION -CHANGES_FILE=CHANGES.md -DTXARCHIVE=markdown.dtx -INSTALLER=markdown.ins docstrip.cfg -TECHNICAL_DOCUMENTATION_RESOURCES=markdown.bib markdown-figure-block-diagram.tex \ - markdownthemewitiko_markdown_techdoc.sty -TECHNICAL_DOCUMENTATION=markdown.pdf -MARKDOWN_USER_MANUAL=markdown.md markdown.css -HTML_USER_MANUAL=markdown.html markdown.css -USER_MANUAL=$(MARKDOWN_USER_MANUAL) $(HTML_USER_MANUAL) -DOCUMENTATION=$(TECHNICAL_DOCUMENTATION) $(HTML_USER_MANUAL) $(ROOT_README) $(VERSION_FILE) \ - $(CHANGES_FILE) -LIBRARIES=libraries/markdown-tinyyaml.lua -INSTALLABLES=markdown.lua markdown-cli.lua markdown.tex markdown.sty t-markdown.tex \ - markdownthemewitiko_dot.sty markdownthemewitiko_graphicx_http.sty \ - markdownthemewitiko_tilde.sty -EXTRACTABLES=$(INSTALLABLES) $(MARKDOWN_USER_MANUAL) $(TECHNICAL_DOCUMENTATION_RESOURCES) -MAKEABLES=$(TECHNICAL_DOCUMENTATION) $(USER_MANUAL) $(INSTALLABLES) $(EXAMPLES) -RESOURCES=$(DOCUMENTATION) $(EXAMPLES_RESOURCES) $(EXAMPLES_SOURCES) $(EXAMPLES) \ - $(MAKES) $(READMES) $(INSTALLER) $(DTXARCHIVE) $(TESTS) -EVERYTHING=$(RESOURCES) $(INSTALLABLES) $(LIBRARIES) -GITHUB_PAGES=gh-pages - -VERSION=$(shell git describe --tags --always --long --exclude latest) -LASTMODIFIED=$(shell git log -1 --date=format:%Y-%m-%d --format=%ad) - -# This is the default pseudo-target. It typesets the manual, -# the examples, and extracts the package files. -all: $(MAKEABLES) - $(MAKE) clean - -# This pseudo-target extracts the source files out of the DTX archive and -# produces external Lua libraries. -base: $(INSTALLABLES) $(LIBRARIES) - $(MAKE) clean - -# This pseudo-target builds a witiko/markdown Docker image. -docker-image: - DOCKER_BUILDKIT=1 docker build --pull --build-arg TEXLIVE_TAG=$(TEXLIVE_TAG) \ - -t witiko/markdown:$(TEXLIVE_TAG) \ - -t witiko/markdown:$(VERSION)-$(TEXLIVE_TAG) . - -# This targets produces a directory with files for the GitHub Pages service. -$(GITHUB_PAGES): $(HTML_USER_MANUAL) - mkdir -p $@ - cp markdown.html $@/index.html - cp markdown.css $@ - -# This target extracts the source files out of the DTX archive. -$(EXTRACTABLES): $(INSTALLER) $(DTXARCHIVE) - xetex $< - sed -i \ - -e 's#(((VERSION)))#$(VERSION)#g' \ - -e 's#(((LASTMODIFIED)))#$(LASTMODIFIED)#g' \ - $(INSTALLABLES) - -# This target produces the version file. -$(VERSION_FILE): force - printf '%s (%s)\n' $(VERSION) $(LASTMODIFIED) > $@ - -# This target produces external Lua libraries. -$(LIBRARIES): force - $(MAKE) -C libraries $(notdir $@) - -# This target typesets the manual. -$(TECHNICAL_DOCUMENTATION): $(DTXARCHIVE) $(TECHNICAL_DOCUMENTATION_RESOURCES) - latexmk -silent $< || (cat $(basename $@).log 1>&2; exit 1) - test `tail $(basename $<).log | sed -rn 's/.*\(([0-9]*) pages.*/\1/p'` -gt 150 - -# These targets typeset the examples. -$(EXAMPLES): $(EXAMPLE_SOURCES) examples/example.tex - $(MAKE) -C examples $(notdir $@) - -examples/example.tex: force - $(MAKE) -C examples $(notdir $@) - -# This target converts the markdown user manual to an HTML page. -%.html: %.md %.css - awk '{ \ - filename = gensub(/^\/(.*\.md)$$/, "\\1", "g"); \ - if(filename != $$0) \ - system("cat " filename); \ - else \ - print($$0); \ - }' <$< | \ - sed -e 's#\\markdownVersion{}#$(VERSION)#g' \ - -e 's#\\markdownLastModified{}#$(LASTMODIFIED)#g' \ - -e 's#\\TeX{}#TeX#g' \ - -e 's#\\LaTeX{}#LaTeX#g' \ - -e 's#\\Hologo{ConTeXt}#ConTeXt#g' \ - -e 's#\\Opt{\([^}]*\)}#**`\1`**#g' \ - -e 's#\\pkg{\([^}]*\)}#**`\1`**#g' \ - -e 's#\\,# #g' \ - -e 's#\\meta{\([^}]*\)}#\⟨*\1*\⟩#g' \ - -e 's#\\acro{\([^}]*\)}#\1#g' \ - -e 's#😉##g' \ - -e 's#\\envm{\([^}]*\)}#`\1`#g' \ - -e 's#\\envmdef{\([^}]*\)}#`\1`#g' \ - -e 's#\\envmref{\([^}]*\)}#`\1`#g' \ - -e 's#\\m{\([^}]*\)}#`\\\1`#g' \ - -e 's#\\mdef{\([^}]*\)}#`\\\1`#g' \ - -e 's#\\mref{\([^}]*\)}#`\\\1`#g' \ - | \ - pandoc -f markdown -t html -N -s --toc --toc-depth=3 --css=$(word 2, $^) >$@ - -# This pseudo-target runs all the tests in the `tests/` directory. -test: - $(MAKE) -C tests - -# This pseudo-target produces the distribution archives. -dist: implode - $(MAKE) $(ARCHIVES) - git clone https://gitlab.com/Lotz/pkgcheck.git - unzip $(CTANARCHIVE) -d markdown - for RETRY in $$(seq 1 10); \ - do \ - if (( RETRY > 1 )); \ - then \ - sleep $$((RETRY * 15)); \ - fi; \ - if pkgcheck/bin/pkgcheck -d markdown/markdown -T $(TDSARCHIVE) --urlcheck; \ - then \ - EXIT_CODE=0; \ - break; \ - else \ - EXIT_CODE=$$?; \ - fi; \ - done; \ - exit $$EXIT_CODE - $(MAKE) clean - -# This target produces the TeX directory structure archive. -$(TDSARCHIVE): $(DTXARCHIVE) $(INSTALLER) $(INSTALLABLES) $(DOCUMENTATION) $(EXAMPLES_RESOURCES) $(EXAMPLES_SOURCES) $(LIBRARIES) - @# Installing the macro package. - mkdir -p tex/generic/markdown tex/luatex/markdown tex/latex/markdown \ - tex/context/third/markdown scripts/markdown - cp markdown.lua $(LIBRARIES) tex/luatex/markdown/ - cp markdown-cli.lua scripts/markdown/ - cp markdown.sty markdownthemewitiko_dot.sty markdownthemewitiko_graphicx_http.sty \ - markdownthemewitiko_tilde.sty tex/latex/markdown/ - cp markdown.tex tex/generic/markdown/ - cp t-markdown.tex tex/context/third/markdown/ - @# Installing the documentation. - mkdir -p doc/generic/markdown doc/latex/markdown/examples \ - doc/context/third/markdown/examples - cp $(DOCUMENTATION) doc/generic/markdown/ - cp examples/context-mkii.tex examples/context-mkiv.tex $(EXAMPLES_RESOURCES) \ - doc/context/third/markdown/examples/ - cp examples/latex.tex $(EXAMPLES_RESOURCES) doc/latex/markdown/examples/ - @# Installing the sources. - mkdir -p source/generic/markdown - cp $(DTXARCHIVE) $(INSTALLER) source/generic/markdown - zip -r -v -nw $@ doc scripts source tex - rm -rf doc scripts source tex - -# This target produces the distribution archive. -$(DISTARCHIVE): $(EVERYTHING) $(TDSARCHIVE) - -ln -s . markdown - zip -MM -r -v -nw $@ $(addprefix markdown/,$(EVERYTHING)) $(TDSARCHIVE) - rm -f markdown - -# This target produces the CTAN archive. -$(CTANARCHIVE): $(DTXARCHIVE) $(INSTALLER) $(DOCUMENTATION) $(EXAMPLES_RESOURCES) $(EXAMPLES_SOURCES) $(LIBRARIES) $(TDSARCHIVE) - -ln -s . markdown - zip -MM -r -v -nw $@ $(addprefix markdown/,$(DTXARCHIVE) $(INSTALLER) $(DOCUMENTATION) $(EXAMPLES_RESOURCES) $(EXAMPLES_SOURCES) $(LIBRARIES)) $(TDSARCHIVE) - rm -f markdown - -# This pseudo-target removes any existing auxiliary files and directories. -clean: - latexmk -c $(DTXARCHIVE) - rm -f $(AUXFILES) - rm -rf ${AUXDIRS} - $(MAKE) -C examples clean - -# This pseudo-target removes any makeable files. -implode: clean - rm -f $(MAKEABLES) $(ARCHIVES) - $(MAKE) -C examples implode - $(MAKE) -C libraries implode diff --git a/macros/generic/markdown/README.md b/macros/generic/markdown/README.md index d7423fa93b..a2504c3738 100644 --- a/macros/generic/markdown/README.md +++ b/macros/generic/markdown/README.md @@ -188,11 +188,12 @@ For further information, consult one of the following: - [Markdown 2.10.0: LaTeX Themes & Snippets, Two Flavors of Comments, and LuaMetaTeX][tb131], - [Markdown 2.15.0: What's New?][tb133], and - [Markdown 2.17.1: What's New, What's Next?][tb135]. -5. Journal articles of me and my students published by [CSTUG][] (in Czech and Slovak): +5. Journal articles of me and my students 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], and - - [Direct Typesetting of Various Document Formats in TeX Using the Pandoc Utility][10.5300/2021-1-4/83]. + - [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]). @@ -205,12 +206,12 @@ 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.tug.org/TUGboat/production/43-3/tb135novotny-markdown.pdf "Markdown 2.17.1: What's New, What's Next?" + [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?" [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" @@ -218,10 +219,11 @@ For further information, consult one of the following: [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" - [10.5300/2016-1-4/78]: https://bulletin.cstug.cz/pdf/2016-1-4.pdf#page=80 "Rendering Markdown inside TeX Documents" - [10.5300/2020-1-2/48]: https://bulletin.cstug.cz/pdf/2020-1-2.pdf#page=50 "Markdown 2.8.1: Boldly Unto the Throne of Lightweight Markup in TeX" - [10.5300/2021-1-4/76]: https://bulletin.cstug.cz/pdf/2021-1-4.pdf#page=78 "Markdown 2.10.0: LaTeX Themes & Snippets" - [10.5300/2021-1-4/83]: https://bulletin.cstug.cz/pdf/2021-1-4.pdf#page=85 "Direct Typesetting of Various Document Formats in TeX Using the Pandoc Utility" + [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" + [10.5300/2021-1-4/76]: https://www.doi.org/10.5300/2021-1-4/76 "Markdown 2.10.0: LaTeX Themes & Snippets" + [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 @@ -229,7 +231,7 @@ For further information, consult one of the following: [liantze]: http://liantze.penguinattack.org/ "Rants from the Lab" [overleaf]: https://www.overleaf.com/ "Overleaf: Real-time Collaborative Writing and Publishing Tools with Integrated PDF Preview" [tugboat]: https://www.tug.org/tugboat/ "TUGboat - Communications of the TeX Users Group" - [cstug]: https://www.cstug.cz/ "Československé sdružení uživatelů TeXu" + [csbul]: https://bulletin.cstug.cz/ "Zpravodaj Československého sdružení uživatelů TeXu" [manual-latest]: https://witiko.github.io/markdown "Markdown Package User Manual" [manual-tex-live]: https://mirrors.ctan.org/macros/generic/markdown/markdown.html "Markdown Package User Manual" diff --git a/macros/generic/markdown/VERSION b/macros/generic/markdown/VERSION index ca77f648f3..8d5f7708c3 100644 --- a/macros/generic/markdown/VERSION +++ b/macros/generic/markdown/VERSION @@ -1 +1 @@ -2.18.0-0-gd8ae860 (2022-10-30) +2.19.0-0-g80fcf20 (2022-12-23) diff --git a/macros/generic/markdown/examples/README.md b/macros/generic/markdown/examples/README.md deleted file mode 100644 index 0d32d16ec4..0000000000 --- a/macros/generic/markdown/examples/README.md +++ /dev/null @@ -1,7 +0,0 @@ -This directory contains example LaTeX and ConTeXt documents. These documents -can be typeset by running the GNU `make` program in this directory. It is -expected that your TeX installation contains the `pdflatex`, `xelatex`, -`lualatex`, `texexec`, and `context` executables. - -The `markdown.dtx` file in the root directory contains documentation in the -markdown language and can also serve as an example LaTeX document. diff --git a/macros/generic/markdown/examples/context-mkii.pdf b/macros/generic/markdown/examples/context-mkii.pdf deleted file mode 100644 index 2f2f8e11cf..0000000000 Binary files a/macros/generic/markdown/examples/context-mkii.pdf and /dev/null differ diff --git a/macros/generic/markdown/examples/context-mkiv.pdf b/macros/generic/markdown/examples/context-mkiv.pdf deleted file mode 100644 index 51246ff4a7..0000000000 Binary files a/macros/generic/markdown/examples/context-mkiv.pdf and /dev/null differ diff --git a/macros/generic/markdown/examples/latex-luatex.pdf b/macros/generic/markdown/examples/latex-luatex.pdf deleted file mode 100644 index 7777fae525..0000000000 Binary files a/macros/generic/markdown/examples/latex-luatex.pdf and /dev/null differ diff --git a/macros/generic/markdown/examples/latex-pdftex.pdf b/macros/generic/markdown/examples/latex-pdftex.pdf deleted file mode 100644 index 10024e87b2..0000000000 Binary files a/macros/generic/markdown/examples/latex-pdftex.pdf and /dev/null differ diff --git a/macros/generic/markdown/examples/latex-tex4ht.css b/macros/generic/markdown/examples/latex-tex4ht.css deleted file mode 100644 index 1a76a03921..0000000000 --- a/macros/generic/markdown/examples/latex-tex4ht.css +++ /dev/null @@ -1,219 +0,0 @@ - -/* start css.sty */ -.ec-lmr-17{font-size:170%;} -.ec-lmri-12x-x-144{font-size:172%; font-style:italic;} -.ec-lmri-12x-x-144{ font-style:italic;} -.ec-lmri-12x-x-144{ font-style:italic;} -.ec-lmri-12x-x-144{ font-style:italic;} -.ec-lmri-12x-x-144{ font-style:italic;} -.ec-lmri-12x-x-144{ font-style:italic;} -.ec-lmri-12x-x-144{ font-style:italic;} -.ec-lmri-12x-x-144{ font-style:italic;} -.ec-lmri-12x-x-144{ font-style:italic;} -.ec-lmri-12x-x-144{ font-style:italic;} -.ec-lmr-12{font-size:120%;} -.ec-lmtt-10{ font-family: monospace,monospace;} -.ec-lmtt-10{ font-family: monospace,monospace;} -.ec-lmtt-10{ font-family: monospace,monospace;} -.ec-lmtt-10{ font-family: monospace,monospace;} -.ec-lmtt-10{ font-family: monospace,monospace;} -.ec-lmtt-10{ font-family: monospace,monospace;} -.ec-lmtt-10{ font-family: monospace,monospace;} -.ec-lmtt-10{ font-family: monospace,monospace;} -.ec-lmtt-10{ font-family: monospace,monospace;} -.ec-lmtt-10{ font-family: monospace,monospace;} -.ec-lmbx-10{ font-weight: bold;} -.ec-lmbx-10{ font-weight: bold;} -.ec-lmbx-10{ font-weight: bold;} -.ec-lmbx-10{ font-weight: bold;} -.ec-lmbx-10{ font-weight: bold;} -.ec-lmbx-10{ font-weight: bold;} -.ec-lmbx-10{ font-weight: bold;} -.ec-lmbx-10{ font-weight: bold;} -.ec-lmbx-10{ font-weight: bold;} -.ec-lmbx-10{ font-weight: bold;} -.ec-lmr-9{font-size:90%;} -.ec-lmr-8{font-size:80%;} -.ec-lmtt-8{font-size:80%; font-family: monospace,monospace;} -.ec-lmtt-8{ font-family: monospace,monospace;} -.ec-lmtt-8{ font-family: monospace,monospace;} -.ec-lmtt-8{ font-family: monospace,monospace;} -.ec-lmtt-8{ font-family: monospace,monospace;} -.ec-lmtt-8{ font-family: monospace,monospace;} -.ec-lmtt-8{ font-family: monospace,monospace;} -.ec-lmtt-8{ font-family: monospace,monospace;} -.ec-lmtt-8{ font-family: monospace,monospace;} -.ec-lmtt-8{ font-family: monospace,monospace;} -.ec-lmri-10{ font-style:italic;} -.ec-lmri-10{ font-style:italic;} -.ec-lmri-10{ font-style:italic;} -.ec-lmri-10{ font-style:italic;} -.ec-lmri-10{ font-style:italic;} -.ec-lmri-10{ font-style:italic;} -.ec-lmri-10{ font-style:italic;} -.ec-lmri-10{ font-style:italic;} -.ec-lmri-10{ font-style:italic;} -.ec-lmri-10{ font-style:italic;} -.lmmi-7{font-size:70%;} -p{margin-top:0;margin-bottom:0} -p.indent{text-indent:0;} -p + p{margin-top:1em;} -p + div, p + pre {margin-top:1em;} -div + p, pre + p {margin-top:1em;} -a { overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; hyphens: auto; } -@media print {div.crosslinks {visibility:hidden;}} -table.tabular{border-collapse: collapse; border-spacing: 0;} -a img { border-top: 0; border-left: 0; border-right: 0; } -center { margin-top:1em; margin-bottom:1em; } -td center { margin-top:0em; margin-bottom:0em; } -.Canvas { position:relative; } -img.math{vertical-align:middle;} -div.par-math-display, div.math-display{text-align:center;} -li p.indent { text-indent: 0em } -li p:first-child{ margin-top:0em; } -li p:last-child, li div:last-child { margin-bottom:0.5em; } -li p:first-child{ margin-bottom:0; } -li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; } -.enumerate1 {list-style-type:decimal;} -.enumerate2 {list-style-type:lower-alpha;} -.enumerate3 {list-style-type:lower-roman;} -.enumerate4 {list-style-type:upper-alpha;} -div.newtheorem { margin-bottom: 2em; margin-top: 2em;} -div.newtheorem .head{font-weight: bold;} -.obeylines-h,.obeylines-v {white-space: nowrap; } -div.obeylines-v p { margin-top:0; margin-bottom:0; } -.overline{ text-decoration:overline; } -.overline img{ border-top: 1px solid black; } -td.displaylines {text-align:center; white-space:nowrap;} -.centerline {text-align:center;} -.rightline {text-align:right;} -pre.verbatim {font-family: monospace,monospace; text-align:left; clear:both; } -.fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } -div.fbox {display:table} -div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } -div.minipage{width:100%;} -div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;} -div.center div {text-align: left;} -div.flushright, div.flushright div.flushright {text-align: right;} -div.flushright div {text-align: left;} -div.flushleft {text-align: left;} -.underline{ text-decoration:underline; } -.underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } -.framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } -.framebox-c {text-align:center;} -.framebox-l {text-align:left;} -.framebox-r {text-align:right;} -span.thank-mark{ vertical-align: super } -span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; } -div.footnotes{border-top:solid 1px black; border-bottom:solid 1px black; padding-bottom:1ex; padding-top:0.5ex; margin-right:15%; margin-top:2ex; font-style:italic; font-size:85%;} -div.footnotes p{margin-top:0; margin-bottom:0; text-indent:0;} -div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; } -table.tabular td p{margin-top:0em;} -table.tabular {margin-left: auto; margin-right: auto;} -td p:first-child{ margin-top:0em; } -td p:last-child{ margin-bottom:0em; } -div.td00{ margin-left:0pt; margin-right:0pt; } -div.td01{ margin-left:0pt; margin-right:5pt; } -div.td10{ margin-left:5pt; margin-right:0pt; } -div.td11{ margin-left:5pt; margin-right:5pt; } -table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } -td.td00{ padding-left:0pt; padding-right:0pt; } -td.td01{ padding-left:0pt; padding-right:5pt; } -td.td10{ padding-left:5pt; padding-right:0pt; } -td.td11{ padding-left:5pt; padding-right:5pt; } -table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } -.hline hr, .cline hr{ height : 0px; margin:0px; } -.hline td, .cline td{ padding: 0; } -.hline hr, .cline hr{border:none;border-top:1px solid black;} -.hline {border-top: 1px solid black;} -.tabbing-right {text-align:right;} -div.float, div.figure {margin-left: auto; margin-right: auto;} -div.float img {text-align:center;} -div.figure img {text-align:center;} -.marginpar,.reversemarginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;} -.marginpar p,.reversemarginpar p{margin-top:0.4em; margin-bottom:0.4em;} -.reversemarginpar{float:left;} -table.equation {width:100%;} -.equation td{text-align:center; } -td.equation { margin-top:1em; margin-bottom:1em; } -td.equation-label { width:5%; text-align:center; } -td.eqnarray4 { width:5%; white-space: normal; } -td.eqnarray2 { width:5%; } -table.eqnarray-star, table.eqnarray {width:100%;} -div.eqnarray{text-align:center;} -div.array {text-align:center;} -div.pmatrix {text-align:center;} -table.pmatrix {width:100%;} -span.pmatrix img{vertical-align:middle;} -div.pmatrix {text-align:center;} -table.pmatrix {width:100%;} -span.bar-css {text-decoration:overline;} -img.cdots{vertical-align:middle;} -.partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;} -.chapterToc a, .chapterToc, .likechapterToc a, .likechapterToc, .appendixToc a, .appendixToc {line-height: 200%; font-weight:bold;} -.index-item, .index-subitem, .index-subsubitem {display:block} -div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;} -div.caption span.id{font-weight: bold; white-space: nowrap; } -h1.partHead{text-align: center} -p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; } -p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; } -.paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;} -.subparagraphHead, .likesubparagraphHead { font-weight: bold;} -.verse{white-space:nowrap; margin-left:2em} -div.maketitle {text-align:center;} -h2.titleHead{text-align:center;} -div.maketitle{ margin-bottom: 2em; } -div.author, div.date {text-align:center;} -div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; } -h1.partHead{text-align: center} - .chapterToc, .likechapterToc {margin-left:0em;} - .chapterToc ~ .likesectionToc, .chapterToc ~ .sectionToc, .likechapterToc ~ .likesectionToc, .likechapterToc ~ .sectionToc {margin-left:2em;} - .chapterToc ~ .likesectionToc ~ .likesubsectionToc, .chapterToc ~ .likesectionToc ~ .subsectionToc, .chapterToc ~ .sectionToc ~ .likesubsectionToc, .chapterToc ~ .sectionToc ~ .subsectionToc, .likechapterToc ~ .likesectionToc ~ .likesubsectionToc, .likechapterToc ~ .likesectionToc ~ .subsectionToc, .likechapterToc ~ .sectionToc ~ .likesubsectionToc, .likechapterToc ~ .sectionToc ~ .subsectionToc {margin-left:4em;} -.chapterToc ~ .likesectionToc ~ .likesubsectionToc ~ .likesubsubsectionToc, .chapterToc ~ .likesectionToc ~ .likesubsectionToc ~ .subsubsectionToc, .chapterToc ~ .likesectionToc ~ .subsectionToc ~ .likesubsubsectionToc, .chapterToc ~ .likesectionToc ~ .subsectionToc ~ .subsubsectionToc, .chapterToc ~ .sectionToc ~ .likesubsectionToc ~ .likesubsubsectionToc, .chapterToc ~ .sectionToc ~ .likesubsectionToc ~ .subsubsectionToc, .chapterToc ~ .sectionToc ~ .subsectionToc ~ .likesubsubsectionToc, .chapterToc ~ .sectionToc ~ .subsectionToc ~ .subsubsectionToc, .likechapterToc ~ .likesectionToc ~ .likesubsectionToc ~ .likesubsubsectionToc, .likechapterToc ~ .likesectionToc ~ .likesubsectionToc ~ .subsubsectionToc, .likechapterToc ~ .likesectionToc ~ .subsectionToc ~ .likesubsubsectionToc, .likechapterToc ~ .likesectionToc ~ .subsectionToc ~ .subsubsectionToc, .likechapterToc ~ .sectionToc ~ .likesubsectionToc ~ .likesubsubsectionToc, .likechapterToc ~ .sectionToc ~ .likesubsectionToc ~ .subsubsectionToc, .likechapterToc ~ .sectionToc ~ .subsectionToc ~ .likesubsubsectionToc .likechapterToc ~ .sectionToc ~ .subsectionToc ~ .subsubsectionToc {margin-left:6em;} - .likesectionToc , .sectionToc {margin-left:0em;} - .likesectionToc ~ .likesubsectionToc, .likesectionToc ~ .subsectionToc, .sectionToc ~ .likesubsectionToc, .sectionToc ~ .subsectionToc {margin-left:2em;} -.likesectionToc ~ .likesubsectionToc ~ .likesubsubsectionToc, .likesectionToc ~ .likesubsectionToc ~ .subsubsectionToc, .likesectionToc ~ .subsectionToc ~ .likesubsubsectionToc, .likesectionToc ~ .subsectionToc ~ .subsubsectionToc, .sectionToc ~ .likesubsectionToc ~ .likesubsubsectionToc, .sectionToc ~ .likesubsectionToc ~ .subsubsectionToc, .sectionToc ~ .subsectionToc ~ .likesubsubsectionToc, .sectionToc ~ .subsectionToc ~ .subsubsectionToc {margin-left:4em;} - .likesubsectionToc, .subsectionToc {margin-left:0em;} - .likesubsectionToc ~ .subsubsectionToc, .subsectionToc ~ .subsubsectionToc {margin-left:2em;} -figure.float, div.figure {margin-left: auto; margin-right: auto;} -figure.figure {text-align:center;} -figcaption.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:center;} -figcaption.caption span.id{font-weight: bold; white-space: nowrap; } -p + figcaption, img + figcaption{margin-top: 1em;} -dt.enumerate{float:left; clear:left; margin-right:0.2em; margin-left:2em;} -dt.compactenum{float:left; clear:left; margin-right:0.2em; margin-left:2em;} -.equation td{text-align:center; } -.equation-star td{text-align:center; } -table.equation-star { width:100%; } -table.equation { width:100%; } -table.align, table.alignat, table.xalignat, table.xxalignat, table.flalign {width:95%; margin-left:5%; white-space: nowrap;} -table.align-star, table.alignat-star, table.xalignat-star, table.flalign-star {margin-left:auto; margin-right:auto; white-space: nowrap;} -td.align-label { width:5%; text-align:center; } -td.align-odd { text-align:right; padding-right:0.3em;} -td.align-even { text-align:left; padding-right:0.6em;} -table.multline, table.multline-star {width:100%;} -td.gather {text-align:center; } -table.gather {width:100%;} -div.gather-star {text-align:center;} -pre.fancyvrb {white-space: pre-wrap; margin:0em;font-family:monospace,monospace;} -.rotatebox{display: inline-block;} -span.textso{letter-spacing: 0.3em; word-spacing: 0.3em} -span.textul{text-decoration:underline} -span.textst{text-decoration:line-through} -span.textcaps{font-variant:small-caps} -#TBL-2-1{border-left: 1px solid black;} -#TBL-2-1{border-right:1px solid black;} -#TBL-2-2{border-right:1px solid black;} -#TBL-2-3{border-right:1px solid black;} -tr#TBL-3-1- {border-top:0.11197em solid #000;} -tr#TBL-3-1- {border-bottom:0.06998em solid #000} -tr#TBL-3-4- {border-bottom:0.11197em solid #000} -#TBL-4-1{border-left: 1px solid black;} -#TBL-4-1{border-right:1px solid black;} -#TBL-4-2{border-right:1px solid black;} -#TBL-4-3{border-right:1px solid black;} -tr#TBL-5-1- {border-top:0.11197em solid #000;} -tr#TBL-5-1- {border-bottom:0.06998em solid #000} -tr#TBL-5-4- {border-bottom:0.11197em solid #000} -/* end css.sty */ - diff --git a/macros/generic/markdown/examples/latex-tex4ht.html b/macros/generic/markdown/examples/latex-tex4ht.html deleted file mode 100644 index 225e65c8f7..0000000000 --- a/macros/generic/markdown/examples/latex-tex4ht.html +++ /dev/null @@ -1,452 +0,0 @@ -
- - - - -

An Example Markdown Document

-
Vít Novotný

-
October 30, 2022
- -
- -An Example Markdown Document - - - - - - - -

Chapter 1
This is an H1

-

1.1 This is an H2

-

-

-

1.1.1 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 link1. -This is an emphasized span of text. This is a strongly emphasized span of -text. -

-
- - - - -
-

-

PIC

-
Figure 1.1: An example image from Martin Scharrer’s mwe package
- -
-
- -

- -
-

-

-
- - -
Name SurnameBorn
Albert Einstein 1879
Marie Curie 1867
ThomasEdison 1847
-
Table 1.1: The great minds of the 19th century rendered via a content block
- -
-
-

This is a fenced code block: -

-
-\documentclass{article}
- 
-\begin{document}
- 
-  Hello world!
- 
-\end{document}
-   
-

This is a table: -

-
- -

- -
- - - - -
RightLeftDefaultCenter
1212 12 12
123123 123 123
11 1 1
-
Table 1.2: Demonstration of pipe table syntax.
- -
-
-

This is a bullet list: -

-

that spans several paragraphs, -

- -

This is a compact bullet list: -

-

This is an ordered list: -

-5.
The first item of an ordered list
-

that spans several paragraphs, -

-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
-

that spans several paragraphs, -

- f)
the second item of an ordered list, -
-g)
the third item of an ordered list.
-

This is an ordered list using hash enumerators: -

-1.
The first item of an ordered list
- -

that spans several paragraphs, -

-1.
the second item of an ordered list, -
-2.
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: -

-1.
The first item of an ordered list, -
-2.
the second item of an ordered list, -
-3.
the third item of an ordered list.
-

This is a compact fancy ordered list using hash enumerators: -

-1.
The first item of an ordered list, -
-2.
the second item of an ordered list, -
-3.
the third item of an ordered list.
-

This is a task 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 reference2 -and another.3 Here -is an inline note.4 -

This is raw TeX code: -

-

-
-xn + yn = zn
-
- -

- -

-

Chapter 2
This is an H1

-

2.1 This is an H2

-

-

-

2.1.1 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 link1. -This is an emphasized span of text. This is a strongly emphasized span of -text. -

-
- - - - -
-

-

PIC

-
Figure 2.1: An example image from Martin Scharrer’s mwe package
- -
-
- -

- -
-

-

-
- - -
Name SurnameBorn
Albert Einstein 1879
Marie Curie 1867
ThomasEdison 1847
-
Table 2.1: The great minds of the 19th century rendered via a content block
- -
-
-

This is a fenced code block: -

-
-\documentclass{article}
- 
-\begin{document}
- 
-  Hello world!
- 
-\end{document}
-   
-

This is a table: -

-
- -

- -
- - - - -
RightLeftDefaultCenter
1212 12 12
123123 123 123
11 1 1
-
Table 2.2: Demonstration of pipe table syntax.
- -
-
-

This is a bullet list: -

-

that spans several paragraphs, -

- -

This is a compact bullet list: -

-

This is an ordered list: -

-5.
The first item of an ordered list
-

that spans several paragraphs, -

-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
-

that spans several paragraphs, -

- f)
the second item of an ordered list, -
-g)
the third item of an ordered list.
-

This is an ordered list using hash enumerators: -

-1.
The first item of an ordered list
- -

that spans several paragraphs, -

-1.
the second item of an ordered list, -
-2.
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: -

-1.
The first item of an ordered list, -
-2.
the second item of an ordered list, -
-3.
the third item of an ordered list.
-

This is a compact fancy ordered list using hash enumerators: -

-1.
The first item of an ordered list, -
-2.
the second item of an ordered list, -
-3.
the third item of an ordered list.
-

This is a task 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 reference2 -and another.3 Here -is an inline note.4 -

This is raw TeX code: -

-

-
-xn + yn = zn
-
-

Here are some non-ASCII characters: ěščřžýáíé. -

Here is some HTML code mixed with Markdown. In TeX, the HTML code will be -silently ignored, whereas in TeX4ht, the HTML code will be passed through to the -output: -

- - - - - - - - - - -
EmilTobiasLinus
161410
-

1Google: http://google.cz

-

2Here is the note.

3Here’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.

-

4Inlines notes are easier to write, since you don’t have to pick an identifier and move down to -type the note.

-

1Google: http://google.cz

-

2Here is the note.

3Here’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.

-

4Inlines notes are easier to write, since you don’t have to pick an identifier and move down to -type the note.

- - - \ No newline at end of file diff --git a/macros/generic/markdown/examples/latex-xetex.pdf b/macros/generic/markdown/examples/latex-xetex.pdf deleted file mode 100644 index cfbebde5e3..0000000000 Binary files a/macros/generic/markdown/examples/latex-xetex.pdf and /dev/null differ diff --git a/macros/generic/markdown/latexmkrc b/macros/generic/markdown/latexmkrc deleted file mode 100644 index a9b6a23ef6..0000000000 --- a/macros/generic/markdown/latexmkrc +++ /dev/null @@ -1,5 +0,0 @@ -$pdflatex = 'lualatex --shell-escape %O %S'; -$makeindex = 'makeindex -s %R.ist %O -o %D %S'; -$pdf_mode = 1; -$postscript_mode = 0; -$dvi_mode = 0; diff --git a/macros/generic/markdown/markdown.dtx b/macros/generic/markdown/markdown.dtx index b165924476..5b3f73cb8e 100644 --- a/macros/generic/markdown/markdown.dtx +++ b/macros/generic/markdown/markdown.dtx @@ -1,6 +1,6 @@ % \iffalse %<*driver> -\documentclass[nohyperref]{ltxdockit} +\documentclass{ltxdockit} \usepackage[american]{babel} \usepackage{amsmath,btxdockit,doc,fancyvrb,graphicx,hologo,microtype,minted} @@ -1145,11 +1145,11 @@ local md5 = require("md5") % %: A library that provides access to the filesystem via \acro{os}-specific % syscalls. It is used by the plain \TeX{} code to create the cache -% directory specified by the \mref{markdownOptionCacheDir} macro before -% interfacing with the \pkg{Lunamark} library. \pkg{Lua File System} is -% included in all releases of Lua\TeX{} (\TeX Live${}\geq{}2008$). +% directory specified by the \Opt{cacheDir} option before interfacing with +% the \pkg{Lunamark} library. \pkg{Lua File System} is included in all +% releases of Lua\TeX{} (\TeX Live${}\geq{}2008$). % -% The plain \TeX{} code makes use of the \luamref{isdir} method that was added +% The plain \TeX{} code makes use of the `isdir` method that was added % to the \pkg{Lua File System} library by the Lua\TeX{} engine % developers~[@luatex21, Section 4.2.4]. % @@ -1159,7 +1159,7 @@ local md5 = require("md5") % Unless you convert markdown documents to \TeX{} manually using the Lua % command-line interface (see Section <#sec:lua-cli-interface>), the plain % \TeX{} part of the package will require that either the Lua\TeX{} -% \mref{directlua} primitive or the shell access file stream 18 is available in +% `\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 @@ -1202,18 +1202,17 @@ local md5 = require("md5") % % \pkg{url} % -%: A package that provides the \mref{url} macro for the typesetting of -% links. +%: A package that provides the `\url` macro for the typesetting of links. % % \pkg{graphicx} % -%: A package that provides the \mref{includegraphics} macro for the typesetting +%: A package that provides the `\includegraphics` macro for the typesetting % of images. % % \pkg{paralist} % -%: A package that provides the \envmref{compactitem}, \envmref{compactenum}, and -% \envmref{compactdesc} macros for the typesetting of tight bulleted lists, +%: A package that provides the `compactitem`, `compactenum`, and +% `compactdesc` macros for the typesetting of tight bulleted lists, % ordered lists, and definition lists. % % \pkg{ifthen} @@ -1224,18 +1223,18 @@ local md5 = require("md5") % % \pkg{fancyvrb} % -%: A package that provides the \mref{VerbatimInput} macros for the verbatim +%: A package that provides the `\VerbatimInput` macros for the verbatim % inclusion of files containing code. % % \pkg{csvsimple} % -%: A package that provides the \mref{csvautotabular} macro for typesetting +%: A package that provides the `\csvautotabular` macro for typesetting % \acro{csv} files in the default renderer prototypes for iA\,Writer % content blocks. % % \pkg{gobble} % -%: A package that provides the \mref{\@gobblethree} \TeX{} command that +%: A package that provides the `\@gobblethree` \TeX{} command that % is used in the default renderer prototype for citations. The package % is included in \TeX Live${}\geq{}2016$. % @@ -1680,7 +1679,7 @@ local walkable_syntax = { % \luamref{reader->insert_pattern} with `"Inline after Emph"` (or `"Inline % before Link"`) and `pattern` as the arguments. % -% The \luamdef{reader->add_special_character} method adds a new character with +% The \luamref{reader->add_special_character} method adds a new character with % special meaning to the grammar of markdown. The method receives the character % as its only argument. % @@ -2569,7 +2568,7 @@ defaultOptions.debugExtensionsFileName = "debug-extensions.json" The frozen cache makes it possible to later typeset a plain \TeX{} document that contains markdown documents without invoking Lua using - the \mref{markdownOptionFrozenCache} plain \TeX{} option. As a result, the + the \Opt{frozenCache} plain \TeX{} option. As a result, the plain \TeX{} document becomes more portable, but further changes in the order and the content of markdown documents will not be reflected. @@ -3048,7 +3047,7 @@ following content: convert = markdown.new({fencedCode = true}) input = "A paragraph." .. newline .. "```" .. newline .. - "A code fence." .. newline .. + "A fenced code." .. newline .. "```" .. newline tex.sprint(convert(input)) @@ -3056,7 +3055,7 @@ following content: fencedCode = true, blankBeforeCodeFence = true}) input = "A paragraph." .. newline .. "```" .. newline .. - "Not a code fence." .. newline .. + "Not a fenced code." .. newline .. "```" .. newline tex.sprint(convert(input)) } \bye @@ -3071,10 +3070,10 @@ following text: > A paragraph. > > ``` -> A code fence. +> A fenced code. > ``` > -> A paragraph. ``` Not a code fence. ``` +> A paragraph. ``` Not a fenced code. ``` ##### Lua CLI Example {.unnumbered} @@ -3129,7 +3128,7 @@ following content: \markdownBegin A paragraph. ``` -A code fence. +A fenced code. ``` \markdownEnd @@ -3137,7 +3136,7 @@ A code fence. \markdownBegin A paragraph. ``` -Not a code fence. +Not a fenced code. ``` \markdownEnd @@ -3153,10 +3152,10 @@ following text: > A paragraph. > > ``` -> A code fence. +> A fenced code. > ``` > -> A paragraph. ``` Not a code fence. ``` +> A paragraph. ``` Not a fenced code. ``` ##### \LaTeX{} Example {.unnumbered} @@ -3170,14 +3169,14 @@ following content: \begin{markdown} A paragraph. ``` -A code fence. +A fenced code. ``` \end{markdown} \begin{markdown*}{blankBeforeCodeFence} A paragraph. ``` -Not a code fence. +Not a fenced code. ``` \end{markdown*} @@ -3193,10 +3192,10 @@ following text: > A paragraph. > > ``` -> A code fence. +> A fenced code. > ``` > -> A paragraph. ``` Not a code fence. ``` +> A paragraph. ``` Not a fenced code. ``` ##### \Hologo{ConTeXt} Example {.unnumbered} @@ -3210,7 +3209,7 @@ following content: \startmarkdown A paragraph. ``` -A code fence. +A fenced code. ``` \stopmarkdown @@ -3218,7 +3217,7 @@ A code fence. \startmarkdown A paragraph. ``` -Not a code fence. +Not a fenced code. ``` \stopmarkdown @@ -3234,10 +3233,10 @@ following text: > A paragraph. > > ``` -> A code fence. +> A fenced code. > ``` > -> A paragraph. ``` Not a code fence. ``` +> A paragraph. ``` Not a fenced code. ``` % %<*tex> @@ -3260,6 +3259,85 @@ defaultOptions.blankBeforeCodeFence = false % %<*manual-options> +#### Option `blankBeforeDivFence` + +`blankBeforeDivFence` (default value: `false`) + +% \fi +% \begin{markdown} +% +% \Optitem[false]{blankBeforeDivFence}{\opt{true}, \opt{false}} +% +: true + + : Require a blank line before the closing fence of a fenced div. + + false + + : Do not require a blank line before the closing fence of a fenced div. + +% \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[fencedDivs]{markdown} +\begin{document} + +\begin{markdown} +A paragraph. +::: {.identifier} +A fenced div. +::: +\end{markdown} + +\begin{markdown*}{blankBeforeDivFence} +A paragraph. +``` +Not a fenced div. +``` +\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 fenced div. +> +> A paragraph. ::: {.identifier} Not a fenced div. ::: + +% +%<*tex> +% \fi +% \begin{macrocode} +\@@_add_lua_option:nnn + { blankBeforeDivFence } + { boolean } + { false } +% \end{macrocode} +% \iffalse +% +%<*lua,lua-cli> +% \fi +% \begin{macrocode} +defaultOptions.blankBeforeDivFence = false +% \end{macrocode} +% \par +% \iffalse +% +%<*manual-options> + #### Option `blankBeforeHeading` `blankBeforeHeading` (default value: `false`) @@ -3492,6 +3570,100 @@ defaultOptions.blankBeforeHeading = false % %<*manual-options> +#### Option `bracketedSpans` + +`bracketedSpans` (default value: `false`) + +% \fi +% \begin{markdown} +% +% \Optitem[false]{bracketedSpans}{\opt{true}, \opt{false}} +% +: true + + : Enable the Pandoc bracketed spans extension: + + ``` md + [This is *some text*]{.class key="val"} + `````` + +: false + + : Disable the Pandoc bracketed spans extension: + +% \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[bracketedSpans]{markdown} +\usepackage{expl3} +\ExplSyntaxOn +\markdownSetup{ + renderers = { + bracketedSpanAttributeContextBegin = { + \group_begin: + \color_group_begin: + \markdownSetup{ + renderers = { + attributeKeyValue = { + \str_if_eq:nnT + { #1 } + { color } + { + \color_select:n { #2 } + } + }, + }, + } + }, + bracketedSpanAttributeContextEnd = { + \color_group_end: + \group_end: + }, + }, +} +\ExplSyntaxOff +\begin{document} +\begin{markdown} +Here is some [colored text]{color=red}. +\end{markdown} +\end{document} +``````` +Next, invoke LuaTeX from the terminal: +``` sh +lualatex --shell-escape document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> Here is some [colored text]{color=red}. + +% +%<*tex> +% \fi +% \begin{macrocode} +\@@_add_lua_option:nnn + { bracketedSpans } + { boolean } + { false } +% \end{macrocode} +% \iffalse +% +%<*lua,lua-cli> +% \fi +% \begin{macrocode} +defaultOptions.bracketedSpans = false +% \end{macrocode} +% \par +% \iffalse +% +%<*manual-options> + #### Option `breakableBlockquotes` `breakableBlockquotes` (default value: `false`) @@ -4694,196 +4866,45 @@ defaultOptions.eagerCache = true % %<*manual-options> -#### Option `extensions` +#### Option `expectJekyllData` -`extensions` (default value: `{}`) +`expectJekyllData` (default value: `false`) % \fi -% \begin{markdown} +% \markdownBegin % -% \Valitem[\{\}]{extensions}{filenames} +% \Optitem[false]{expectJekyllData}{\opt{true}, \opt{false}} % -: The filenames of user-defined syntax extensions that will be applied to the - markdown reader. If the \pkg{kpathsea} library is available, files will be - searched for not only in the current working directory but also in the - \TeX{} directory structure. +: false -% A user-defined syntax extension is a Lua file in the following format: -% -% ``` lua -% local strike_through = { -% api_version = 2, -% grammar_version = 2, -% finalize_grammar = function(reader) -% local nonspacechar = lpeg.P(1) - lpeg.S("\t ") -% local doubleslashes = lpeg.P("//") -% local function between(p, starter, ender) -% ender = lpeg.B(nonspacechar) * ender -% return (starter * #nonspacechar -% * lpeg.Ct(p * (p - ender)^0) * ender) -% end -% -% local read_strike_through = between( -% lpeg.V("Inline"), doubleslashes, doubleslashes -% ) / function(s) return {"\\st{", s, "}"} end -% -% reader.insert_pattern("Inline after Emph", read_strike_through, -% "StrikeThrough") -% reader.add_special_character("/") -% end -% } -% -% return strike_through -% ``````` -% -% The `api_version` and `grammar_version` fields specify the version of the -% user-defined syntax extension API and the markdown grammar for which -% the extension was written. See the current API and grammar versions -% below: -% -% \end{markdown} -% \iffalse -% -%<*lua> -% \fi -% \begin{macrocode} -metadata.user_extension_api_version = 2 -metadata.grammar_version = 2 -% \end{macrocode} -% \iffalse -% -%<*manual-options> -% \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). -% -% 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 <#luauserextensions>. -% -% \end{markdown} -% \iffalse + : When the \Opt{jekyllData} option is enabled, then a markdown document + may begin with \acro{yaml} metadata if and only if the metadata begin + with the end-of-directives marker (`---`) and they end with either the + end-of-directives or the end-of-document marker (`...`): -##### \LaTeX{} Example {.unnumbered} + ~~~~~ latex + \documentclass{article} + \usepackage[jekyllData]{markdown} + \begin{document} + \begin{markdown} + --- + - this + - is + - YAML + ... + - followed + - by + - Markdown + \end{markdown} + \begin{markdown} + - this + - is + - Markdown + \end{markdown} + \end{document} + ~~~~~~~~~~~ -Using a text editor, create a text document named `strike-through.lua` with the -following content: -``` lua -local strike_through = { - api_version = 2, - grammar_version = 2, - finalize_grammar = function(reader) - local nonspacechar = lpeg.P(1) - lpeg.S("\t ") - local doubleslashes = lpeg.P("//") - local function between(p, starter, ender) - ender = lpeg.B(nonspacechar) * ender - return (starter * #nonspacechar - * lpeg.Ct(p * (p - ender)^0) * ender) - end - - local read_strike_through = between( - lpeg.V("Inline"), doubleslashes, doubleslashes - ) / function(s) return {"\\st{", s, "}"} end - - reader.insert_pattern("Inline after Emph", read_strike_through, - "StrikeThrough") - reader.add_special_character("/") - end -} - -return strike_through -``````` -Using a text editor, create also a text document named `document.tex` with the -following content: -``` tex -\documentclass{article} -\usepackage{soul} -\usepackage[extension = strike-through.lua]{markdown} -\begin{document} -\begin{markdown} -This is //a lunar roving vehicle// strike-through 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 lunar roving vehicle~~ strike-through text. - -% -%<*tex> -% \fi -% \begin{macrocode} -\cs_generate_variant:Nn - \@@_add_lua_option:nnn - { nnV } -\@@_add_lua_option:nnV - { extensions } - { clist } - \c_empty_clist -% \end{macrocode} -% \iffalse -% -%<*lua,lua-cli> -% \fi -% \begin{macrocode} -defaultOptions.extensions = {} -% \end{macrocode} -% \par -% \iffalse -% -%<*manual-options> - -#### Option `expectJekyllData` - -`expectJekyllData` (default value: `false`) - -% \fi -% \markdownBegin -% -% \Optitem[false]{expectJekyllData}{\opt{true}, \opt{false}} -% -: false - - : When the \Opt{jekyllData} option is enabled, then a markdown document - may begin with \acro{yaml} metadata if and only if the metadata begin - with the end-of-directives marker (`---`) and they end with either the - end-of-directives or the end-of-document marker (`...`): - - ~~~~~ latex - \documentclass{article} - \usepackage[jekyllData]{markdown} - \begin{document} - \begin{markdown} - --- - - this - - is - - YAML - ... - - followed - - by - - Markdown - \end{markdown} - \begin{markdown} - - this - - is - - Markdown - \end{markdown} - \end{document} - ~~~~~~~~~~~ - -: true +: true : When the \Opt{jekyllData} option is enabled, then a markdown document may begin directly with \acro{yaml} metadata and may contain nothing but @@ -4969,6 +4990,157 @@ defaultOptions.expectJekyllData = false % %<*manual-options> +#### Option `extensions` + +`extensions` (default value: `{}`) + +% \fi +% \begin{markdown} +% +% \Valitem[\{\}]{extensions}{filenames} +% +: The filenames of user-defined syntax extensions that will be applied to the + markdown reader. If the \pkg{kpathsea} library is available, files will be + searched for not only in the current working directory but also in the + \TeX{} directory structure. + +% A user-defined syntax extension is a Lua file in the following format: +% +% ``` lua +% local strike_through = { +% api_version = 2, +% grammar_version = 2, +% finalize_grammar = function(reader) +% local nonspacechar = lpeg.P(1) - lpeg.S("\t ") +% local doubleslashes = lpeg.P("//") +% local function between(p, starter, ender) +% ender = lpeg.B(nonspacechar) * ender +% return (starter * #nonspacechar +% * lpeg.Ct(p * (p - ender)^0) * ender) +% end +% +% local read_strike_through = between( +% lpeg.V("Inline"), doubleslashes, doubleslashes +% ) / function(s) return {"\\st{", s, "}"} end +% +% reader.insert_pattern("Inline after Emph", read_strike_through, +% "StrikeThrough") +% reader.add_special_character("/") +% end +% } +% +% return strike_through +% ``````` +% +% The `api_version` and `grammar_version` fields specify the version of the +% user-defined syntax extension API and the markdown grammar for which +% the extension was written. See the current API and grammar versions +% below: +% +% \end{markdown} +% \iffalse +% +%<*lua> +% \fi +% \begin{macrocode} +metadata.user_extension_api_version = 2 +metadata.grammar_version = 2 +% \end{macrocode} +% \iffalse +% +%<*manual-options> +% \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). +% +% 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 <#luauserextensions>. +% +% \end{markdown} +% \iffalse + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `strike-through.lua` with the +following content: +``` lua +local strike_through = { + api_version = 2, + grammar_version = 2, + finalize_grammar = function(reader) + local nonspacechar = lpeg.P(1) - lpeg.S("\t ") + local doubleslashes = lpeg.P("//") + local function between(p, starter, ender) + ender = lpeg.B(nonspacechar) * ender + return (starter * #nonspacechar + * lpeg.Ct(p * (p - ender)^0) * ender) + end + + local read_strike_through = between( + lpeg.V("Inline"), doubleslashes, doubleslashes + ) / function(s) return {"\\st{", s, "}"} end + + reader.insert_pattern("Inline after Emph", read_strike_through, + "StrikeThrough") + reader.add_special_character("/") + end +} + +return strike_through +``````` +Using a text editor, create also a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage{soul} +\usepackage[extension = strike-through.lua]{markdown} +\begin{document} +\begin{markdown} +This is //a lunar roving vehicle// strike-through 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 lunar roving vehicle~~ strike-through text. + +% +%<*tex> +% \fi +% \begin{macrocode} +\cs_generate_variant:Nn + \@@_add_lua_option:nnn + { nnV } +\@@_add_lua_option:nnV + { extensions } + { clist } + \c_empty_clist +% \end{macrocode} +% \iffalse +% +%<*lua,lua-cli> +% \fi +% \begin{macrocode} +defaultOptions.extensions = {} +% \end{macrocode} +% \par +% \iffalse +% +%<*manual-options> + #### Option `fancyLists` `fancyLists` (default value: `false`) @@ -5237,22 +5409,99 @@ defaultOptions.fencedCode = false % %<*manual-options> -#### Option `finalizeCache` +#### Option `fencedDivs` -`finalizeCache` (default value: `false`) +`fencedDivs` (default value: `false`) % \fi % \begin{markdown} % -% \Optitem[false]{finalizeCache}{\opt{true}, \opt{false}} +% \Optitem[false]{fencedDivs}{\opt{true}, \opt{false}} % -: Whether an output file specified with the \Opt{frozenCacheFileName} option - (frozen cache) that contains a mapping between an enumeration of markdown - documents and their auxiliary cache files will be created. +: true - The frozen cache makes it possible to later typeset a plain \TeX{} - document that contains markdown documents without invoking Lua using - the \mref{markdownOptionFrozenCache} plain \TeX{} option. As a result, the + : Enable the Pandoc fenced divs extension: + + ``` md + ::::: {#special .sidebar} + Here is a paragraph. + + And another. + ::::: + `````` + +: false + + : Disable the Pandoc fenced divs extension: + +% \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[fencedDivs]{markdown} +\begin{document} +\begin{markdown}{slice=special} +Here is a regular paragraph. + +::::: {#special} +Here is a special paragraph. +::::: + +And here is another regular paragraph. +\end{markdown} +\end{document} +``````` +Next, invoke LuaTeX from the terminal: +``` sh +lualatex --shell-escape document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> Here is a special paragraph. + +% +%<*tex> +% \fi +% \begin{macrocode} +\@@_add_lua_option:nnn + { fencedDivs } + { boolean } + { false } +% \end{macrocode} +% \iffalse +% +%<*lua,lua-cli> +% \fi +% \begin{macrocode} +defaultOptions.fencedDivs = false +% \end{macrocode} +% \par +% \iffalse +% +%<*manual-options> + +#### Option `finalizeCache` + +`finalizeCache` (default value: `false`) + +% \fi +% \begin{markdown} +% +% \Optitem[false]{finalizeCache}{\opt{true}, \opt{false}} +% +: Whether an output file specified with the \Opt{frozenCacheFileName} option + (frozen cache) that contains a mapping between an enumeration of markdown + documents and their auxiliary cache files will be created. + + The frozen cache makes it possible to later typeset a plain \TeX{} + document that contains markdown documents without invoking Lua using + the \Opt{frozenCache} plain \TeX{} option. As a result, the plain \TeX{} document becomes more portable, but further changes in the order and the content of markdown documents will not be reflected. @@ -5401,186 +5650,6 @@ defaultOptions.finalizeCache = false % %<*manual-options> -#### Option `notes` - -`notes` (default value: `false`) - -% \fi -% \begin{markdown} -% -% \Optitem[false]{notes}{\opt{true}, \opt{false}} -% -: true - - : Enable the Pandoc note syntax extension: - - ``` md - Here is a note reference,[^1] and another.[^longnote] - - [^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 paragraph won't be part of the note, because it - isn't indented. - `````` - -: false - - : Disable the Pandoc note syntax extension. - -% \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[notes]{markdown} -\begin{document} -\begin{markdown} -Here is a note reference,[^1] and another.[^longnote] - -[^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 paragraph won't be part of the note, because it -isn't indented. -\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: - -> Here is a note reference,[^1] and another.[^longnote] -> -> [^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 paragraph won't be part of the note, because it -> isn't indented. - -##### \Hologo{ConTeXt} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\usemodule[t][markdown] -\setupmarkdown[notes = yes] -\starttext -\startmarkdown -Here is a note reference,[^1] and another.[^longnote] - -[^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 paragraph won't be part of the note, because it -isn't indented. -\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: - -> Here is a note reference,[^1] and another.[^longnote] -> -> [^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 paragraph won't be part of the note, because it -> isn't indented. - -% -%<*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 } -% \end{macrocode} -% \iffalse -% -%<*lua,lua-cli> -% \fi -% \begin{macrocode} -defaultOptions.footnotes = false -defaultOptions.notes = false -% \end{macrocode} -% \par -% \iffalse -% -%<*manual-options> - #### Option `frozenCacheCounter` `frozenCacheCounter` (default value: `0`) @@ -5883,12 +5952,6 @@ defaultOptions.hashEnumerators = false =================== `````` - These HTML attributes have currently no effect other than enabling -% content slicing, see the \Opt{slice} option. -% \iffalse - [content slicing](#slice). -% \fi - : false : Disable the assignment of HTML attributes to headings. @@ -6663,18 +6726,198 @@ defaultOptions.jekyllData = false % %<*manual-options> -#### Option `pipeTables` {#pipe-tables} +#### Option `notes` -`pipeTables` (default value: `false`) +`notes` (default value: `false`) % \fi % \begin{markdown} % -% \Optitem[false]{pipeTables}{\opt{true}, \opt{false}} +% \Optitem[false]{notes}{\opt{true}, \opt{false}} % : true - : Enable the \acro{PHP} Markdown pipe table syntax extension: + : Enable the Pandoc note syntax extension: + + ``` md + Here is a note reference,[^1] and another.[^longnote] + + [^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 paragraph won't be part of the note, because it + isn't indented. + `````` + +: false + + : Disable the Pandoc note syntax extension. + +% \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[notes]{markdown} +\begin{document} +\begin{markdown} +Here is a note reference,[^1] and another.[^longnote] + +[^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 paragraph won't be part of the note, because it +isn't indented. +\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: + +> Here is a note reference,[^1] and another.[^longnote] +> +> [^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 paragraph won't be part of the note, because it +> isn't indented. + +##### \Hologo{ConTeXt} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\usemodule[t][markdown] +\setupmarkdown[notes = yes] +\starttext +\startmarkdown +Here is a note reference,[^1] and another.[^longnote] + +[^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 paragraph won't be part of the note, because it +isn't indented. +\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: + +> Here is a note reference,[^1] and another.[^longnote] +> +> [^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 paragraph won't be part of the note, because it +> isn't indented. + +% +%<*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 } +% \end{macrocode} +% \iffalse +% +%<*lua,lua-cli> +% \fi +% \begin{macrocode} +defaultOptions.footnotes = false +defaultOptions.notes = false +% \end{macrocode} +% \par +% \iffalse +% +%<*manual-options> + +#### Option `pipeTables` {#pipe-tables} + +`pipeTables` (default value: `false`) + +% \fi +% \begin{markdown} +% +% \Optitem[false]{pipeTables}{\opt{true}, \opt{false}} +% +: true + + : Enable the \acro{PHP} Markdown pipe table syntax extension: ``` md | Right | Left | Default | Center | @@ -7132,7 +7375,7 @@ defaultOptions.shiftHeadings = 0 % %<*manual-options> -#### Option `slice` {#slice} +#### Option `slice` `slice` (default value: `^ $`) @@ -9042,7 +9285,7 @@ pdftex --shell-escape document.tex % \input markdown % ``````` % \noindent It is expected that the special plain \TeX{} characters have the -% expected category codes, when \mref{input}ting the file. +% expected category codes, when `\input`ting the file. % %### Typesetting Markdown {#textypesetting} % @@ -9208,7 +9451,7 @@ following code in your plain \TeX{} document: %#### Finalizing and Freezing the Cache % The \mdef{markdownOptionFinalizeCache} option corresponds to the Lua % interface \Opt{finalizeCache} option, which creates an output file -% \mref{markdownOptionFrozenCacheFileName} (frozen cache) that contains a mapping +% \Opt{frozenCacheFileName} (frozen cache) that contains a mapping % between an enumeration of the markdown documents in the plain \TeX{} document % and their auxiliary files cached in the \Opt{cacheDir} directory. % @@ -9221,7 +9464,7 @@ following code in your plain \TeX{} document: % \fi % The \mdef{markdownOptionFrozenCache} option uses the mapping previously -% created by the \mref{markdownOptionFinalizeCache} option, +% created by the \Opt{finalizeCache} option, % \iffalse created by the Lua interface \Opt{finalizeCache} option, % \fi @@ -9255,12 +9498,12 @@ options is as follows: 1. Remove the \Opt{cacheDir} cache directory with stale auxiliary cache files. -% 2. Enable the \mref{markdownOptionFinalizeCache} option. +% 2. Enable the \Opt{finalizeCache} option. % \iffalse 2. Enable the \Opt{finalizeCache} option. % \fi 3. Typeset the plain \TeX{} document to populate and finalize the cache. -4. Enable the \mref{markdownOptionFrozenCache} option. +4. Enable the \Opt{frozenCache} option. 5. Publish the source code of the plain \TeX{} document and the \Opt{cacheDir} directory. @@ -9279,13 +9522,13 @@ For more information, see the examples for the \Opt{finalizeCache} option. % % 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 \mref{directlua} primitive. It -% defaults to \mref{jobname}`.markdown.lua`, where \mref{jobname} is the base name +% 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 expansion of this macro must not contain quotation marks (`"`) or % backslash symbols (`\`). Mind that \TeX{} engines tend to -% put quotation marks around \mref{jobname}, when it contains spaces. +% put quotation marks around `\jobname`, when it contains spaces. % % \end{markdown} % \begin{macrocode} @@ -9297,10 +9540,10 @@ For more information, see the examples for the \Opt{finalizeCache} option. % \par % \begin{markdown} % -% The \mref{markdownOptionHelperScriptFileName} macro has been deprecated and +% 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 \mref{g_luabridge_helper_script_filename_str} macro -% from the \pkg{lt3luabridge} package. +% script file, use the `\g_luabridge_helper_script_filename_str` macro from the +% \pkg{lt3luabridge} package. % % \end{markdown} % \begin{macrocode} @@ -9314,8 +9557,8 @@ For more information, see the examples for the \Opt{finalizeCache} option. % % 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 \mref{jobname}`.markdown.in`. The same -% limitations as in the case of the \mref{markdownOptionHelperScriptFileName} +% from a \TeX{} source. It defaults to `\jobname.markdown.in`. The same +% limitations as in the case of the \Opt{helperScriptFileName} % macro apply here. % % \end{markdown} @@ -9331,8 +9574,8 @@ For more information, see the examples for the \Opt{finalizeCache} option. % 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 -% \mref{jobname}`.markdown.out`. The same limitations apply here as in the case -% of the \mref{markdownOptionHelperScriptFileName} macro. +% `\jobname.markdown.out`. The same limitations apply here as in the case +% of the \Opt{helperScriptFileName} macro. % % \end{markdown} % \begin{macrocode} @@ -9344,7 +9587,7 @@ For more information, see the examples for the \Opt{finalizeCache} option. % \par % \begin{markdown} % -% The \mref{markdownOptionOutputTempFileName} macro has been deprecated and +% The \Opt{outputTempFileName} macro has been deprecated and % will be removed in Markdown 3.0.0. % % \end{markdown} @@ -9360,8 +9603,8 @@ For more information, see the examples for the \Opt{finalizeCache} option. % 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 \mref{jobname}`.markdown.err`. The same limitations -% apply here as in the case of the \mref{markdownOptionHelperScriptFileName} +% `2`. It defaults to `\jobname.markdown.err`. The same limitations +% apply here as in the case of the \Opt{helperScriptFileName} % macro. % % \end{markdown} @@ -9374,10 +9617,10 @@ For more information, see the examples for the \Opt{finalizeCache} option. % \par % \begin{markdown} % -% The \mref{markdownOptionErrorTempFileName} macro has been deprecated and +% 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 \mref{g_luabridge_error_output_filename_str} -% macro from the \pkg{lt3luabridge} package. +% file for Lua errors, use the `\g_luabridge_error_output_filename_str` macro +% from the \pkg{lt3luabridge} package. % % \end{markdown} % \begin{macrocode} @@ -9398,7 +9641,7 @@ For more information, see the examples for the \Opt{finalizeCache} option. % 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 -% \mref{markdownOptionHelperScriptFileName} macro. +% \Opt{helperScriptFileName} macro. % % \end{markdown} % \begin{macrocode} @@ -9419,7 +9662,7 @@ For more information, see the examples for the \Opt{finalizeCache} option. % % 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 -% \mref{markdownOptionHelperScriptFileName} macro. +% \Opt{helperScriptFileName} macro. % % \end{markdown} % \begin{macrocode} @@ -9690,19 +9933,34 @@ In this section, I will describe the individual token renderers. \prop_new:N \g_@@_renderer_arities_prop \ExplSyntaxOff % \end{macrocode} +% \par +% % \iffalse % %<*manual-tokens> % \fi +% % \begin{markdown} -#### Tickbox Renderers -The macros named \mdef{markdownRendererTickedBox}, -\mdef{markdownRendererHalfTickedBox}, and \mdef{markdownRendererUntickedBox} -represent ticked and unticked boxes, respectively. These macros will either be -produced, when the \Opt{taskLists} option is enabled, or 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. +#### Attribute Renderers +The following macros are only produced, when the \Opt{headerAttributes} option +is enabled. + +\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}. + +\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}. + +\mdef{markdownRendererAttributeKeyValue} represents a HTML attribute in the form +\meta{key}`=`\meta{value} that is neither an identifier nor a class name. +The macro receives two attributes that correspond to the \meta{key} and the +\meta{value}, respectively. % \end{markdown} % @@ -9714,17 +9972,35 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \documentclass{article} -\usepackage[taskLists]{markdown} +\usepackage[headerAttributes, underscores=false]{markdown} \markdownSetup{ renderers = { - untickedBox = No, - tickedBox = Yes, + attributeIdentifier = {% + \par + \emph{(Identifier: #1)} + \par + }, + attributeClassName = {% + \par + \emph{(Class name: #1)} + \par + }, + attributeKeyValue = {% + \par + \emph{(Key: #1, Value: #2)} + \par + }, }, } \begin{document} \begin{markdown} -- [ ] you can't. -- [x] I can! + +# First top-level heading {jane=doe} + +## A subheading {#identifier} + +# Second top-level heading {.class_name} + \end{markdown} \end{document} ``````` @@ -9735,72 +10011,55 @@ lualatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> - No you can't. -> - Yes I can! - -##### \Hologo{ConTeXt} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\usemodule[t][markdown] -\setupmarkdown[taskLists = yes] -\def\markdownRendererUntickedBox{No} -\def\markdownRendererTickedBox{Yes} -\starttext -\startmarkdown -- [ ] you can't. -- [x] I can! -\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: - -> - No you can't. -> - Yes I can! +> # First top-level heading +> +> *(Key: Jane, Value: Doe)* +> +> ## A subheading +> +> *(Identifier: identifier)* +> +> # Second top-level heading +> +> *(Class name: class\_name)* % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererTickedBox{% - \markdownRendererTickedBoxPrototype}% +\def\markdownRendererAttributeIdentifier{% + \markdownRendererAttributeIdentifierPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { tickedBox } + { attributeIdentifier } \prop_gput:Nnn \g_@@_renderer_arities_prop - { tickedBox } - { 0 } + { attributeIdentifier } + { 1 } \ExplSyntaxOff -\def\markdownRendererHalfTickedBox{% - \markdownRendererHalfTickedBoxPrototype}% +\def\markdownRendererAttributeClassName{% + \markdownRendererAttributeClassNamePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { halfTickedBox } + { attributeClassName } \prop_gput:Nnn \g_@@_renderer_arities_prop - { halfTickedBox } - { 0 } + { attributeClassName } + { 1 } \ExplSyntaxOff -\def\markdownRendererUntickedBox{% - \markdownRendererUntickedBoxPrototype}% +\def\markdownRendererAttributeKeyValue{% + \markdownRendererAttributeKeyValuePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { untickedBox } + { attributeKeyValue } \prop_gput:Nnn \g_@@_renderer_arities_prop - { untickedBox } - { 0 } + { attributeKeyValue } + { 2 } \ExplSyntaxOff % \end{macrocode} % \par @@ -9812,147 +10071,27 @@ following text: % % \begin{markdown} -#### Markdown Document Renderers -The \mdef{markdownRendererDocumentBegin} and \mdef{markdownRendererDocumentEnd} -macros represent the beginning and the end of a *markdown* document. The macros -receive no arguments. - -A \TeX{} document may contain any number of markdown documents. Additionally, -markdown documents may appear not only in a sequence, but several markdown -documents may also be *nested*. Redefinitions of the macros should take this -into account. +#### Block Quote Renderers +The \mdef{markdownRendererBlockQuoteBegin} macro represents the beginning of +a block quote. The macro receives no arguments. % \end{markdown} % % \iffalse - -##### \LaTeX{} Example {.unnumbered} - -Using a text editor, create a text document named `nested.md` with the -following content: -``` md -This is a *nested* markdown document. -``` - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\documentclass{article} -\usepackage[contentBlocks]{markdown} -\markdownSetup{ - renderers = { - contentBlock = {% - \markdownInput{#3}% - }, - documentBegin = {% - \par - \emph{(The beginning of a document)} - \par - \begingroup - \markdownSetup{snippet=first-nesting-level}% - }, - documentEnd = {% - \endgroup - \par - \emph{(The end of a document)} - \par - }, - }, -} -\markdownSetupSnippet{first-nesting-level}{ - renderers = { - documentBegin = { - \par - \emph{(The beginning of a nested document)} - \par - \begingroup - \markdownSetup{snippet=second-nesting-level-and-below} - }, - }, -} -\markdownSetupSnippet{second-nesting-level-and-below}{ - renderers = { - documentBegin = { - \par - \emph{(The beginning of a nested document)} - \par - \begingroup - }, - documentEnd = { - \endgroup - \par - \emph{(The end of a nested document)} - \par - }, - }, -} -\begin{document} -\begin{markdown} -Hello *world*! - -/nested.md - -_Foo_ bar! -\end{markdown} -\begin{markdown} - -Bar baz! - -\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: - -> *(The beginning of a document)* -> -> Hello *world*! -> -> *(The beginning of a nested document)* -> -> This is a *nested* markdown document. -> -> *(The end of a nested document)* -> -> _Foo_ bar! -> -> *(The end of a document)* -> -> *(The beginning of a document)* -> -> Bar baz! -> -> *(The end of a document)* - % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererDocumentBegin{% - \markdownRendererDocumentBeginPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { documentBegin } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { documentBegin } - { 0 } -\ExplSyntaxOff -\def\markdownRendererDocumentEnd{% - \markdownRendererDocumentEndPrototype}% +\def\markdownRendererBlockQuoteBegin{% + \markdownRendererBlockQuoteBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { documentEnd } + { blockQuoteBegin } \prop_gput:Nnn \g_@@_renderer_arities_prop - { documentEnd } + { blockQuoteBegin } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -9965,9 +10104,8 @@ following text: % % \begin{markdown} -#### Interblock Separator Renderer -The \mdef{markdownRendererInterblockSeparator} macro represents a separator -between two markdown block elements. The macro receives no arguments. +The \mdef{markdownRendererBlockQuoteEnd} macro represents the end of a block +quote. The macro receives no arguments. % \end{markdown} % @@ -9979,15 +10117,24 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown -\def\markdownRendererInterblockSeparator{% - \par - {\it(The end of a block)}% +\def\markdownRendererBlockQuoteBegin{% + \begingroup + \vskip\parindent + \leftskip=2\parindent + \parindent=0pt +} +\def\markdownRendererBlockQuoteEnd{% \par + \vskip\parindent + \endgroup } \markdownBegin -Hello *world*! +A quote from William Shakespeare's King Lear: -_Foo_ bar! +> This is the excellent foppery of the world that when we are +> sick in fortune---often the surfeit of our own behavior---we +> make guilty of our disasters the sun, the moon, and the +> stars [...] \markdownEnd \bye ``````` @@ -9998,11 +10145,12 @@ luatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> Hello *world*! +> A quote from William Shakespeare's King Lear: > -> *(The end of a block)* -> -> _Foo_ bar! +> > This is the excellent foppery of the world that when we are +> > sick in fortune—often the surfeit of our own behavior—we +> > make guilty of our disasters the sun, the moon, and the +> > stars [...] ##### \LaTeX{} Example {.unnumbered} @@ -10013,18 +10161,18 @@ following content: \usepackage{markdown} \markdownSetup{ renderers = { - interblockSeparator = {% - \par - \emph{(The end of a block)}% - \par - }, + blockQuoteBegin = {\begin{quote}}, + blockQuoteEnd = {\end{quote}}, }, } \begin{document} \begin{markdown} -Hello *world*! +A quote from William Shakespeare's King Lear: -_Foo_ bar! +> This is the excellent foppery of the world that when we are +> sick in fortune---often the surfeit of our own behavior---we +> make guilty of our disasters the sun, the moon, and the +> stars [...] \end{markdown} \end{document} ``````` @@ -10035,11 +10183,12 @@ lualatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> Hello *world*! +> A quote from William Shakespeare's King Lear: > -> *(The end of a block)* -> -> _Foo_ bar! +> > This is the excellent foppery of the world that when we are +> > sick in fortune—often the surfeit of our own behavior—we +> > make guilty of our disasters the sun, the moon, and the +> > stars [...] ##### \Hologo{ConTeXt} Example {.unnumbered} @@ -10047,16 +10196,16 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \usemodule[t][markdown] -\def\markdownRendererInterblockSeparator{% - \par - \emph{(The end of a block)}% - \par -} +\def\markdownRendererBlockQuoteBegin{\startquotation} +\def\markdownRendererBlockQuoteEnd{\stopquotation} \starttext \startmarkdown -Hello *world*! +A quote from William Shakespeare's King Lear: -_Foo_ bar! +> This is the excellent foppery of the world that when we are +> sick in fortune---often the surfeit of our own behavior---we +> make guilty of our disasters the sun, the moon, and the +> stars [...] \stopmarkdown \stoptext ``````` @@ -10067,26 +10216,27 @@ context document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> Hello *world*! +> A quote from William Shakespeare's King Lear: > -> *(The end of a block)* -> -> _Foo_ bar! +> > This is the excellent foppery of the world that when we are +> > sick in fortune—often the surfeit of our own behavior—we +> > make guilty of our disasters the sun, the moon, and the +> > stars [...] % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererInterblockSeparator{% - \markdownRendererInterblockSeparatorPrototype}% +\def\markdownRendererBlockQuoteEnd{% + \markdownRendererBlockQuoteEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { interblockSeparator } + { blockQuoteEnd } \prop_gput:Nnn \g_@@_renderer_arities_prop - { interblockSeparator } + { blockQuoteEnd } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -10099,140 +10249,74 @@ following text: % % \begin{markdown} -#### Line Break Renderer -The \mdef{markdownRendererLineBreak} macro represents a forced line break. -The macro receives no arguments. +#### Bracketed Spans Context Renderers +The following macros are only produced, when the \Opt{bracketedSpans} option is +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. % \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\markdownRendererLineBreak{% - \par - {\it(A forced linebreak)}% - \par -} -\markdownInput{example.md} -\bye -``````` -Using a text editor, create a text document named `example.md` with the -following content. Note the two spaces at the end of the first line, which -specify a hard linebreak. Due to the limitations of the \TeX{} input -processor, hard linebreaks would be ignored if we typed them directly into the -`document.tex` document. - -
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 forced linebreak)* -> -> _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} +\usepackage[bracketedSpans]{markdown} \markdownSetup{ renderers = { - lineBreak = {% - \par - \emph{(A forced linebreak)}% - \par - }, + fencedDivAttributeContextBegin = {(}, + fencedDivAttributeContextEnd = {)}, }, } \begin{document} -\markdownInput{example.md} -\end{document} -``````` -Using a text editor, create a text document named `example.md` with the -following content. Note the two spaces at the end of the first line, which -specify a hard linebreak. Due to the limitations of the \TeX{} input -processor, hard linebreaks would be ignored if we typed them directly into the -`document.tex` document. - -
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 forced linebreak)* -> -> _Foo_ bar! +\begin{markdown} -##### \Hologo{ConTeXt} Example {.unnumbered} +[foo [bar]{#identifier}]{key=value} [baz]{.class_name} -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\usemodule[t][markdown] -\def\markdownRendererLineBreak{% - \par - \emph{(A forced linebreak)}% - \par -} -\starttext -\markdownInput{example.md} -\stoptext +\end{markdown} +\end{document} ``````` -Using a text editor, create a text document named `example.md` with the -following content. Note the two spaces at the end of the first line, which -specify a hard linebreak. Due to the limitations of the \TeX{} input -processor, hard linebreaks would be ignored if we typed them directly into the -`document.tex` document. - -
Hello world!  
_Foo_ bar!
- Next, invoke LuaTeX from the terminal: ``` sh -luatex document.tex +lualatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: -> Hello *world*! -> -> *(A forced linebreak)* -> -> _Foo_ bar! +> (foo (bar)) (baz) % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererLineBreak{% - \markdownRendererLineBreakPrototype}% +\def\markdownRendererBracketedSpanAttributeContextBegin{% + \markdownRendererBracketedSpanAttributeContextBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { lineBreak } + { bracketedSpanAttributeContextBegin } \prop_gput:Nnn \g_@@_renderer_arities_prop - { lineBreak } + { bracketedSpanAttributeContextBegin } + { 0 } +\ExplSyntaxOff +\def\markdownRendererBracketedSpanAttributeContextEnd{% + \markdownRendererBracketedSpanAttributeContextEndPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { bracketedSpanAttributeContextEnd } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { bracketedSpanAttributeContextEnd } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -10245,105 +10329,28 @@ following text: % % \begin{markdown} -#### Ellipsis Renderer -The \mdef{markdownRendererEllipsis} macro replaces any occurance of ASCII -ellipses in the input text. This macro will only be produced, when the -\Opt{smartEllipses} option is enabled. The macro receives no arguments. +#### Bullet List Renderers +The \mdef{markdownRendererUlBegin} macro represents the beginning of a +bulleted list that contains an item with several paragraphs of text (the +list is not tight). 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\markdownOptionSmartEllipses{true} -\def\markdownRendererEllipsis{{\it SHAZAM}!} -\markdownBegin -The secret word is ... -\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: - -> The secret word is *SHAZAM*! - -##### \LaTeX{} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\documentclass{article} -\usepackage[smartEllipses]{markdown} -\markdownSetup{ - renderers = { - ellipsis = \emph{SHAZAM}!, - }, -} -\begin{document} -\begin{markdown} -The secret word is ... -\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: - -> The secret word is *SHAZAM*! - -##### \Hologo{ConTeXt} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\usemodule[t][markdown] -\setupmarkdown[smartEllipses = yes] -\def\markdownRendererEllipsis{\emph{SHAZAM}!} -\starttext -\startmarkdown -The secret word is ... -\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: - -> Hello *world*! -> -> *(The end of a block)* -> -> _Foo_ bar! - % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererEllipsis{% - \markdownRendererEllipsisPrototype}% +\def\markdownRendererUlBegin{% + \markdownRendererUlBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { ellipsis } + { ulBegin } \prop_gput:Nnn \g_@@_renderer_arities_prop - { ellipsis } + { ulBegin } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -10356,79 +10363,60 @@ following text: % % \begin{markdown} -#### Non-Breaking Space Renderer -The \mdef{markdownRendererNbsp} macro represents a non-breaking space. +The \mdef{markdownRendererUlBeginTight} macro represents the beginning 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 \Opt{tightLists} option +is disabled. The macro receives no arguments. % \end{markdown} % % \iffalse +% +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererUlBeginTight{% + \markdownRendererUlBeginTightPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { ulBeginTight } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { ulBeginTight } + { 0 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +% +%<*manual-tokens> +% \fi +% +% \begin{markdown} -##### \LaTeX{} Example {.unnumbered} - -Using a text editor, create a text document named `document.bib` with the -following content: -``` bib -@book{knuth:tex, - author = "Knuth, Donald Ervin", - title = "The \TeX book, volume A of Computers and typesetting", - publisher = "Addison-Wesley", - year = "1984" -} -``````` -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\documentclass{article} -\usepackage[ - citations, - citationNbsps, -]{markdown} -\markdownSetup{ - renderers = { - nbsp = {$\cdot$}, - }, -} -\begin{document} - -\begin{markdown} -The TeXbook [@knuth:tex, p. 123 and 130] is good. -\end{markdown} - -\bibliographystyle{plain} -\bibliography{document.bib} - -\end{document} -``````` -Next, invoke LuaTeX and BibTeX from the terminal: -``` sh -lualatex document.tex -bibtex document.aux -lualatex document.tex -lualatex document.tex -`````` -A PDF document named `document.pdf` should be produced and contain the -following text: - -> The TeXbook [1, p.·123·and·130] is good. -> -> ### References -> [1] Donald Ervin Knuth. _The TeXbook, volume A of Computers and typesetting._ -> Addison-Wesley, 1984. +The \mdef{markdownRendererUlItem} macro represents an item in a bulleted +list. The macro receives no arguments. +% \end{markdown} +% +% \iffalse % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererNbsp{% - \markdownRendererNbspPrototype}% +\def\markdownRendererUlItem{% + \markdownRendererUlItemPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { nbsp } + { ulItem } \prop_gput:Nnn \g_@@_renderer_arities_prop - { nbsp } + { ulItem } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -10441,27 +10429,75 @@ following text: % % \begin{markdown} -#### Special Character Renderers -The following macros replace any special plain \TeX{} characters, including +The \mdef{markdownRendererUlItemEnd} macro represents the end of an item in a +bulleted list. The macro receives no arguments. + +% \end{markdown} +% % \iffalse -the active pipe character (`|`) of \Hologo{ConTeXt}, in the input text: +% +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererUlItemEnd{% + \markdownRendererUlItemEndPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { ulItemEnd } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { ulItemEnd } + { 0 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +% +%<*manual-tokens> +% \fi +% +% \begin{markdown} -- \mdef{markdownRendererAmpersand} replaces the ampersand (`&`). -- \mdef{markdownRendererBackslash} replaces the backslash (`\`). -- \mdef{markdownRendererCircumflex} replaces the circumflex (`^`). -- \mdef{markdownRendererDollarSign} replaces the dollar sign (`$`). -- \mdef{markdownRendererHash} replaces the hash sign (`#`). -- \mdef{markdownRendererLeftBrace} replaces the left brace (`{`). -- \mdef{markdownRendererPercentSign} replaces the percent sign (`%`). -- \mdef{markdownRendererPipe} replaces the pipe character (`|`). -- \mdef{markdownRendererRightBrace} replaces the right brace (`}`). -- \mdef{markdownRendererTilde} replaces the tilde (`~`). -- \mdef{markdownRendererUnderscore} replaces the underscore (`_`). +The \mdef{markdownRendererUlEnd} macro represents the end of a bulleted list +that contains an item with several paragraphs of text (the list is not +tight). The macro receives no arguments. +% \end{markdown} +% +% \iffalse +% +%<*tex> % \fi -% the active pipe character (`|`) of \Hologo{ConTeXt}, in the input text. -% These macros will only be produced, when the \Opt{hybrid} option is -% `false`. +% +% \begin{macrocode} +\def\markdownRendererUlEnd{% + \markdownRendererUlEndPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { ulEnd } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { ulEnd } + { 0 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +% +%<*manual-tokens> +% \fi +% +% \begin{markdown} + +The \mdef{markdownRendererUlEndTight} macro represents the end 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 \Opt{tightLists} option is +disabled. The macro receives no arguments. % \end{markdown} % @@ -10470,14 +10506,49 @@ the active pipe character (`|`) of \Hologo{ConTeXt}, in the input text: ##### Plain \TeX{} Example {.unnumbered} Using a text editor, create a text document named `document.tex` with the -following content. We will make the tilde behave as if it were written in -\TeX{}, where it represents a non-breaking space. +following content: ``` tex \input markdown -\def\markdownRendererTilde{~} +\def\markdownOptionTightLists{true} + +\def\markdownRendererInterblockSeparator{} +\def\markdownRendererUlBeginTight{ (} +\def\markdownRendererUlItem{% + \def\markdownRendererUlItem{% + , + \def\markdownRendererUlItem{, and }% + }% +} +\def\markdownRendererUlItemEnd{} +\def\markdownRendererUlEndTight{).} + \markdownBegin -Bartel~Leendert van~der~Waerden +This is a tight list + +- the first item +- the second item +- the third item +\markdownEnd + +\def\markdownRendererInterblockSeparator{% + :\par + \def\markdownRendererInterblockSeparator{\par}% +} +\def\markdownRendererUlBegin{} +\def\markdownRendererUlItem{--\kern 0.5em} +\def\markdownRendererUlItemEnd{.\par} +\def\markdownRendererUlEnd{} + +\markdownBegin +This is a loose list + +- This is the first item + +- This is the second item + +- This is the third item \markdownEnd + \bye ``````` Next, invoke LuaTeX from the terminal: @@ -10485,27 +10556,69 @@ Next, invoke LuaTeX from the terminal: 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: +following text: -> Bartel·Leendert van·der·Waerden +> This is a tight list (the first item, the second item, and the third item). +> +> This is a loose list: +> +> - This is the first item. +> +> - This is the second item. +> +> - This is the third item. ##### \LaTeX{} Example {.unnumbered} Using a text editor, create a text document named `document.tex` with the -following content. We will make the tilde behave as if it were written in -\TeX{}, where it represents a non-breaking space. +following content: ``` tex \documentclass{article} -\usepackage{markdown} -\markdownSetup{ +\usepackage[tightLists]{markdown} +\begin{document} + +\begin{markdown*}{ renderers = { - tilde = ~, - }, + interblockSeparator = {}, + ulBeginTight = { (}, + ulItem = {% + \def\markdownRendererUlItem{% + , + \def\markdownRendererUlItem{, and }% + }% + }, + ulItemEnd = {}, + ulEndTight = {).}, + }, } -\begin{document} -\begin{markdown} -Bartel~Leendert van~der~Waerden -\end{markdown} +This is a tight list + +- the first item +- the second item +- the third item +\end{markdown*} + +\begin{markdown*}{ + renderers = { + interblockSeparator = {% + :\par + \def\markdownRendererInterblockSeparator{\par}% + }, + ulBeginTight = {\begin{itemize}}, + ulItem = {\item}, + ulItemEnd = {.}, + ulEnd = {\end{itemize}}, + }, +} +This is a loose list + +- This is the first item + +- This is the second item + +- This is the third item +\end{markdown*} + \end{document} ``````` Next, invoke LuaTeX from the terminal: @@ -10513,22 +10626,65 @@ Next, invoke LuaTeX from the terminal: 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 - -##### \Hologo{ConTeXt} Example {.unnumbered} +following text: + +> This is a tight list (the first item, the second item, and the third item). +> +> This is a loose list: +> +> - This is the first item. +> +> - This is the second item. +> +> - This is the third item. + +##### \Hologo{ConTeXt} Example {.unnumbered} Using a text editor, create a text document named `document.tex` with the -following content. We will make the tilde behave as if it were written in -\TeX{}, where it represents a non-breaking space. +following content: ``` tex \usemodule[t][markdown] -\def\markdownRendererTilde{~} +\setupmarkdown[tightLists = yes] \starttext + +\def\markdownRendererInterblockSeparator{} +\def\markdownRendererUlBeginTight{ (} +\def\markdownRendererUlItem{% + \def\markdownRendererUlItem{% + , + \def\markdownRendererUlItem{, and }% + }% +} +\def\markdownRendererUlItemEnd{} +\def\markdownRendererUlEndTight{).} + \startmarkdown -Bartel~Leendert van~der~Waerden +This is a tight list + +- the first item +- the second item +- the third item +\stopmarkdown + +\def\markdownRendererInterblockSeparator{% + :\par + \def\markdownRendererInterblockSeparator{\par}% +} +\def\markdownRendererUlBegin{\startitemize} +\def\markdownRendererUlItem{\item} +\def\markdownRendererUlItemEnd{.} +\def\markdownRendererUlEnd{\stopitemize} + +\startmarkdown +This is a loose list + +- This is the first item + +- This is the second item + +- This is the third item \stopmarkdown + \stoptext ``````` Next, invoke LuaTeX from the terminal: @@ -10536,135 +10692,67 @@ Next, invoke LuaTeX from the terminal: context document.tex `````` A PDF document named `document.pdf` should be produced and contain the -following text, where the middot (`·`) denotes a non-breaking space: +following text: -> Bartel·Leendert van·der·Waerden +> This is a tight list (the first item, the second item, and the third item). +> +> This is a loose list: +> +> - This is the first item. +> +> - This is the second item. +> +> - This is the third item. % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererLeftBrace{% - \markdownRendererLeftBracePrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { leftBrace } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { leftBrace } - { 0 } -\ExplSyntaxOff -\def\markdownRendererRightBrace{% - \markdownRendererRightBracePrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { rightBrace } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { rightBrace } - { 0 } -\ExplSyntaxOff -\def\markdownRendererDollarSign{% - \markdownRendererDollarSignPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { dollarSign } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { dollarSign } - { 0 } -\ExplSyntaxOff -\def\markdownRendererPercentSign{% - \markdownRendererPercentSignPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { percentSign } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { percentSign } - { 0 } -\ExplSyntaxOff -\def\markdownRendererAmpersand{% - \markdownRendererAmpersandPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { ampersand } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { ampersand } - { 0 } -\ExplSyntaxOff -\def\markdownRendererUnderscore{% - \markdownRendererUnderscorePrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { underscore } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { underscore } - { 0 } -\ExplSyntaxOff -\def\markdownRendererHash{% - \markdownRendererHashPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { hash } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { hash } - { 0 } -\ExplSyntaxOff -\def\markdownRendererCircumflex{% - \markdownRendererCircumflexPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { circumflex } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { circumflex } - { 0 } -\ExplSyntaxOff -\def\markdownRendererBackslash{% - \markdownRendererBackslashPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { backslash } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { backslash } - { 0 } -\ExplSyntaxOff -\def\markdownRendererTilde{% - \markdownRendererTildePrototype}% +\def\markdownRendererUlEndTight{% + \markdownRendererUlEndTightPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { tilde } + { ulEndTight } \prop_gput:Nnn \g_@@_renderer_arities_prop - { tilde } + { ulEndTight } { 0 } \ExplSyntaxOff -\def\markdownRendererPipe{% - \markdownRendererPipePrototype}% +% \end{macrocode} +% \par +% +% \iffalse +% +%<*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 +filename of a file contaning the code block contents. + +% \end{markdown} +% +% \iffalse +% +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererInputVerbatim{% + \markdownRendererInputVerbatimPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { pipe } + { inputVerbatim } \prop_gput:Nnn \g_@@_renderer_arities_prop - { pipe } - { 0 } + { inputVerbatim } + { 1 } \ExplSyntaxOff % \end{macrocode} % \par @@ -10676,75 +10764,65 @@ following text, where the middot (`·`) denotes a non-breaking space: % % \begin{markdown} -#### Code Span Renderer -The \mdef{markdownRendererCodeSpan} macro represents inline code span in the -input text. It receives a single argument that corresponds to the inline -code span. +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. % \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 -\input lmfonts - -\def\markdownRendererCodeSpan#1{#1} - -\markdownBegin -`$\sqrt{-1}$ *equals* $i$` - -$\sqrt{-1}$ *equals* $i$ -\markdownEnd - -\def\markdownOptionHybrid{true} -\markdownBegin -$\sqrt{-1}$ *equals* $i$ -\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: - -> \$\\sqrt{-1}\$ \*equals\* \$i\$. -> -> \$\\sqrt{-1}\$ *equals* \$i\$. -> -> √-̅1̅ *equals* $i$. - ##### \LaTeX{} Example {.unnumbered} Using a text editor, create a text document named `document.tex` with the following content: ``` tex \documentclass{article} -\usepackage[smartEllipses]{markdown} +\usepackage{verbatim} +\usepackage[hyphens]{url} +\usepackage[fencedCode]{markdown} \markdownSetup{ renderers = { - codeSpan = {#1}, + interblockSeparator = { + \def\markdownRendererInterblockSeparator{% + \par + \def\markdownRendererInterblockSeparator{% + \def\markdownRendererInterblockSeparator{% + \par + }% + }% + }% + }, + inputVerbatim = { + is contained in file \url{#1}:% + \verbatiminput{#1}% + }, + inputFencedCode = { + in #2 \markdownRendererInputVerbatim{#1}% + }, }, } \begin{document} - \begin{markdown} -`$\sqrt{-1}$ *equals* $i$` +The following code -$\sqrt{-1}$ *equals* $i$ -\end{markdown} + def foo(bar): + if len(bar) <= 1: + return bar[0] + elif len(bar) == 2: + return sorted(bar) + else: + baz = len(bar) // 2 + return foo(bar[baz:], bar[:baz]) -\begin{markdown*}{hybrid} -$\sqrt{-1}$ *equals* $i$ -\end{markdown*} +The following code +~~~ Python +>>> foo([4, 2, 1, 3]) +[1, 2, 3, 4] +~~~~~~~~~~ +\end{markdown} \end{document} ``````` Next, invoke LuaTeX from the terminal: @@ -10752,64 +10830,45 @@ Next, invoke LuaTeX from the terminal: lualatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the -following text: - -> \$\\sqrt{-1}\$ \*equals\* \$i\$. -> -> \$\\sqrt{-1}\$ *equals* \$i\$. -> -> √-̅1̅ *equals* $i$. - -##### \Hologo{ConTeXt} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\usemodule[t][markdown] -\def\markdownRendererCodeSpan#1{#1} -\starttext - -\startmarkdown -`$\sqrt{-1}$ *equals* $i$` - -$\sqrt{-1}$ *equals* $i$ -\stopmarkdown - -\setupmarkdown[hybrid = yes] -\startmarkdown -$\sqrt{-1}$ *equals* $i$ -\stopmarkdown - -\bye -``````` -Next, invoke LuaTeX from the terminal: -``` sh -context document.tex -`````` -A PDF document named `document.pdf` should be produced and contain the -following text: +following text except for the filename, which may differ: -> \$\\sqrt{-1}\$ \*equals\* \$i\$. -> -> \$\\sqrt{-1}\$ *equals* \$i\$. -> -> √-̅1̅ *equals* $i$. +> The following code is contained in file +> `./_markdown_document/882453149edcf288976647f6fe147ada.verbatim`: +> ``` py +> def foo(bar): +> if len(bar) <= 1: +> return bar[:1] +> elif len(bar) == 2: +> return sorted(bar) +> else: +> baz = bar[len(bar) // 2] +> return ( +> foo([qux for qux in bar if qux < baz]) + [baz] + +> foo([qux for qux in bar if qux > baz]) +> ) +> `````` +> The following code in Python contained in file +> `./_markdown_document/cf2a96e2120cef5b1fae5fea36fcc27b.verbatim`: +> ``` py +> >>> foo([4, 2, 1, 3]) +> [1, 2, 3, 4] +> `````` % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererCodeSpan{% - \markdownRendererCodeSpanPrototype}% +\def\markdownRendererInputFencedCode{% + \markdownRendererInputFencedCodePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { codeSpan } + { inputFencedCode } \prop_gput:Nnn \g_@@_renderer_arities_prop - { codeSpan } - { 1 } + { inputFencedCode } + { 2 } \ExplSyntaxOff % \end{macrocode} % \par @@ -10818,14 +10877,12 @@ following text: % %<*manual-tokens> % \fi -% % \begin{markdown} -#### Link Renderer -The \mdef{markdownRendererLink} macro represents a hyperlink. It receives -four arguments: the label, the fully escaped \acro{uri} that can be directly -typeset, the raw \acro{uri} that can be used outside typesetting, and the -title of the link. +#### Code Span Renderer +The \mdef{markdownRendererCodeSpan} macro represents inline code span in the +input text. It receives a single argument that corresponds to the inline +code span. % \end{markdown} % @@ -10837,15 +10894,21 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown -\def\markdownRendererLink#1#2#3#4{% - #1 {\tt#2} titled {\it#4}% -} +\input lmfonts + +\def\markdownRendererCodeSpan#1{#1} + \markdownBegin -Please visit [the link][ctan]. +`$\sqrt{-1}$ *equals* $i$` - [ctan]: https://ctan.org/ - (the Comprehensive TeX Archive Network) +$\sqrt{-1}$ *equals* $i$ +\markdownEnd + +\def\markdownOptionHybrid{true} +\markdownBegin +$\sqrt{-1}$ *equals* $i$ \markdownEnd + \bye ``````` Next, invoke LuaTeX from the terminal: @@ -10855,8 +10918,11 @@ luatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> Please visit the link titled *the Comprehensive TeX -> Archive Network*. +> \$\\sqrt{-1}\$ \*equals\* \$i\$. +> +> \$\\sqrt{-1}\$ *equals* \$i\$. +> +> √-̅1̅ *equals* $i$. ##### \LaTeX{} Example {.unnumbered} @@ -10864,21 +10930,24 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \documentclass{article} -\usepackage{markdown} +\usepackage[smartEllipses]{markdown} \markdownSetup{ renderers = { - link = {% - #1 \texttt{#2} titled \emph{#4}% - }, + codeSpan = {#1}, }, } \begin{document} + \begin{markdown} -Please visit [the link][ctan]. +`$\sqrt{-1}$ *equals* $i$` - [ctan]: https://ctan.org/ - (the Comprehensive TeX Archive Network) +$\sqrt{-1}$ *equals* $i$ \end{markdown} + +\begin{markdown*}{hybrid} +$\sqrt{-1}$ *equals* $i$ +\end{markdown*} + \end{document} ``````` Next, invoke LuaTeX from the terminal: @@ -10888,8 +10957,11 @@ lualatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> Please visit the link titled *the Comprehensive TeX -> Archive Network*. +> \$\\sqrt{-1}\$ \*equals\* \$i\$. +> +> \$\\sqrt{-1}\$ *equals* \$i\$. +> +> √-̅1̅ *equals* $i$. ##### \Hologo{ConTeXt} Example {.unnumbered} @@ -10897,17 +10969,21 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \usemodule[t][markdown] -\def\markdownRendererLink#1#2#3#4{% - #1 {\tt#2} titled \emph{#4}% -} +\def\markdownRendererCodeSpan#1{#1} \starttext + \startmarkdown -Please visit [the link][ctan]. +`$\sqrt{-1}$ *equals* $i$` - [ctan]: https://ctan.org/ - (the Comprehensive TeX Archive Network) +$\sqrt{-1}$ *equals* $i$ \stopmarkdown -\stoptext + +\setupmarkdown[hybrid = yes] +\startmarkdown +$\sqrt{-1}$ *equals* $i$ +\stopmarkdown + +\bye ``````` Next, invoke LuaTeX from the terminal: ``` sh @@ -10916,24 +10992,27 @@ context document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> Please visit the link titled *the Comprehensive TeX -> Archive Network*. +> \$\\sqrt{-1}\$ \*equals\* \$i\$. +> +> \$\\sqrt{-1}\$ *equals* \$i\$. +> +> √-̅1̅ *equals* $i$. % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererLink{% - \markdownRendererLinkPrototype}% +\def\markdownRendererCodeSpan{% + \markdownRendererCodeSpanPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { link } + { codeSpan } \prop_gput:Nnn \g_@@_renderer_arities_prop - { link } - { 4 } + { codeSpan } + { 1 } \ExplSyntaxOff % \end{macrocode} % \par @@ -10945,136 +11024,46 @@ following text: % % \begin{markdown} -#### Image Renderer -The \mdef{markdownRendererImage} macro represents an image. It receives -four arguments: the label, the fully escaped \acro{uri} that can be directly -typeset, the raw \acro{uri} that can be used outside typesetting, and the -title of the link. +#### Content Block Renderers {#texcontentblockrenderers} + +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, +and the title of the content block. % \end{markdown} % % \iffalse +% +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererContentBlock{% + \markdownRendererContentBlockPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { contentBlock } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { contentBlock } + { 4 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +% +%<*manual-tokens> +% \fi +% +% \begin{markdown} -##### \LaTeX{} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\documentclass{article} -\usepackage{markdown} -\begingroup -\catcode`\@=11 -\catcode`\%=12 -\catcode`\^^A=14 -\global\def\markdownRendererImage#1#2#3#4{^^A - \immediate\write18{^^A -``` -``` sh - if printf '%s' "#3" | grep -q ^http; then - OUTPUT="$(printf '%s' "#3" | md5sum | cut -d' ' -f1).^^A - $(printf '%s' "#3" | sed 's/.*[.]//')"; - if ! [ -e "$OUTPUT" ]; then - wget -O "$OUTPUT" '#3' || rm "$OUTPUT"; - convert "$OUTPUT" png:"$OUTPUT"; - fi; - printf '%s%%' "$OUTPUT" > \jobname.fetched; - else - printf '%s%%' "#3" > \jobname.fetched; - fi^^A -``` -``` tex - }^^A - {^^A - \everyeof={\noexpand}^^A - \edef\filename{\@@input"\jobname.fetched" }^^A - \includegraphics[width=\textwidth]{\filename}^^A - }^^A -} -\endgroup -\begin{document} -\begin{markdown} -![TUGboat](https://tug.org/tugboat/noword.jpg) -\end{markdown} -\end{document} -`````` -Next, invoke LuaTeX from the terminal: -``` sh -lualatex --shell-escape document.tex -`````` -A PDF document named `document.pdf` 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 of the current user. It also -assumes that the `md5sum`, `wget`, and `convert` binaries are installed and -that the \TeX{} engine has shell access. - -> ![TUGboat](https://tug.org/tugboat/noword.jpg "The Communications of the TeX Users Group") - -% -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererImage{% - \markdownRendererImagePrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { image } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { image } - { 4 } -\ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -% -%<*manual-tokens> -% \fi -% -% \begin{markdown} - -#### Content Block Renderers {#texcontentblockrenderers} - -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, -and the title of the content block. - -% \end{markdown} -% -% \iffalse -% -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererContentBlock{% - \markdownRendererContentBlockPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { contentBlock } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { contentBlock } - { 4 } -\ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -% -%<*manual-tokens> -% \fi -% -% \begin{markdown} - -The \mdef{markdownRendererContentBlockOnlineImage} macro represents an -iA\,Writer online image content block. The macro receives the same arguments -as \mref{markdownRendererContentBlock}. +The \mdef{markdownRendererContentBlockOnlineImage} macro represents an +iA\,Writer online image content block. The macro receives the same arguments +as \mref{markdownRendererContentBlock}. % \end{markdown} % @@ -11300,9 +11289,12 @@ following text: % % \begin{markdown} -#### Bullet List Renderers -The \mdef{markdownRendererUlBegin} macro represents the beginning of a -bulleted list that contains an item with several paragraphs of text (the +#### Definition List Renderers +The following macros are only produced, when the \Opt{definitionLists} option +is enabled. + +The \mdef{markdownRendererDlBegin} macro represents the beginning of a +definition list that contains an item with several paragraphs of text (the list is not tight). The macro receives no arguments. % \end{markdown} @@ -11313,15 +11305,15 @@ list is not tight). The macro receives no arguments. % \fi % % \begin{macrocode} -\def\markdownRendererUlBegin{% - \markdownRendererUlBeginPrototype}% +\def\markdownRendererDlBegin{% + \markdownRendererDlBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { ulBegin } + { dlBegin } \prop_gput:Nnn \g_@@_renderer_arities_prop - { ulBegin } + { dlBegin } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -11334,10 +11326,10 @@ list is not tight). The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererUlBeginTight} macro represents the beginning 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 \Opt{tightLists} option -is disabled. The macro receives no arguments. +The \mdef{markdownRendererDlBeginTight} macro represents the beginning of a +definition list that contains an item with several paragraphs of text (the +list is not tight). This macro will only be produced, when the +\Opt{tightLists} option is disabled. The macro receives no arguments. % \end{markdown} % @@ -11347,15 +11339,15 @@ is disabled. The macro receives no arguments. % \fi % % \begin{macrocode} -\def\markdownRendererUlBeginTight{% - \markdownRendererUlBeginTightPrototype}% +\def\markdownRendererDlBeginTight{% + \markdownRendererDlBeginTightPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { ulBeginTight } + { dlBeginTight } \prop_gput:Nnn \g_@@_renderer_arities_prop - { ulBeginTight } + { dlBeginTight } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -11368,8 +11360,9 @@ is disabled. The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererUlItem} macro represents an item in a bulleted -list. The macro receives no arguments. +The \mdef{markdownRendererDlItem} macro represents a term in a definition +list. The macro receives a single argument that corresponds to the term +being defined. % \end{markdown} % @@ -11379,15 +11372,47 @@ list. The macro receives no arguments. % \fi % % \begin{macrocode} -\def\markdownRendererUlItem{% - \markdownRendererUlItemPrototype}% +\def\markdownRendererDlItem{% + \markdownRendererDlItemPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { ulItem } + { dlItem } \prop_gput:Nnn \g_@@_renderer_arities_prop - { ulItem } + { dlItem } + { 1 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +% +%<*manual-tokens> +% \fi +% +% \begin{markdown} + +The \mdef{markdownRendererDlItemEnd} macro represents the end of a list of +definitions for a single term. + +% \end{markdown} +% +% \iffalse +% +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererDlItemEnd{% + \markdownRendererDlItemEndPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { dlItemEnd } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { dlItemEnd } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -11400,8 +11425,9 @@ list. The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererUlItemEnd} macro represents the end of an item in a -bulleted list. The macro receives no arguments. +The \mdef{markdownRendererDlDefinitionBegin} macro represents the beginning +of a definition in a definition list. There can be several definitions for +a single term. % \end{markdown} % @@ -11411,15 +11437,15 @@ bulleted list. The macro receives no arguments. % \fi % % \begin{macrocode} -\def\markdownRendererUlItemEnd{% - \markdownRendererUlItemEndPrototype}% +\def\markdownRendererDlDefinitionBegin{% + \markdownRendererDlDefinitionBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { ulItemEnd } + { dlDefinitionBegin } \prop_gput:Nnn \g_@@_renderer_arities_prop - { ulItemEnd } + { dlDefinitionBegin } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -11432,8 +11458,41 @@ bulleted list. The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererUlEnd} macro represents the end of a bulleted list -that contains an item with several paragraphs of text (the list is not +The \mdef{markdownRendererDlDefinitionEnd} macro represents the end of a +definition in a definition list. There can be several definitions for a +single term. + +% \end{markdown} +% +% \iffalse +% +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererDlDefinitionEnd{% + \markdownRendererDlDefinitionEndPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { dlDefinitionEnd } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { dlDefinitionEnd } + { 0 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +% +%<*manual-tokens> +% \fi +% +% \begin{markdown} + +The \mdef{markdownRendererDlEnd} macro represents the end of a definition +list that contains an item with several paragraphs of text (the list is not tight). The macro receives no arguments. % \end{markdown} @@ -11444,15 +11503,15 @@ tight). The macro receives no arguments. % \fi % % \begin{macrocode} -\def\markdownRendererUlEnd{% - \markdownRendererUlEndPrototype}% +\def\markdownRendererDlEnd{% + \markdownRendererDlEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { ulEnd } + { dlEnd } \prop_gput:Nnn \g_@@_renderer_arities_prop - { ulEnd } + { dlEnd } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -11465,10 +11524,10 @@ tight). The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererUlEndTight} macro represents the end 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 \Opt{tightLists} option is -disabled. The macro receives no arguments. +The \mdef{markdownRendererDlEndTight} macro represents the end 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 \Opt{tightLists} +option is disabled. The macro receives no arguments. % \end{markdown} % @@ -11480,44 +11539,80 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown +\def\markdownOptionDefinitionLists{true} \def\markdownOptionTightLists{true} -\def\markdownRendererInterblockSeparator{} -\def\markdownRendererUlBeginTight{ (} -\def\markdownRendererUlItem{% - \def\markdownRendererUlItem{% +\def\markdownRendererInterblockSeparator{% + :% + \def\markdownRendererInterblockSeparator{\par}% +} +\def\markdownRendererDlBeginTight{% + \begingroup + \parindent=0pt +} +\def\markdownRendererDlItem#1{% + \par{\bf#1}% + \def\markdownRendererDlDefinitionEnd{% , - \def\markdownRendererUlItem{, and }% + \def\markdownRendererDlDefinitionEnd{% + , and + \def\markdownRendererDlDefinitionEnd{.}% + }% }% } -\def\markdownRendererUlItemEnd{} -\def\markdownRendererUlEndTight{).} +\def\markdownRendererDlItemEnd{} +\def\markdownRendererDlDefinitionBegin{\par--\kern 0.5em} +\def\markdownRendererDlEndTight{\endgroup} \markdownBegin -This is a tight list +This is a tight definition list -- the first item -- the second item -- the third item +Coffee +: black hot drink +: prepared from roasted coffee beans +: one of the most traded agricultural commodities in the world + +Milk +: white cold drink +: nutrient-rich +: produced on an industrial scale \markdownEnd \def\markdownRendererInterblockSeparator{% - :\par \def\markdownRendererInterblockSeparator{\par}% } -\def\markdownRendererUlBegin{} -\def\markdownRendererUlItem{--\kern 0.5em} -\def\markdownRendererUlItemEnd{.\par} -\def\markdownRendererUlEnd{} +\def\markdownRendererDlBegin{} +\def\markdownRendererDlItem#1{% + . #1 is a + \def\markdownRendererDlDefinitionBegin{% + \def\markdownRendererDlDefinitionBegin{% + , + \def\markdownRendererDlDefinitionBegin{, and }% + }% + }% +} +\def\markdownRendererDlItemEnd{} +\def\markdownRendererDlDefinitionEnd{} +\def\markdownRendererDlEnd{.} \markdownBegin -This is a loose list +This is a loose definition list -- This is the first item +Coffee -- This is the second item +: black hot drink -- This is the third item +: prepared from roasted coffee beans + +: one of the most traded agricultural commodities in the world + +Milk + +: white cold drink + +: nutrient-rich + +: produced on an industrial scale \markdownEnd \bye @@ -11529,15 +11624,24 @@ luatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> This is a tight list (the first item, the second item, and the third item). +> This is a tight definition list: > -> This is a loose list: -> -> - This is the first item. -> -> - This is the second item. -> -> - This is the third item. +> **Coffee** +> +> - black hot drink, +> - prepared from roasted coffee beans, and +> - one of the most traded agricultural commodities in the world. +> +> **Milk** +> +> - white cold drink, +> - nutrient-rich, and +> - produced on an industrial scale. +> +> This is a loose definition list. Coffee is a black hot drink, 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. ##### \LaTeX{} Example {.unnumbered} @@ -11545,49 +11649,82 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \documentclass{article} -\usepackage[tightLists]{markdown} +\usepackage[definitionLists, tightLists]{markdown} \begin{document} \begin{markdown*}{ renderers = { - interblockSeparator = {}, - ulBeginTight = { (}, - ulItem = {% - \def\markdownRendererUlItem{% + interblockSeparator = {% + :% + \def\markdownRendererInterblockSeparator{\par}% + }, + dlBeginTight = {\begin{description}}, + dlItem = {% + \item[#1] + \begin{itemize} + \def\markdownRendererDlDefinitionEnd{% , - \def\markdownRendererUlItem{, and }% + \def\markdownRendererDlDefinitionEnd{% + , and + \def\markdownRendererDlDefinitionEnd{.}% + }% }% }, - ulItemEnd = {}, - ulEndTight = {).}, - }, + dlItemEnd = {\end{itemize}}, + dlDefinitionBegin = \item, + dlEndTight = {\end{description}}, + }, } -This is a tight list +This is a tight definition list -- the first item -- the second item -- the third item +Coffee +: black hot drink +: prepared from roasted coffee beans +: one of the most traded agricultural commodities in the world + +Milk +: white cold drink +: nutrient-rich +: produced on an industrial scale \end{markdown*} \begin{markdown*}{ renderers = { interblockSeparator = {% - :\par \def\markdownRendererInterblockSeparator{\par}% }, - ulBeginTight = {\begin{itemize}}, - ulItem = {\item}, - ulItemEnd = {.}, - ulEnd = {\end{itemize}}, - }, + dlBegin = {}, + dlItem = {% + . #1 is a + \def\markdownRendererDlDefinitionBegin{% + \def\markdownRendererDlDefinitionBegin{% + , + \def\markdownRendererDlDefinitionBegin{, and }% + }% + }% + }, + dlItemEnd = {}, + dlDefinitionEnd = {}, + dlEnd = {.}, + }, } -This is a loose list +This is a loose definition list -- This is the first item +Coffee -- This is the second item +: black hot drink -- This is the third item +: prepared from roasted coffee beans + +: one of the most traded agricultural commodities in the world + +Milk + +: white cold drink + +: nutrient-rich + +: produced on an industrial scale \end{markdown*} \end{document} @@ -11599,15 +11736,24 @@ lualatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> This is a tight list (the first item, the second item, and the third item). +> This is a tight definition list: > -> This is a loose list: -> -> - This is the first item. -> -> - This is the second item. -> -> - This is the third item. +> **Coffee** +> +> - black hot drink, +> - prepared from roasted coffee beans, and +> - one of the most traded agricultural commodities in the world. +> +> **Milk** +> +> - white cold drink, +> - nutrient-rich, and +> - produced on an industrial scale. +> +> This is a loose definition list. Coffee is a black hot drink, 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. ##### \Hologo{ConTeXt} Example {.unnumbered} @@ -11615,45 +11761,82 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \usemodule[t][markdown] -\setupmarkdown[tightLists = yes] +\setupmarkdown + [ + definitionLists = yes, + tightLists = yes, + ] \starttext -\def\markdownRendererInterblockSeparator{} -\def\markdownRendererUlBeginTight{ (} -\def\markdownRendererUlItem{% - \def\markdownRendererUlItem{% +\def\markdownRendererInterblockSeparator{% + :% + \def\markdownRendererInterblockSeparator{\par}% +} +\def\markdownRendererDlBeginTight{} +\def\markdownRendererDlItem#1{% + \par{\bf#1}% + \startitemize + \def\markdownRendererDlDefinitionEnd{% , - \def\markdownRendererUlItem{, and }% + \def\markdownRendererDlDefinitionEnd{% + , and + \def\markdownRendererDlDefinitionEnd{.}% + }% }% } -\def\markdownRendererUlItemEnd{} -\def\markdownRendererUlEndTight{).} +\def\markdownRendererDlItemEnd{\stopitemize} +\def\markdownRendererDlDefinitionBegin{\item} +\def\markdownRendererDlEndTight{} \startmarkdown -This is a tight list +This is a tight definition list -- the first item -- the second item -- the third item +Coffee +: black hot drink +: prepared from roasted coffee beans +: one of the most traded agricultural commodities in the world + +Milk +: white cold drink +: nutrient-rich +: produced on an industrial scale \stopmarkdown \def\markdownRendererInterblockSeparator{% - :\par \def\markdownRendererInterblockSeparator{\par}% } -\def\markdownRendererUlBegin{\startitemize} -\def\markdownRendererUlItem{\item} -\def\markdownRendererUlItemEnd{.} -\def\markdownRendererUlEnd{\stopitemize} - -\startmarkdown -This is a loose list - -- This is the first item +\def\markdownRendererDlBegin{} +\def\markdownRendererDlItem#1{% + . #1 is a + \def\markdownRendererDlDefinitionBegin{% + \def\markdownRendererDlDefinitionBegin{% + , + \def\markdownRendererDlDefinitionBegin{, and }% + }% + }% +} +\def\markdownRendererDlItemEnd{} +\def\markdownRendererDlDefinitionEnd{} +\def\markdownRendererDlEnd{.} -- This is the second item +\startmarkdown +This is a loose definition list -- This is the third item +Coffee + +: black hot drink + +: prepared from roasted coffee beans + +: one of the most traded agricultural commodities in the world + +Milk + +: white cold drink + +: nutrient-rich + +: produced on an industrial scale \stopmarkdown \stoptext @@ -11665,30 +11848,39 @@ context document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> This is a tight list (the first item, the second item, and the third item). +> This is a tight definition list: > -> This is a loose list: -> -> - This is the first item. -> -> - This is the second item. -> -> - This is the third item. +> **Coffee** +> +> - black hot drink, +> - prepared from roasted coffee beans, and +> - one of the most traded agricultural commodities in the world. +> +> **Milk** +> +> - white cold drink, +> - nutrient-rich, and +> - produced on an industrial scale. +> +> This is a loose definition list. Coffee is a black hot drink, 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. % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererUlEndTight{% - \markdownRendererUlEndTightPrototype}% +\def\markdownRendererDlEndTight{% + \markdownRendererDlEndTightPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { ulEndTight } + { dlEndTight } \prop_gput:Nnn \g_@@_renderer_arities_prop - { ulEndTight } + { dlEndTight } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -11701,29 +11893,105 @@ following text: % % \begin{markdown} -#### Ordered List Renderers -The \mdef{markdownRendererOlBegin} macro represents the beginning of an -ordered list that contains an item with several paragraphs of text (the -list is not tight). This macro will only be produced, when the \Opt{fancyLists} -option is disabled. The macro receives no arguments. +#### Ellipsis Renderer +The \mdef{markdownRendererEllipsis} macro replaces any occurance of ASCII +ellipses in the input text. This macro will only be produced, when the +\Opt{smartEllipses} option is enabled. 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\markdownOptionSmartEllipses{true} +\def\markdownRendererEllipsis{{\it SHAZAM}!} +\markdownBegin +The secret word is ... +\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: + +> The secret word is *SHAZAM*! + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage[smartEllipses]{markdown} +\markdownSetup{ + renderers = { + ellipsis = \emph{SHAZAM}!, + }, +} +\begin{document} +\begin{markdown} +The secret word is ... +\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: + +> The secret word is *SHAZAM*! + +##### \Hologo{ConTeXt} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\usemodule[t][markdown] +\setupmarkdown[smartEllipses = yes] +\def\markdownRendererEllipsis{\emph{SHAZAM}!} +\starttext +\startmarkdown +The secret word is ... +\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: + +> Hello *world*! +> +> *(The end of a block)* +> +> _Foo_ bar! + % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererOlBegin{% - \markdownRendererOlBeginPrototype}% +\def\markdownRendererEllipsis{% + \markdownRendererEllipsisPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { olBegin } + { ellipsis } \prop_gput:Nnn \g_@@_renderer_arities_prop - { olBegin } + { ellipsis } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -11736,30 +12004,115 @@ option is disabled. The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererOlBeginTight} macro represents the beginning of an -ordered list that contains no item with several paragraphs of text (the -list is tight). This macro will only be produced, when the \Opt{tightLists} -option is enabled and the \Opt{fancyLists} option is disabled. The macro -receives no arguments. +#### Emphasis Renderers +The \mdef{markdownRendererEmphasis} macro represents an 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} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\input markdown +\def\markdownRendererEmphasis#1{{\it#1}} +\def\markdownRendererStrongEmphasis#1{{\bf#1}} +\markdownBegin +This is *emphasis*. + +This is **strong emphasis**. +\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 *emphasis*. +> +> This is **strong emphasis**. + +##### \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 = { + emphasis = {\emph{#1}}, + strongEmphasis = {\textbf{#1}}, + }, +} +\begin{document} +\begin{markdown} +This is *emphasis*. + +This is **strong emphasis**. +\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 *emphasis*. +> +> This is **strong emphasis**. + +##### \Hologo{ConTeXt} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\usemodule[t][markdown] +\def\markdownRendererEmphasis#1{\emph{#1}} +\def\markdownRendererStrongEmphasis#1{\bold{#1}} +\starttext +\startmarkdown +This is *emphasis*. + +This is **strong emphasis**. +\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: + +> This is *emphasis*. +> +> This is **strong emphasis**. + % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererOlBeginTight{% - \markdownRendererOlBeginTightPrototype}% +\def\markdownRendererEmphasis{% + \markdownRendererEmphasisPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { olBeginTight } + { emphasis } \prop_gput:Nnn \g_@@_renderer_arities_prop - { olBeginTight } - { 0 } + { emphasis } + { 1 } \ExplSyntaxOff % \end{macrocode} % \par @@ -11771,13 +12124,9 @@ receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererFancyOlBegin} macro represents the beginning of a -fancy ordered list that contains an item with several paragraphs of text (the -list is not tight). This macro will only be produced, when the \Opt{fancyLists} -option is enabled. The macro receives two arguments: the style of the list item -labels (`Decimal`, `LowerRoman`, `UpperRoman`, `LowerAlpha`, and `UpperAlpha`), -and the style of delimiters between list item labels and texts (`Default`, -`OneParen`, and `Period`). +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} % @@ -11787,16 +12136,16 @@ and the style of delimiters between list item labels and texts (`Default`, % \fi % % \begin{macrocode} -\def\markdownRendererFancyOlBegin{% - \markdownRendererFancyOlBeginPrototype}% +\def\markdownRendererStrongEmphasis{% + \markdownRendererStrongEmphasisPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { fancyOlBegin } + { strongEmphasis } \prop_gput:Nnn \g_@@_renderer_arities_prop - { fancyOlBegin } - { 2 } + { strongEmphasis } + { 1 } \ExplSyntaxOff % \end{macrocode} % \par @@ -11808,32 +12157,115 @@ and the style of delimiters between list item labels and texts (`Default`, % % \begin{markdown} -The \mdef{markdownRendererFancyOlBeginTight} macro represents the beginning of -a fancy ordered list that contains no item with several paragraphs of text (the -list is tight). This macro will only be produced, when the \Opt{fancyLists} -and \Opt{tightLists} options are enabled. The macro receives two arguments: the -style of the list item labels, and the style of delimiters between list -item labels and texts. See the \mref{markdownRendererFancyOlBegin} macro for -the valid style values. +#### Fenced Div Context Renderers +The following macros are only produced, when the \Opt{fencedDiv} option is +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 +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[fencedDiv]{markdown} +\markdownSetup{ + renderers = { + fencedDivAttributeContextBegin = {% + \par + \emph{(The beginning of a fenced div attribute context)} + \par + }, + fencedDivAttributeContextEnd = {% + \par + \emph{(The end of a fenced div attribute context)} + \par + }, + }, +} +\begin{document} +\begin{markdown} + +::: {key=value} + +foo + +:::: {#identifier} + +bar + +:::: + +::: + +::: {.class_name} + +baz + +::: + +\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: + +> *(The beginning of a fenced div attribute context)* +> +> foo +> +> *(The beginning of a fenced div attribute context)* +> +> bar +> +> *(The end of a fenced div attribute context)* +> +> *(The end of a fenced div attribute context)* +> +> *(The beginning of a fenced div attribute context)* +> +> baz +> +> *(The end of a fenced div attribute context)* + % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererFancyOlBeginTight{% - \markdownRendererFancyOlBeginTightPrototype}% +\def\markdownRendererFencedDivAttributeContextBegin{% + \markdownRendererFencedDivAttributeContextBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { fancyOlBeginTight } + { fencedDivAttributeContextBegin } \prop_gput:Nnn \g_@@_renderer_arities_prop - { fancyOlBeginTight } - { 2 } + { fencedDivAttributeContextBegin } + { 0 } +\ExplSyntaxOff +\def\markdownRendererFencedDivAttributeContextEnd{% + \markdownRendererFencedDivAttributeContextEndPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { fencedDivAttributeContextEnd } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { fencedDivAttributeContextEnd } + { 0 } \ExplSyntaxOff % \end{macrocode} % \par @@ -11845,28 +12277,98 @@ the valid style values. % % \begin{markdown} -The \mdef{markdownRendererOlItem} macro represents an item in an ordered list. -This macro will only be produced, when the \Opt{startNumber} option is -disabled and the \Opt{fancyLists} option is disabled. The macro receives no -arguments. +#### Header Attribute Context Renderers +The following macros are only produced, when the \Opt{headerAttributes} option +is 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 +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[headerAttributes]{markdown} +\markdownSetup{ + renderers = { + headerAttributeContextBegin = {% + \par + \emph{(The beginning of a header attribute context)} + \par + }, + headerAttributeContextEnd = {% + \par + \emph{(The end of a header attribute context)} + \par + }, + }, +} +\begin{document} +\begin{markdown} + +# First top-level heading + +## A subheading {#identifier} + +# Second top-level heading {.class_name} + +\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: + +> # First top-level heading +> +> *(The beginning of a header attribute context)* +> +> ## A subheading +> +> *(The end of a header attribute context)* +> +> *(The beginning of a header attribute context)* +> +> # Second top-level heading +> +> *(The end of a header attribute context)* + % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererOlItem{% - \markdownRendererOlItemPrototype}% +\def\markdownRendererHeaderAttributeContextBegin{% + \markdownRendererHeaderAttributeContextBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { olItem } + { headerAttributeContextBegin } \prop_gput:Nnn \g_@@_renderer_arities_prop - { olItem } + { headerAttributeContextBegin } + { 0 } +\ExplSyntaxOff +\def\markdownRendererHeaderAttributeContextEnd{% + \markdownRendererHeaderAttributeContextEndPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { headerAttributeContextEnd } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { headerAttributeContextEnd } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -11879,9 +12381,9 @@ arguments. % % \begin{markdown} -The \mdef{markdownRendererOlItemEnd} macro represents the end of an item in -an ordered list. This macro will only be produced, when the \Opt{fancyLists} -option is disabled. The macro receives no arguments. +#### Heading Renderers +The \mdef{markdownRendererHeadingOne} macro represents a first level heading. +The macro receives a single argument that corresponds to the heading text. % \end{markdown} % @@ -11891,16 +12393,16 @@ option is disabled. The macro receives no arguments. % \fi % % \begin{macrocode} -\def\markdownRendererOlItemEnd{% - \markdownRendererOlItemEndPrototype}% +\def\markdownRendererHeadingOne{% + \markdownRendererHeadingOnePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { olItemEnd } + { headingOne } \prop_gput:Nnn \g_@@_renderer_arities_prop - { olItemEnd } - { 0 } + { headingOne } + { 1 } \ExplSyntaxOff % \end{macrocode} % \par @@ -11912,10 +12414,9 @@ option is disabled. The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererOlItemWithNumber} macro represents an item in an -ordered list. This macro will only be produced, when the \Opt{startNumber} -option is enabled and the \Opt{fancyLists} option is disabled. The macro -receives a single numeric argument that corresponds to the item number. +The \mdef{markdownRendererHeadingTwo} macro represents a second level +heading. The macro receives a single argument that corresponds to the heading +text. % \end{markdown} % @@ -11925,15 +12426,15 @@ receives a single numeric argument that corresponds to the item number. % \fi % % \begin{macrocode} -\def\markdownRendererOlItemWithNumber{% - \markdownRendererOlItemWithNumberPrototype}% +\def\markdownRendererHeadingTwo{% + \markdownRendererHeadingTwoPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { olItemWithNumber } + { headingTwo } \prop_gput:Nnn \g_@@_renderer_arities_prop - { olItemWithNumber } + { headingTwo } { 1 } \ExplSyntaxOff % \end{macrocode} @@ -11946,10 +12447,9 @@ receives a single numeric argument that corresponds to the item number. % % \begin{markdown} -The \mdef{markdownRendererFancyOlItem} macro represents an item in a fancy -ordered list. This macro will only be produced, when the \Opt{startNumber} -option is disabled and the \Opt{fancyLists} option is enabled. The macro receives -no arguments. +The \mdef{markdownRendererHeadingThree} macro represents a third level +heading. The macro receives a single argument that corresponds to the heading +text. % \end{markdown} % @@ -11959,16 +12459,16 @@ no arguments. % \fi % % \begin{macrocode} -\def\markdownRendererFancyOlItem{% - \markdownRendererFancyOlItemPrototype}% +\def\markdownRendererHeadingThree{% + \markdownRendererHeadingThreePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { fancyOlItem } + { headingThree } \prop_gput:Nnn \g_@@_renderer_arities_prop - { fancyOlItem } - { 0 } + { headingThree } + { 1 } \ExplSyntaxOff % \end{macrocode} % \par @@ -11980,9 +12480,9 @@ no arguments. % % \begin{markdown} -The \mdef{markdownRendererFancyOlItemEnd} macro represents the end of an item in -a fancy ordered list. This macro will only be produced, when the \Opt{fancyLists} -option is enabled. The macro receives no arguments. +The \mdef{markdownRendererHeadingFour} macro represents a fourth level +heading. The macro receives a single argument that corresponds to the heading +text. % \end{markdown} % @@ -11992,16 +12492,16 @@ option is enabled. The macro receives no arguments. % \fi % % \begin{macrocode} -\def\markdownRendererFancyOlItemEnd{% - \markdownRendererFancyOlItemEndPrototype}% +\def\markdownRendererHeadingFour{% + \markdownRendererHeadingFourPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { fancyOlItemEnd } + { headingFour } \prop_gput:Nnn \g_@@_renderer_arities_prop - { fancyOlItemEnd } - { 0 } + { headingFour } + { 1 } \ExplSyntaxOff % \end{macrocode} % \par @@ -12013,10 +12513,9 @@ option is enabled. The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererFancyOlItemWithNumber} macro represents an item in a -fancy ordered list. This macro will only be produced, when the \Opt{startNumber} -and \Opt{fancyLists} options are enabled. The macro receives a single numeric -argument that corresponds to the item number. +The \mdef{markdownRendererHeadingFive} macro represents a fifth level +heading. The macro receives a single argument that corresponds to the heading +text. % \end{markdown} % @@ -12026,15 +12525,15 @@ argument that corresponds to the item number. % \fi % % \begin{macrocode} -\def\markdownRendererFancyOlItemWithNumber{% - \markdownRendererFancyOlItemWithNumberPrototype}% +\def\markdownRendererHeadingFive{% + \markdownRendererHeadingFivePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { fancyOlItemWithNumber } + { headingFive } \prop_gput:Nnn \g_@@_renderer_arities_prop - { fancyOlItemWithNumber } + { headingFive } { 1 } \ExplSyntaxOff % \end{macrocode} @@ -12047,29 +12546,129 @@ argument that corresponds to the item number. % % \begin{markdown} -The \mdef{markdownRendererOlEnd} macro represents the end of an ordered list -that contains an item with several paragraphs of text (the list is not -tight). This macro will only be produced, when the \Opt{fancyLists} option is -disabled. The macro receives no arguments. +The \mdef{markdownRendererHeadingSix} macro represents a sixth level +heading. The macro receives a single argument that corresponds to the heading +text. % \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\markdownRendererInterblockSeparator{} +\def\markdownRendererHeadingOne{1} +\def\markdownRendererHeadingTwo{2} +\def\markdownRendererHeadingThree{3} +\def\markdownRendererHeadingFour{4} +\def\markdownRendererHeadingFive{5} +\def\markdownRendererHeadingSix{6} +\markdownBegin +###### +##### +##### +### +###### +\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: + +> 65536 + +##### \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 = { + interblockSeparator = {}, + headingOne = 1, + headingTwo = 2, + headingThree = 3, + headingFour = 4, + headingFive = 5, + headingSix = 6, + }, +} +\begin{document} +\begin{markdown} +###### +##### +##### +### +###### +\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: + +> 65536 + +##### \Hologo{ConTeXt} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\usemodule[t][markdown] +\def\markdownRendererInterblockSeparator{} +\def\markdownRendererHeadingOne{1} +\def\markdownRendererHeadingTwo{2} +\def\markdownRendererHeadingThree{3} +\def\markdownRendererHeadingFour{4} +\def\markdownRendererHeadingFive{5} +\def\markdownRendererHeadingSix{6} +\starttext +\startmarkdown +###### +##### +##### +### +###### +\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: + +> 65536 + % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererOlEnd{% - \markdownRendererOlEndPrototype}% +\def\markdownRendererHeadingSix{% + \markdownRendererHeadingSixPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { olEnd } + { headingSix } \prop_gput:Nnn \g_@@_renderer_arities_prop - { olEnd } - { 0 } + { headingSix } + { 1 } \ExplSyntaxOff % \end{macrocode} % \par @@ -12081,63 +12680,110 @@ disabled. The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererOlEndTight} macro represents the end of an ordered -list that contains no item with several paragraphs of text (the list is -tight). This macro will only be produced, when the \Opt{tightLists} option is -enabled and the \Opt{fancyLists} option is disabled. The macro receives no -arguments. +#### HTML Comment Renderers + +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 + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage[html]{markdown} +\usepackage{marginnote} +\markdownSetup{ + renderers = { + inlineHtmlComment = {\marginnote{#1}}, + blockHtmlCommentBegin = {\begin{quote}}, + blockHtmlCommentEnd = {\end{quote}}, + }, +} +\begin{document} +\begin{markdown} +A useful use of inline HTML comments are side notes. + + +We can render block HTML comments as blockquotes: + + +\end{markdown} +\end{document} +``````` +Next, invoke LuaTeX from the terminal: +``` sh +lualatex document.tex +lualatex document.tex +`````` +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: + +> Side notes are displayed in the horizontal margins next to the relevant +> passages, which makes them *easier for the reader to find* than notes. + % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererOlEndTight{% - \markdownRendererOlEndTightPrototype}% +\def\markdownRendererInlineHtmlComment{% + \markdownRendererInlineHtmlCommentPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { olEndTight } + { inlineHtmlComment } \prop_gput:Nnn \g_@@_renderer_arities_prop - { olEndTight } + { 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 -% \end{macrocode} -% \par -% -% \iffalse -% -%<*manual-tokens> -% \fi -% -% \begin{markdown} - -The \mdef{markdownRendererFancyOlEnd} macro represents the end of a fancy -ordered list that contains an item with several paragraphs of text (the list -is not tight). This macro will only be produced, when the \Opt{fancyLists} -option is enabled. The macro receives no arguments. - -% \end{markdown} -% -% \iffalse -% -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererFancyOlEnd{% - \markdownRendererFancyOlEndPrototype}% +\def\markdownRendererBlockHtmlCommentEnd{% + \markdownRendererBlockHtmlCommentEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { fancyOlEnd } + { blockHtmlCommentEnd } \prop_gput:Nnn \g_@@_renderer_arities_prop - { fancyOlEnd } + { blockHtmlCommentEnd } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -12150,97 +12796,21 @@ option is enabled. The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererFancyOlEndTight} macro represents the end of a -fancy ordered list that contains no item with several paragraphs of text (the -list is tight). This macro will only be produced, when the \Opt{fancyLists} -and \Opt{tightLists} options are enabled. The macro receives no arguments. +#### HTML Tag and Element Renderers -% \end{markdown} -% -% \iffalse +The \mdef{markdownRendererInlineHtmlTag} macro represents an opening, closing, +or empty inline \acro{HTML} tag. 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} tag. -##### Plain \TeX{} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\input markdown -\def\markdownOptionTightLists{true} -\def\markdownOptionStartNumber{true} - -\def\markdownRendererInterblockSeparator{} -\def\markdownRendererOlBeginTight{ (} -\def\markdownRendererOlItemWithNumber#1{% - \ifnum #1=1\relax - the first - \else - \ifnum #1=2\relax - , the second - \else - , and the third - \fi - \fi -} -\def\markdownRendererOlItemEnd{} -\def\markdownRendererOlEndTight{).} - -\markdownBegin -This is a tight list - -1. item -2. item -3. item -\markdownEnd - -\def\markdownRendererInterblockSeparator{% - :\par - \def\markdownRendererInterblockSeparator{\par}% -} -\def\markdownRendererOlBegin{} -\def\markdownRendererOlItemWithNumber#1{% - #1.\kern 0.5em% - This is the - \ifnum #1=1\relax - first - \else - \ifnum #1=2\relax - second - \else - third - \fi - \fi -} -\def\markdownRendererOlItemEnd{.\par} -\def\markdownRendererOlEnd{} - -\markdownBegin -This is a loose list - -1. item - -2. item - -3. item -\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: +The \mdef{markdownRendererInputBlockHtmlElement} macro represents a block +\acro{HTML} element. This macro will only be produced, when the \Opt{html} +option is enabled. The macro receives a single argument that filename of a file +containing the contents of the \acro{HTML} element. -> This is a tight list (the first item, the second item, and the third item). -> -> This is a loose list: -> -> 1. This is the first item. -> -> 2. This is the second item. -> -> 3. This is the third item. +% \end{markdown} +% +% \iffalse ##### \LaTeX{} Example {.unnumbered} @@ -12248,324 +12818,61 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \documentclass{article} -\usepackage[tightLists, startNumber]{markdown} -\begin{document} - -\begin{markdown*}{ - renderers = { - interblockSeparator = {}, - olBeginTight = { (}, - olItemWithNumber = {% - \ifnum #1=1\relax - the first - \else - \ifnum #1=2\relax - , the second - \else - , and the third - \fi - \fi - }, - olItemEnd = {}, - olEndTight = {).}, - }, -} -This is a tight list - -1. item -2. item -3. item -\end{markdown*} - -\begin{markdown*}{ +\usepackage[html]{markdown} +\usepackage{marginnote} +\usepackage{verbatim} +\markdownSetup{ renderers = { - interblockSeparator = {% - :\par - \def\markdownRendererInterblockSeparator{\par}% - }, - olBeginTight = {\begin{enumerate}}, - olItemWithNumber = {% - \item This is the - \ifnum #1=1\relax - first - \else - \ifnum #1=2\relax - second - \else - third - \fi - \fi - }, - olItemEnd = {.}, - olEnd = {\end{enumerate}}, - }, + inlineHtmlTag = {\textbf{#1}}, + inputBlockHtmlElement = {\verbatiminput{#1}}, + }, } -This is a loose list - -1. item - -2. item - -3. item -\end{markdown*} +\begin{document} +\begin{markdown} +_Hello,_ world!
+
_Hello,_ world!
+\end{markdown} \end{document} ``````` Next, invoke LuaTeX from the terminal: ``` sh lualatex document.tex +lualatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the -following text: - -> This is a tight list (the first item, the second item, and the third item). -> -> This is a loose list: -> -> 1. This is the first item. -> -> 2. This is the second item. -> -> 3. This is the third item. - -##### \Hologo{ConTeXt} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\usemodule[t][markdown] -\setupmarkdown - [ - tightLists = yes, - startNumber = yes, - ] -\starttext - -\def\markdownRendererInterblockSeparator{} -\def\markdownRendererOlBeginTight{ (} -\def\markdownRendererOlItemWithNumber#1{% - \ifnum #1=1\relax - the first - \else - \ifnum #1=2\relax - , the second - \else - , and the third - \fi - \fi -} -\def\markdownRendererOlItemEnd{} -\def\markdownRendererOlEndTight{).} - -\startmarkdown -This is a tight list - -1. item -2. item -3. item -\stopmarkdown - -\def\markdownRendererInterblockSeparator{% - :\par - \def\markdownRendererInterblockSeparator{\par}% -} -\def\markdownRendererOlBegin{\startitemize} -\def\markdownRendererOlItemWithNumber#1{% - \sym{#1.} - This is the - \ifnum #1=1\relax - first - \else - \ifnum #1=2\relax - second - \else - third - \fi - \fi -} -\def\markdownRendererOlItemEnd{.\par} -\def\markdownRendererOlEnd{\stopitemize} - -\startmarkdown -This is a loose list - -1. item - -2. item - -3. item -\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: +following body text: -> This is a tight list (the first item, the second item, and the third item). +> ****_Hello,_ world!**
** > -> This is a loose list: -> -> 1. This is the first item. -> -> 2. This is the second item. -> -> 3. This is the third item. - -% -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererFancyOlEndTight{% - \markdownRendererFancyOlEndTightPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { fancyOlEndTight } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { fancyOlEndTight } - { 0 } -\ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -% -%<*manual-tokens> -% \fi -% -% \begin{markdown} - -#### Definition List Renderers -The following macros are only produced, when the \Opt{definitionLists} option -is enabled. - -The \mdef{markdownRendererDlBegin} macro represents the beginning of a -definition list that contains an item with several paragraphs of text (the -list is not tight). The macro receives no arguments. - -% \end{markdown} -% -% \iffalse -% -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererDlBegin{% - \markdownRendererDlBeginPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { dlBegin } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { dlBegin } - { 0 } -\ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -% -%<*manual-tokens> -% \fi -% -% \begin{markdown} - -The \mdef{markdownRendererDlBeginTight} macro represents the beginning of a -definition list that contains an item with several paragraphs of text (the -list is not tight). This macro will only be produced, when the -\Opt{tightLists} option is disabled. The macro receives no arguments. - -% \end{markdown} -% -% \iffalse -% -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererDlBeginTight{% - \markdownRendererDlBeginTightPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { dlBeginTight } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { dlBeginTight } - { 0 } -\ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -% -%<*manual-tokens> -% \fi -% -% \begin{markdown} - -The \mdef{markdownRendererDlItem} macro represents a term in a definition -list. The macro receives a single argument that corresponds to the term -being defined. +>
_Hello,_ world!
-% \end{markdown} -% -% \iffalse % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererDlItem{% - \markdownRendererDlItemPrototype}% +\def\markdownRendererInlineHtmlTag{% + \markdownRendererInlineHtmlTagPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { dlItem } + { inlineHtmlTag } \prop_gput:Nnn \g_@@_renderer_arities_prop - { dlItem } + { inlineHtmlTag } { 1 } \ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -% -%<*manual-tokens> -% \fi -% -% \begin{markdown} - -The \mdef{markdownRendererDlItemEnd} macro represents the end of a list of -definitions for a single term. - -% \end{markdown} -% -% \iffalse -% -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererDlItemEnd{% - \markdownRendererDlItemEndPrototype}% +\def\markdownRendererInputBlockHtmlElement{% + \markdownRendererInputBlockHtmlElementPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { dlItemEnd } + { inputBlockHtmlElement } \prop_gput:Nnn \g_@@_renderer_arities_prop - { dlItemEnd } - { 0 } + { inputBlockHtmlElement } + { 1 } \ExplSyntaxOff % \end{macrocode} % \par @@ -12577,94 +12884,85 @@ definitions for a single term. % % \begin{markdown} -The \mdef{markdownRendererDlDefinitionBegin} macro represents the beginning -of a definition in a definition list. There can be several definitions for -a single term. +#### Image Renderer +The \mdef{markdownRendererImage} macro represents an image. It receives +four arguments: the label, the fully escaped \acro{uri} that can be directly +typeset, the raw \acro{uri} that can be used outside typesetting, and the +title of the link. % \end{markdown} % % \iffalse -% -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererDlDefinitionBegin{% - \markdownRendererDlDefinitionBeginPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { dlDefinitionBegin } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { dlDefinitionBegin } - { 0 } -\ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -% -%<*manual-tokens> -% \fi -% -% \begin{markdown} -The \mdef{markdownRendererDlDefinitionEnd} macro represents the end of a -definition in a definition list. There can be several definitions for a -single term. +##### \LaTeX{} Example {.unnumbered} -% \end{markdown} -% -% \iffalse -% -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererDlDefinitionEnd{% - \markdownRendererDlDefinitionEndPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { dlDefinitionEnd } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { dlDefinitionEnd } - { 0 } -\ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -% -%<*manual-tokens> -% \fi -% -% \begin{markdown} +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage{markdown} +\begingroup +\catcode`\@=11 +\catcode`\%=12 +\catcode`\^^A=14 +\global\def\markdownRendererImage#1#2#3#4{^^A + \immediate\write18{^^A +``` +``` sh + if printf '%s' "#3" | grep -q ^http; then + OUTPUT="$(printf '%s' "#3" | md5sum | cut -d' ' -f1).^^A + $(printf '%s' "#3" | sed 's/.*[.]//')"; + if ! [ -e "$OUTPUT" ]; then + wget -O "$OUTPUT" '#3' || rm "$OUTPUT"; + convert "$OUTPUT" png:"$OUTPUT"; + fi; + printf '%s%%' "$OUTPUT" > \jobname.fetched; + else + printf '%s%%' "#3" > \jobname.fetched; + fi^^A +``` +``` tex + }^^A + {^^A + \everyeof={\noexpand}^^A + \edef\filename{\@@input"\jobname.fetched" }^^A + \includegraphics[width=\textwidth]{\filename}^^A + }^^A +} +\endgroup +\begin{document} +\begin{markdown} +![TUGboat](https://tug.org/tugboat/noword.jpg) +\end{markdown} +\end{document} +`````` +Next, invoke LuaTeX from the terminal: +``` sh +lualatex --shell-escape document.tex +`````` +A PDF document named `document.pdf` 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 of the current user. It also +assumes that the `md5sum`, `wget`, and `convert` binaries are installed and +that the \TeX{} engine has shell access. -The \mdef{markdownRendererDlEnd} macro represents the end of a definition -list that contains an item with several paragraphs of text (the list is not -tight). The macro receives no arguments. +> ![TUGboat](https://tug.org/tugboat/noword.jpg "The Communications of the TeX Users Group") -% \end{markdown} -% -% \iffalse % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererDlEnd{% - \markdownRendererDlEndPrototype}% +\def\markdownRendererImage{% + \markdownRendererImagePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { dlEnd } + { image } \prop_gput:Nnn \g_@@_renderer_arities_prop - { dlEnd } - { 0 } + { image } + { 4 } \ExplSyntaxOff % \end{macrocode} % \par @@ -12676,10 +12974,9 @@ tight). The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererDlEndTight} macro represents the end 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 \Opt{tightLists} -option is disabled. The macro receives no arguments. +#### Interblock Separator Renderer +The \mdef{markdownRendererInterblockSeparator} macro represents a separator +between two markdown block elements. The macro receives no arguments. % \end{markdown} % @@ -12691,82 +12988,16 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown -\def\markdownOptionDefinitionLists{true} -\def\markdownOptionTightLists{true} - -\def\markdownRendererInterblockSeparator{% - :% - \def\markdownRendererInterblockSeparator{\par}% -} -\def\markdownRendererDlBeginTight{% - \begingroup - \parindent=0pt -} -\def\markdownRendererDlItem#1{% - \par{\bf#1}% - \def\markdownRendererDlDefinitionEnd{% - , - \def\markdownRendererDlDefinitionEnd{% - , and - \def\markdownRendererDlDefinitionEnd{.}% - }% - }% -} -\def\markdownRendererDlItemEnd{} -\def\markdownRendererDlDefinitionBegin{\par--\kern 0.5em} -\def\markdownRendererDlEndTight{\endgroup} - -\markdownBegin -This is a tight definition list - -Coffee -: black hot drink -: prepared from roasted coffee beans -: one of the most traded agricultural commodities in the world - -Milk -: white cold drink -: nutrient-rich -: produced on an industrial scale -\markdownEnd - \def\markdownRendererInterblockSeparator{% - \def\markdownRendererInterblockSeparator{\par}% -} -\def\markdownRendererDlBegin{} -\def\markdownRendererDlItem#1{% - . #1 is a - \def\markdownRendererDlDefinitionBegin{% - \def\markdownRendererDlDefinitionBegin{% - , - \def\markdownRendererDlDefinitionBegin{, and }% - }% - }% + \par + {\it(The end of a block)}% + \par } -\def\markdownRendererDlItemEnd{} -\def\markdownRendererDlDefinitionEnd{} -\def\markdownRendererDlEnd{.} - \markdownBegin -This is a loose definition list - -Coffee - -: black hot drink - -: prepared from roasted coffee beans - -: one of the most traded agricultural commodities in the world - -Milk - -: white cold drink - -: nutrient-rich +Hello *world*! -: produced on an industrial scale +_Foo_ bar! \markdownEnd - \bye ``````` Next, invoke LuaTeX from the terminal: @@ -12776,24 +13007,11 @@ luatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> This is a tight definition list: -> -> **Coffee** -> -> - black hot drink, -> - prepared from roasted coffee beans, and -> - one of the most traded agricultural commodities in the world. -> -> **Milk** -> -> - white cold drink, -> - nutrient-rich, and -> - produced on an industrial scale. +> Hello *world*! > -> This is a loose definition list. Coffee is a black hot drink, 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. +> *(The end of a block)* +> +> _Foo_ bar! ##### \LaTeX{} Example {.unnumbered} @@ -12801,86 +13019,166 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \documentclass{article} -\usepackage[definitionLists, tightLists]{markdown} -\begin{document} - -\begin{markdown*}{ +\usepackage{markdown} +\markdownSetup{ renderers = { interblockSeparator = {% - :% - \def\markdownRendererInterblockSeparator{\par}% - }, - dlBeginTight = {\begin{description}}, - dlItem = {% - \item[#1] - \begin{itemize} - \def\markdownRendererDlDefinitionEnd{% - , - \def\markdownRendererDlDefinitionEnd{% - , and - \def\markdownRendererDlDefinitionEnd{.}% - }% - }% + \par + \emph{(The end of a block)}% + \par }, - dlItemEnd = {\end{itemize}}, - dlDefinitionBegin = \item, - dlEndTight = {\end{description}}, }, } -This is a tight definition list +\begin{document} +\begin{markdown} +Hello *world*! -Coffee -: black hot drink -: prepared from roasted coffee beans -: one of the most traded agricultural commodities in the 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: -Milk -: white cold drink -: nutrient-rich -: produced on an industrial scale -\end{markdown*} +> Hello *world*! +> +> *(The end of a block)* +> +> _Foo_ bar! -\begin{markdown*}{ - renderers = { - interblockSeparator = {% - \def\markdownRendererInterblockSeparator{\par}% - }, - dlBegin = {}, - dlItem = {% - . #1 is a - \def\markdownRendererDlDefinitionBegin{% - \def\markdownRendererDlDefinitionBegin{% - , - \def\markdownRendererDlDefinitionBegin{, and }% - }% - }% - }, - dlItemEnd = {}, - dlDefinitionEnd = {}, - dlEnd = {.}, - }, +##### \Hologo{ConTeXt} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\usemodule[t][markdown] +\def\markdownRendererInterblockSeparator{% + \par + \emph{(The end of a block)}% + \par } -This is a loose definition list +\starttext +\startmarkdown +Hello *world*! + +_Foo_ bar! +\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: + +> Hello *world*! +> +> *(The end of a block)* +> +> _Foo_ bar! + +% +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererInterblockSeparator{% + \markdownRendererInterblockSeparatorPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { interblockSeparator } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { interblockSeparator } + { 0 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +% +%<*manual-tokens> +% \fi +% +% \begin{markdown} -Coffee +#### Line Break Renderer +The \mdef{markdownRendererLineBreak} macro represents a forced line break. +The macro receives no arguments. -: black hot drink +% \end{markdown} +% +% \iffalse -: prepared from roasted coffee beans +##### Plain \TeX{} Example {.unnumbered} -: one of the most traded agricultural commodities in the world +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\input markdown +\def\markdownRendererLineBreak{% + \par + {\it(A forced linebreak)}% + \par +} +\markdownInput{example.md} +\bye +``````` +Using a text editor, create a text document named `example.md` with the +following content. Note the two spaces at the end of the first line, which +specify a hard linebreak. Due to the limitations of the \TeX{} input +processor, hard linebreaks would be ignored if we typed them directly into the +`document.tex` document. -Milk +
Hello world!  
_Foo_ bar!
-: white cold drink +Next, invoke LuaTeX from the terminal: +``` sh +luatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: -: nutrient-rich +> Hello *world*! +> +> *(A forced linebreak)* +> +> _Foo_ bar! -: produced on an industrial scale -\end{markdown*} +##### \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 = { + lineBreak = {% + \par + \emph{(A forced linebreak)}% + \par + }, + }, +} +\begin{document} +\markdownInput{example.md} \end{document} ``````` +Using a text editor, create a text document named `example.md` with the +following content. Note the two spaces at the end of the first line, which +specify a hard linebreak. Due to the limitations of the \TeX{} input +processor, hard linebreaks would be ignored if we typed them directly into the +`document.tex` document. + +
Hello world!  
_Foo_ bar!
+ Next, invoke LuaTeX from the terminal: ``` sh lualatex document.tex @@ -12888,24 +13186,11 @@ lualatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> This is a tight definition list: -> -> **Coffee** -> -> - black hot drink, -> - prepared from roasted coffee beans, and -> - one of the most traded agricultural commodities in the world. -> -> **Milk** -> -> - white cold drink, -> - nutrient-rich, and -> - produced on an industrial scale. +> Hello *world*! > -> This is a loose definition list. Coffee is a black hot drink, 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. +> *(A forced linebreak)* +> +> _Foo_ bar! ##### \Hologo{ConTeXt} Example {.unnumbered} @@ -12913,126 +13198,50 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \usemodule[t][markdown] -\setupmarkdown - [ - definitionLists = yes, - tightLists = yes, - ] -\starttext - -\def\markdownRendererInterblockSeparator{% - :% - \def\markdownRendererInterblockSeparator{\par}% -} -\def\markdownRendererDlBeginTight{} -\def\markdownRendererDlItem#1{% - \par{\bf#1}% - \startitemize - \def\markdownRendererDlDefinitionEnd{% - , - \def\markdownRendererDlDefinitionEnd{% - , and - \def\markdownRendererDlDefinitionEnd{.}% - }% - }% -} -\def\markdownRendererDlItemEnd{\stopitemize} -\def\markdownRendererDlDefinitionBegin{\item} -\def\markdownRendererDlEndTight{} - -\startmarkdown -This is a tight definition list - -Coffee -: black hot drink -: prepared from roasted coffee beans -: one of the most traded agricultural commodities in the world - -Milk -: white cold drink -: nutrient-rich -: produced on an industrial scale -\stopmarkdown - -\def\markdownRendererInterblockSeparator{% - \def\markdownRendererInterblockSeparator{\par}% -} -\def\markdownRendererDlBegin{} -\def\markdownRendererDlItem#1{% - . #1 is a - \def\markdownRendererDlDefinitionBegin{% - \def\markdownRendererDlDefinitionBegin{% - , - \def\markdownRendererDlDefinitionBegin{, and }% - }% - }% +\def\markdownRendererLineBreak{% + \par + \emph{(A forced linebreak)}% + \par } -\def\markdownRendererDlItemEnd{} -\def\markdownRendererDlDefinitionEnd{} -\def\markdownRendererDlEnd{.} - -\startmarkdown -This is a loose definition list - -Coffee - -: black hot drink - -: prepared from roasted coffee beans - -: one of the most traded agricultural commodities in the world - -Milk - -: white cold drink - -: nutrient-rich - -: produced on an industrial scale -\stopmarkdown - +\starttext +\markdownInput{example.md} \stoptext ``````` +Using a text editor, create a text document named `example.md` with the +following content. Note the two spaces at the end of the first line, which +specify a hard linebreak. Due to the limitations of the \TeX{} input +processor, hard linebreaks would be ignored if we typed them directly into the +`document.tex` document. + +
Hello world!  
_Foo_ bar!
+ Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: -> This is a tight definition list: -> -> **Coffee** -> -> - black hot drink, -> - prepared from roasted coffee beans, and -> - one of the most traded agricultural commodities in the world. -> -> **Milk** -> -> - white cold drink, -> - nutrient-rich, and -> - produced on an industrial scale. +> Hello *world*! > -> This is a loose definition list. Coffee is a black hot drink, 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. +> *(A forced linebreak)* +> +> _Foo_ bar! % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererDlEndTight{% - \markdownRendererDlEndTightPrototype}% +\def\markdownRendererLineBreak{% + \markdownRendererLineBreakPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { dlEndTight } + { lineBreak } \prop_gput:Nnn \g_@@_renderer_arities_prop - { dlEndTight } + { lineBreak } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -13045,10 +13254,11 @@ following text: % % \begin{markdown} -#### Emphasis Renderers -The \mdef{markdownRendererEmphasis} macro represents an emphasized span of -text. The macro receives a single argument that corresponds to the emphasized -span of text. +#### Link Renderer +The \mdef{markdownRendererLink} macro represents a hyperlink. It receives +four arguments: the label, the fully escaped \acro{uri} that can be directly +typeset, the raw \acro{uri} that can be used outside typesetting, and the +title of the link. % \end{markdown} % @@ -13060,12 +13270,14 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown -\def\markdownRendererEmphasis#1{{\it#1}} -\def\markdownRendererStrongEmphasis#1{{\bf#1}} +\def\markdownRendererLink#1#2#3#4{% + #1 {\tt#2} titled {\it#4}% +} \markdownBegin -This is *emphasis*. +Please visit [the link][ctan]. -This is **strong emphasis**. + [ctan]: https://ctan.org/ + (the Comprehensive TeX Archive Network) \markdownEnd \bye ``````` @@ -13076,9 +13288,8 @@ luatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> This is *emphasis*. -> -> This is **strong emphasis**. +> Please visit the link titled *the Comprehensive TeX +> Archive Network*. ##### \LaTeX{} Example {.unnumbered} @@ -13089,15 +13300,17 @@ following content: \usepackage{markdown} \markdownSetup{ renderers = { - emphasis = {\emph{#1}}, - strongEmphasis = {\textbf{#1}}, + link = {% + #1 \texttt{#2} titled \emph{#4}% + }, }, } \begin{document} \begin{markdown} -This is *emphasis*. +Please visit [the link][ctan]. -This is **strong emphasis**. + [ctan]: https://ctan.org/ + (the Comprehensive TeX Archive Network) \end{markdown} \end{document} ``````` @@ -13108,9 +13321,8 @@ lualatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> This is *emphasis*. -> -> This is **strong emphasis**. +> Please visit the link titled *the Comprehensive TeX +> Archive Network*. ##### \Hologo{ConTeXt} Example {.unnumbered} @@ -13118,13 +13330,15 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \usemodule[t][markdown] -\def\markdownRendererEmphasis#1{\emph{#1}} -\def\markdownRendererStrongEmphasis#1{\bold{#1}} +\def\markdownRendererLink#1#2#3#4{% + #1 {\tt#2} titled \emph{#4}% +} \starttext \startmarkdown -This is *emphasis*. +Please visit [the link][ctan]. -This is **strong emphasis**. + [ctan]: https://ctan.org/ + (the Comprehensive TeX Archive Network) \stopmarkdown \stoptext ``````` @@ -13135,25 +13349,24 @@ context document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> This is *emphasis*. -> -> This is **strong emphasis**. +> Please visit the link titled *the Comprehensive TeX +> Archive Network*. % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererEmphasis{% - \markdownRendererEmphasisPrototype}% +\def\markdownRendererLink{% + \markdownRendererLinkPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { emphasis } + { link } \prop_gput:Nnn \g_@@_renderer_arities_prop - { emphasis } - { 1 } + { link } + { 4 } \ExplSyntaxOff % \end{macrocode} % \par @@ -13165,28 +13378,148 @@ following text: % % \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. +#### Markdown Document Renderers +The \mdef{markdownRendererDocumentBegin} and \mdef{markdownRendererDocumentEnd} +macros represent the beginning and the end of a *markdown* document. The macros +receive no arguments. + +A \TeX{} document may contain any number of markdown documents. Additionally, +markdown documents may appear not only in a sequence, but several markdown +documents may also be *nested*. Redefinitions of the macros should take this +into account. % \end{markdown} % % \iffalse + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `nested.md` with the +following content: +``` md +This is a *nested* markdown document. +``` + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage[contentBlocks]{markdown} +\markdownSetup{ + renderers = { + contentBlock = {% + \markdownInput{#3}% + }, + documentBegin = {% + \par + \emph{(The beginning of a document)} + \par + \begingroup + \markdownSetup{snippet=first-nesting-level}% + }, + documentEnd = {% + \endgroup + \par + \emph{(The end of a document)} + \par + }, + }, +} +\markdownSetupSnippet{first-nesting-level}{ + renderers = { + documentBegin = { + \par + \emph{(The beginning of a nested document)} + \par + \begingroup + \markdownSetup{snippet=second-nesting-level-and-below} + }, + }, +} +\markdownSetupSnippet{second-nesting-level-and-below}{ + renderers = { + documentBegin = { + \par + \emph{(The beginning of a nested document)} + \par + \begingroup + }, + documentEnd = { + \endgroup + \par + \emph{(The end of a nested document)} + \par + }, + }, +} +\begin{document} +\begin{markdown} +Hello *world*! + +/nested.md + +_Foo_ bar! +\end{markdown} +\begin{markdown} + +Bar baz! + +\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: + +> *(The beginning of a document)* +> +> Hello *world*! +> +> *(The beginning of a nested document)* +> +> This is a *nested* markdown document. +> +> *(The end of a nested document)* +> +> _Foo_ bar! +> +> *(The end of a document)* +> +> *(The beginning of a document)* +> +> Bar baz! +> +> *(The end of a document)* + % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererStrongEmphasis{% - \markdownRendererStrongEmphasisPrototype}% +\def\markdownRendererDocumentBegin{% + \markdownRendererDocumentBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { strongEmphasis } + { documentBegin } \prop_gput:Nnn \g_@@_renderer_arities_prop - { strongEmphasis } - { 1 } + { documentBegin } + { 0 } +\ExplSyntaxOff +\def\markdownRendererDocumentEnd{% + \markdownRendererDocumentEndPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { documentEnd } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { documentEnd } + { 0 } \ExplSyntaxOff % \end{macrocode} % \par @@ -13198,27 +13531,79 @@ corresponds to the emphasized span of text. % % \begin{markdown} -#### Block Quote Renderers -The \mdef{markdownRendererBlockQuoteBegin} macro represents the beginning of -a block quote. The macro receives no arguments. +#### Non-Breaking Space Renderer +The \mdef{markdownRendererNbsp} macro represents a non-breaking space. % \end{markdown} % % \iffalse + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.bib` with the +following content: +``` bib +@book{knuth:tex, + author = "Knuth, Donald Ervin", + title = "The \TeX book, volume A of Computers and typesetting", + publisher = "Addison-Wesley", + year = "1984" +} +``````` +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage[ + citations, + citationNbsps, +]{markdown} +\markdownSetup{ + renderers = { + nbsp = {$\cdot$}, + }, +} +\begin{document} + +\begin{markdown} +The TeXbook [@knuth:tex, p. 123 and 130] is good. +\end{markdown} + +\bibliographystyle{plain} +\bibliography{document.bib} + +\end{document} +``````` +Next, invoke LuaTeX and BibTeX from the terminal: +``` sh +lualatex document.tex +bibtex document.aux +lualatex document.tex +lualatex document.tex +`````` +A PDF document named `document.pdf` should be produced and contain the +following text: + +> The TeXbook [1, p.·123·and·130] is good. +> +> ### References +> [1] Donald Ervin Knuth. _The TeXbook, volume A of Computers and typesetting._ +> Addison-Wesley, 1984. + % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererBlockQuoteBegin{% - \markdownRendererBlockQuoteBeginPrototype}% +\def\markdownRendererNbsp{% + \markdownRendererNbspPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { blockQuoteBegin } + { nbsp } \prop_gput:Nnn \g_@@_renderer_arities_prop - { blockQuoteBegin } + { nbsp } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -13231,8 +13616,10 @@ a block quote. The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererBlockQuoteEnd} macro represents the end of a block -quote. The macro receives no arguments. +#### Note Renderer +The \mdef{markdownRendererNote} macro represents a note. This macro +will only be produced, when the \Opt{notes} option is enabled. The +macro receives a single argument that corresponds to the note text. % \end{markdown} % @@ -13244,24 +13631,14 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown -\def\markdownRendererBlockQuoteBegin{% - \begingroup - \vskip\parindent - \leftskip=2\parindent - \parindent=0pt -} -\def\markdownRendererBlockQuoteEnd{% - \par - \vskip\parindent - \endgroup -} +\def\markdownOptionNotes{true} +\def\markdownRendererNote#1{ (and \lowercase{#1})} \markdownBegin -A quote from William Shakespeare's King Lear: +This is some text[^1] and this is some other text[^2]. + + [^1]: this is a note -> This is the excellent foppery of the world that when we are -> sick in fortune---often the surfeit of our own behavior---we -> make guilty of our disasters the sun, the moon, and the -> stars [...] + [^2]: this is some other note \markdownEnd \bye ``````` @@ -13272,12 +13649,8 @@ luatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> A quote from William Shakespeare's King Lear: -> -> > This is the excellent foppery of the world that when we are -> > sick in fortune—often the surfeit of our own behavior—we -> > make guilty of our disasters the sun, the moon, and the -> > stars [...] +> This is some text (and this is a note) and this is some other +> text (and this is some other note). ##### \LaTeX{} Example {.unnumbered} @@ -13285,21 +13658,19 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \documentclass{article} -\usepackage{markdown} +\usepackage[notes]{markdown} \markdownSetup{ renderers = { - blockQuoteBegin = {\begin{quote}}, - blockQuoteEnd = {\end{quote}}, + note = { (and \MakeLowercase{#1})}, }, } \begin{document} \begin{markdown} -A quote from William Shakespeare's King Lear: +This is some text[^1] and this is some other text[^2]. -> This is the excellent foppery of the world that when we are -> sick in fortune---often the surfeit of our own behavior---we -> make guilty of our disasters the sun, the moon, and the -> stars [...] + [^1]: this is a note + + [^2]: this is some other note \end{markdown} \end{document} ``````` @@ -13310,12 +13681,8 @@ lualatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> A quote from William Shakespeare's King Lear: -> -> > This is the excellent foppery of the world that when we are -> > sick in fortune—often the surfeit of our own behavior—we -> > make guilty of our disasters the sun, the moon, and the -> > stars [...] +> This is some text (and this is a note) and this is some other +> text (and this is some other note). ##### \Hologo{ConTeXt} Example {.unnumbered} @@ -13323,16 +13690,15 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \usemodule[t][markdown] -\def\markdownRendererBlockQuoteBegin{\startquotation} -\def\markdownRendererBlockQuoteEnd{\stopquotation} +\setupmarkdown[notes = yes] +\def\markdownRendererNote#1{ (and \lowercase{#1})} \starttext \startmarkdown -A quote from William Shakespeare's King Lear: +This is some text[^1] and this is some other text[^2]. -> This is the excellent foppery of the world that when we are -> sick in fortune---often the surfeit of our own behavior---we -> make guilty of our disasters the sun, the moon, and the -> stars [...] + [^1]: this is a note + + [^2]: this is some other note \stopmarkdown \stoptext ``````` @@ -13343,28 +13709,64 @@ context document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> A quote from William Shakespeare's King Lear: -> -> > This is the excellent foppery of the world that when we are -> > sick in fortune—often the surfeit of our own behavior—we -> > make guilty of our disasters the sun, the moon, and the -> > stars [...] +> This is some text (and this is a note) and this is some other +> text (and this is some other note). % %<*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\markdownRendererBlockQuoteEnd{% - \markdownRendererBlockQuoteEndPrototype}% \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 - { blockQuoteEnd } + { footnote } \prop_gput:Nnn \g_@@_renderer_arities_prop - { blockQuoteEnd } - { 0 } + { footnote } + { 1 } +\seq_gput_right:Nn + \g_@@_renderers_seq + { note } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { note } + { 1 } \ExplSyntaxOff % \end{macrocode} % \par @@ -13376,10 +13778,11 @@ following text: % % \begin{markdown} -#### Code Block Renderers -The \mdef{markdownRendererInputVerbatim} macro represents a code -block. The macro receives a single argument that corresponds to the -filename of a file contaning the code block contents. +#### Ordered List Renderers +The \mdef{markdownRendererOlBegin} macro represents the beginning of an +ordered list that contains an item with several paragraphs of text (the +list is not tight). This macro will only be produced, when the \Opt{fancyLists} +option is disabled. The macro receives no arguments. % \end{markdown} % @@ -13389,16 +13792,16 @@ filename of a file contaning the code block contents. % \fi % % \begin{macrocode} -\def\markdownRendererInputVerbatim{% - \markdownRendererInputVerbatimPrototype}% +\def\markdownRendererOlBegin{% + \markdownRendererOlBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { inputVerbatim } + { olBegin } \prop_gput:Nnn \g_@@_renderer_arities_prop - { inputVerbatim } - { 1 } + { olBegin } + { 0 } \ExplSyntaxOff % \end{macrocode} % \par @@ -13410,110 +13813,103 @@ filename of a file contaning the code block contents. % % \begin{markdown} -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. +The \mdef{markdownRendererOlBeginTight} macro represents the beginning of an +ordered list that contains no item with several paragraphs of text (the +list is tight). This macro will only be produced, when the \Opt{tightLists} +option is enabled and the \Opt{fancyLists} option is disabled. The macro +receives no arguments. % \end{markdown} % % \iffalse +% +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererOlBeginTight{% + \markdownRendererOlBeginTightPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { olBeginTight } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { olBeginTight } + { 0 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +% +%<*manual-tokens> +% \fi +% +% \begin{markdown} -##### \LaTeX{} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\documentclass{article} -\usepackage{verbatim} -\usepackage[hyphens]{url} -\usepackage[fencedCode]{markdown} -\markdownSetup{ - renderers = { - interblockSeparator = { - \def\markdownRendererInterblockSeparator{% - \par - \def\markdownRendererInterblockSeparator{% - \def\markdownRendererInterblockSeparator{% - \par - }% - }% - }% - }, - inputVerbatim = { - is contained in file \url{#1}:% - \verbatiminput{#1}% - }, - inputFencedCode = { - in #2 \markdownRendererInputVerbatim{#1}% - }, - }, -} -\begin{document} -\begin{markdown} -The following code - - def foo(bar): - if len(bar) <= 1: - return bar[0] - elif len(bar) == 2: - return sorted(bar) - else: - baz = len(bar) // 2 - return foo(bar[baz:], bar[:baz]) - -The following code - -~~~ Python ->>> foo([4, 2, 1, 3]) -[1, 2, 3, 4] -~~~~~~~~~~ -\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 except for the filename, which may differ: +The \mdef{markdownRendererFancyOlBegin} macro represents the beginning of a +fancy ordered list that contains an item with several paragraphs of text (the +list is not tight). This macro will only be produced, when the \Opt{fancyLists} +option is enabled. The macro receives two arguments: the style of the list item +labels (`Decimal`, `LowerRoman`, `UpperRoman`, `LowerAlpha`, and `UpperAlpha`), +and the style of delimiters between list item labels and texts (`Default`, +`OneParen`, and `Period`). -> The following code is contained in file -> `./_markdown_document/882453149edcf288976647f6fe147ada.verbatim`: -> ``` py -> def foo(bar): -> if len(bar) <= 1: -> return bar[:1] -> elif len(bar) == 2: -> return sorted(bar) -> else: -> baz = bar[len(bar) // 2] -> return ( -> foo([qux for qux in bar if qux < baz]) + [baz] + -> foo([qux for qux in bar if qux > baz]) -> ) -> `````` -> The following code in Python contained in file -> `./_markdown_document/cf2a96e2120cef5b1fae5fea36fcc27b.verbatim`: -> ``` py -> >>> foo([4, 2, 1, 3]) -> [1, 2, 3, 4] -> `````` +% \end{markdown} +% +% \iffalse +% +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererFancyOlBegin{% + \markdownRendererFancyOlBeginPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { fancyOlBegin } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { fancyOlBegin } + { 2 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +% +%<*manual-tokens> +% \fi +% +% \begin{markdown} + +The \mdef{markdownRendererFancyOlBeginTight} macro represents the beginning of +a fancy ordered list that contains no item with several paragraphs of text (the +list is tight). This macro will only be produced, when the \Opt{fancyLists} +and \Opt{tightLists} options are enabled. The macro receives two arguments: the +style of the list item labels, and the style of delimiters between list +item labels and texts. See the \mref{markdownRendererFancyOlBegin} macro for +the valid style values. +% \end{markdown} +% +% \iffalse % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererInputFencedCode{% - \markdownRendererInputFencedCodePrototype}% +\def\markdownRendererFancyOlBeginTight{% + \markdownRendererFancyOlBeginTightPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { inputFencedCode } + { fancyOlBeginTight } \prop_gput:Nnn \g_@@_renderer_arities_prop - { inputFencedCode } + { fancyOlBeginTight } { 2 } \ExplSyntaxOff % \end{macrocode} @@ -13523,13 +13919,13 @@ following text except for the filename, which may differ: % %<*manual-tokens> % \fi +% % \begin{markdown} -#### YAML Metadata Renderers {#yamlmetadatarenderers} - -The \mdef{markdownRendererJekyllDataBegin} macro represents the beginning of a -\acro{yaml} document. This macro will only be produced when the \Opt{jekyllData} -option is enabled. The macro receives no arguments. +The \mdef{markdownRendererOlItem} macro represents an item in an ordered list. +This macro will only be produced, when the \Opt{startNumber} option is +disabled and the \Opt{fancyLists} option is disabled. The macro receives no +arguments. % \end{markdown} % @@ -13539,15 +13935,15 @@ option is enabled. The macro receives no arguments. % \fi % % \begin{macrocode} -\def\markdownRendererJekyllDataBegin{% - \markdownRendererJekyllDataBeginPrototype}% +\def\markdownRendererOlItem{% + \markdownRendererOlItemPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { jekyllDataBegin } + { olItem } \prop_gput:Nnn \g_@@_renderer_arities_prop - { jekyllDataBegin } + { olItem } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -13560,9 +13956,9 @@ option is enabled. The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererJekyllDataEnd} macro represents the end of a -\acro{yaml} document. This macro will only be produced when the -\Opt{jekyllData} option is enabled. The macro receives no arguments. +The \mdef{markdownRendererOlItemEnd} macro represents the end of an item in +an ordered list. This macro will only be produced, when the \Opt{fancyLists} +option is disabled. The macro receives no arguments. % \end{markdown} % @@ -13572,15 +13968,15 @@ The \mdef{markdownRendererJekyllDataEnd} macro represents the end of a % \fi % % \begin{macrocode} -\def\markdownRendererJekyllDataEnd{% - \markdownRendererJekyllDataEndPrototype}% +\def\markdownRendererOlItemEnd{% + \markdownRendererOlItemEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { jekyllDataEnd } + { olItemEnd } \prop_gput:Nnn \g_@@_renderer_arities_prop - { jekyllDataEnd } + { olItemEnd } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -13593,11 +13989,10 @@ The \mdef{markdownRendererJekyllDataEnd} macro represents the end of a % % \begin{markdown} -The \mdef{markdownRendererJekyllDataMappingBegin} macro represents the -beginning of a mapping in a \acro{yaml} document. This macro will only be -produced when the \Opt{jekyllData} option is enabled. The macro receives two -arguments: the scalar key in the parent structure, cast to a string following -\acro{yaml} serialization rules, and the number of items in the mapping. +The \mdef{markdownRendererOlItemWithNumber} macro represents an item in an +ordered list. This macro will only be produced, when the \Opt{startNumber} +option is enabled and the \Opt{fancyLists} option is disabled. The macro +receives a single numeric argument that corresponds to the item number. % \end{markdown} % @@ -13607,16 +14002,16 @@ arguments: the scalar key in the parent structure, cast to a string following % \fi % % \begin{macrocode} -\def\markdownRendererJekyllDataMappingBegin{% - \markdownRendererJekyllDataMappingBeginPrototype}% +\def\markdownRendererOlItemWithNumber{% + \markdownRendererOlItemWithNumberPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { jekyllDataMappingBegin } + { olItemWithNumber } \prop_gput:Nnn \g_@@_renderer_arities_prop - { jekyllDataMappingBegin } - { 2 } + { olItemWithNumber } + { 1 } \ExplSyntaxOff % \end{macrocode} % \par @@ -13628,9 +14023,10 @@ arguments: the scalar key in the parent structure, cast to a string following % % \begin{markdown} -The \mdef{markdownRendererJekyllDataMappingEnd} macro represents the -end of a mapping in a \acro{yaml} document. This macro will only be produced -when the \Opt{jekyllData} option is enabled. The macro receives no arguments. +The \mdef{markdownRendererFancyOlItem} macro represents an item in a fancy +ordered list. This macro will only be produced, when the \Opt{startNumber} +option is disabled and the \Opt{fancyLists} option is enabled. The macro receives +no arguments. % \end{markdown} % @@ -13640,15 +14036,15 @@ when the \Opt{jekyllData} option is enabled. The macro receives no arguments. % \fi % % \begin{macrocode} -\def\markdownRendererJekyllDataMappingEnd{% - \markdownRendererJekyllDataMappingEndPrototype}% +\def\markdownRendererFancyOlItem{% + \markdownRendererFancyOlItemPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { jekyllDataMappingEnd } + { fancyOlItem } \prop_gput:Nnn \g_@@_renderer_arities_prop - { jekyllDataMappingEnd } + { fancyOlItem } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -13661,11 +14057,9 @@ when the \Opt{jekyllData} option is enabled. The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererJekyllDataSequenceBegin} macro represents the -beginning of a sequence in a \acro{yaml} document. This macro will only be -produced when the \Opt{jekyllData} option is enabled. The macro receives two -arguments: the scalar key in the parent structure, cast to a string following -\acro{yaml} serialization rules, and the number of items in the sequence. +The \mdef{markdownRendererFancyOlItemEnd} macro represents the end of an item in +a fancy ordered list. This macro will only be produced, when the \Opt{fancyLists} +option is enabled. The macro receives no arguments. % \end{markdown} % @@ -13675,16 +14069,16 @@ arguments: the scalar key in the parent structure, cast to a string following % \fi % % \begin{macrocode} -\def\markdownRendererJekyllDataSequenceBegin{% - \markdownRendererJekyllDataSequenceBeginPrototype}% +\def\markdownRendererFancyOlItemEnd{% + \markdownRendererFancyOlItemEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { jekyllDataSequenceBegin } + { fancyOlItemEnd } \prop_gput:Nnn \g_@@_renderer_arities_prop - { jekyllDataSequenceBegin } - { 2 } + { fancyOlItemEnd } + { 0 } \ExplSyntaxOff % \end{macrocode} % \par @@ -13696,9 +14090,10 @@ arguments: the scalar key in the parent structure, cast to a string following % % \begin{markdown} -The \mdef{markdownRendererJekyllDataSequenceEnd} macro represents the -end of a sequence in a \acro{yaml} document. This macro will only be produced -when the \Opt{jekyllData} option is enabled. The macro receives no arguments. +The \mdef{markdownRendererFancyOlItemWithNumber} macro represents an item in a +fancy ordered list. This macro will only be produced, when the \Opt{startNumber} +and \Opt{fancyLists} options are enabled. The macro receives a single numeric +argument that corresponds to the item number. % \end{markdown} % @@ -13708,16 +14103,16 @@ when the \Opt{jekyllData} option is enabled. The macro receives no arguments. % \fi % % \begin{macrocode} -\def\markdownRendererJekyllDataSequenceEnd{% - \markdownRendererJekyllDataSequenceEndPrototype}% +\def\markdownRendererFancyOlItemWithNumber{% + \markdownRendererFancyOlItemWithNumberPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { jekyllDataSequenceEnd } + { fancyOlItemWithNumber } \prop_gput:Nnn \g_@@_renderer_arities_prop - { jekyllDataSequenceEnd } - { 0 } + { fancyOlItemWithNumber } + { 1 } \ExplSyntaxOff % \end{macrocode} % \par @@ -13729,11 +14124,10 @@ when the \Opt{jekyllData} option is enabled. The macro receives no arguments. % % \begin{markdown} -The \mdef{markdownRendererJekyllDataBoolean} macro represents a boolean scalar -value in a \acro{yaml} document. This macro will only be produced when the -\Opt{jekyllData} option is enabled. The macro receives two arguments: the -scalar key in the parent structure, and the scalar value, both cast to a string -following \acro{yaml} serialization rules. +The \mdef{markdownRendererOlEnd} macro represents the end of an ordered list +that contains an item with several paragraphs of text (the list is not +tight). This macro will only be produced, when the \Opt{fancyLists} option is +disabled. The macro receives no arguments. % \end{markdown} % @@ -13743,16 +14137,16 @@ following \acro{yaml} serialization rules. % \fi % % \begin{macrocode} -\def\markdownRendererJekyllDataBoolean{% - \markdownRendererJekyllDataBooleanPrototype}% +\def\markdownRendererOlEnd{% + \markdownRendererOlEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { jekyllDataBoolean } + { olEnd } \prop_gput:Nnn \g_@@_renderer_arities_prop - { jekyllDataBoolean } - { 2 } + { olEnd } + { 0 } \ExplSyntaxOff % \end{macrocode} % \par @@ -13764,11 +14158,11 @@ following \acro{yaml} serialization rules. % % \begin{markdown} -The \mdef{markdownRendererJekyllDataNumber} macro represents a numeric scalar -value in a \acro{yaml} document. This macro will only be produced when the -\Opt{jekyllData} option is enabled. The macro receives two arguments: the -scalar key in the parent structure, and the scalar value, both cast to a string -following \acro{yaml} serialization rules. +The \mdef{markdownRendererOlEndTight} macro represents the end of an ordered +list that contains no item with several paragraphs of text (the list is +tight). This macro will only be produced, when the \Opt{tightLists} option is +enabled and the \Opt{fancyLists} option is disabled. The macro receives no +arguments. % \end{markdown} % @@ -13778,16 +14172,16 @@ following \acro{yaml} serialization rules. % \fi % % \begin{macrocode} -\def\markdownRendererJekyllDataNumber{% - \markdownRendererJekyllDataNumberPrototype}% +\def\markdownRendererOlEndTight{% + \markdownRendererOlEndTightPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { jekyllDataNumber } + { olEndTight } \prop_gput:Nnn \g_@@_renderer_arities_prop - { jekyllDataNumber } - { 2 } + { olEndTight } + { 0 } \ExplSyntaxOff % \end{macrocode} % \par @@ -13799,11 +14193,10 @@ following \acro{yaml} serialization rules. % % \begin{markdown} -The \mdef{markdownRendererJekyllDataString} macro represents a string scalar -value in a \acro{yaml} document. This macro will only be produced when the -\Opt{jekyllData} option is enabled. The macro receives two arguments: the -scalar key in the parent structure, cast to a string following \acro{yaml} -serialization rules, and the scalar value. +The \mdef{markdownRendererFancyOlEnd} macro represents the end of a fancy +ordered list that contains an item with several paragraphs of text (the list +is not tight). This macro will only be produced, when the \Opt{fancyLists} +option is enabled. The macro receives no arguments. % \end{markdown} % @@ -13813,16 +14206,16 @@ serialization rules, and the scalar value. % \fi % % \begin{macrocode} -\def\markdownRendererJekyllDataString{% - \markdownRendererJekyllDataStringPrototype}% +\def\markdownRendererFancyOlEnd{% + \markdownRendererFancyOlEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { jekyllDataString } + { fancyOlEnd } \prop_gput:Nnn \g_@@_renderer_arities_prop - { jekyllDataString } - { 2 } + { fancyOlEnd } + { 0 } \ExplSyntaxOff % \end{macrocode} % \par @@ -13834,59 +14227,79 @@ serialization rules, and the scalar value. % % \begin{markdown} -The \mdef{markdownRendererJekyllDataEmpty} macro represents an empty scalar -value in a \acro{yaml} document. This macro will only be produced when the -\Opt{jekyllData} option is enabled. The macro receives one argument: the -scalar key in the parent structure, cast to a string following \acro{yaml} -serialization rules. +The \mdef{markdownRendererFancyOlEndTight} macro represents the end of a +fancy ordered list that contains no item with several paragraphs of text (the +list is tight). This macro will only be produced, when the \Opt{fancyLists} +and \Opt{tightLists} options are enabled. 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\markdownOptionTightLists{true} +\def\markdownOptionStartNumber{true} + +\def\markdownRendererInterblockSeparator{} +\def\markdownRendererOlBeginTight{ (} +\def\markdownRendererOlItemWithNumber#1{% + \ifnum #1=1\relax + the first + \else + \ifnum #1=2\relax + , the second + \else + , and the third + \fi + \fi +} +\def\markdownRendererOlItemEnd{} +\def\markdownRendererOlEndTight{).} + +\markdownBegin +This is a tight list + +1. item +2. item +3. item +\markdownEnd + +\def\markdownRendererInterblockSeparator{% + :\par + \def\markdownRendererInterblockSeparator{\par}% +} +\def\markdownRendererOlBegin{} +\def\markdownRendererOlItemWithNumber#1{% + #1.\kern 0.5em% + This is the + \ifnum #1=1\relax + first + \else + \ifnum #1=2\relax + second + \else + third + \fi + \fi +} +\def\markdownRendererOlItemEnd{.\par} +\def\markdownRendererOlEnd{} + +\markdownBegin +This is a loose list -% See also Section <#sec:expl3yamlmetadata> for the description of the -% high-level expl3 interface that you can also use to react to \acro{yaml} -% metadata. -% -% \end{markdown} -% -% \iffalse -% -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererJekyllDataEmpty{% - \markdownRendererJekyllDataEmptyPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { jekyllDataEmpty } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { jekyllDataEmpty } - { 1 } -\ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -% -%<*manual-tokens> +1. item -##### Plain \TeX{} Example {.unnumbered} +2. item -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\input markdown -\def\markdownOptionJekyllData{true} -\def\markdownRendererJekyllDataString#1#2{\gdef\name{#2}} -\def\markdownRendererJekyllDataNumber#1#2{\gdef\age{#2}} -\def\markdownRendererJekyllDataEnd{% - \name{} is \age{} years old.} -\markdownBegin ---- -name: Jane Doe -age: 99 ---- +3. item \markdownEnd + \bye ``````` Next, invoke LuaTeX from the terminal: @@ -13896,7 +14309,15 @@ luatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> Jane Doe is 99 years old. +> This is a tight list (the first item, the second item, and the third item). +> +> This is a loose list: +> +> 1. This is the first item. +> +> 2. This is the second item. +> +> 3. This is the third item. ##### \LaTeX{} Example {.unnumbered} @@ -13904,22 +14325,66 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \documentclass{article} -\usepackage[jekyllData]{markdown} -\markdownSetup{ +\usepackage[tightLists, startNumber]{markdown} +\begin{document} + +\begin{markdown*}{ renderers = { - jekyllDataString = {\gdef\name{#2}}, - jekyllDataNumber = {\gdef\age{#2}}, - jekyllDataEnd = {\name{} is \age{} years old.}, - } + interblockSeparator = {}, + olBeginTight = { (}, + olItemWithNumber = {% + \ifnum #1=1\relax + the first + \else + \ifnum #1=2\relax + , the second + \else + , and the third + \fi + \fi + }, + olItemEnd = {}, + olEndTight = {).}, + }, } -\begin{document} +This is a tight list -\begin{markdown} ---- -name: Jane Doe -age: 99 ---- -\end{markdown} +1. item +2. item +3. item +\end{markdown*} + +\begin{markdown*}{ + renderers = { + interblockSeparator = {% + :\par + \def\markdownRendererInterblockSeparator{\par}% + }, + olBeginTight = {\begin{enumerate}}, + olItemWithNumber = {% + \item This is the + \ifnum #1=1\relax + first + \else + \ifnum #1=2\relax + second + \else + third + \fi + \fi + }, + olItemEnd = {.}, + olEnd = {\end{enumerate}}, + }, +} +This is a loose list + +1. item + +2. item + +3. item +\end{markdown*} \end{document} ``````` @@ -13930,7 +14395,15 @@ lualatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> Jane Doe is 99 years old. +> This is a tight list (the first item, the second item, and the third item). +> +> This is a loose list: +> +> 1. This is the first item. +> +> 2. This is the second item. +> +> 3. This is the third item. ##### \Hologo{ConTeXt} Example {.unnumbered} @@ -13938,18 +14411,66 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \usemodule[t][markdown] -\setupmarkdown[jekyllData = yes] -\def\markdownRendererJekyllDataString#1#2{\gdef\name{#2}} -\def\markdownRendererJekyllDataNumber#1#2{\gdef\age{#2}} -\def\markdownRendererJekyllDataEnd{% - \name{} is \age{} years old.} +\setupmarkdown + [ + tightLists = yes, + startNumber = yes, + ] \starttext +\def\markdownRendererInterblockSeparator{} +\def\markdownRendererOlBeginTight{ (} +\def\markdownRendererOlItemWithNumber#1{% + \ifnum #1=1\relax + the first + \else + \ifnum #1=2\relax + , the second + \else + , and the third + \fi + \fi +} +\def\markdownRendererOlItemEnd{} +\def\markdownRendererOlEndTight{).} + \startmarkdown ---- -name: Jane Doe -age: 99 ---- +This is a tight list + +1. item +2. item +3. item +\stopmarkdown + +\def\markdownRendererInterblockSeparator{% + :\par + \def\markdownRendererInterblockSeparator{\par}% +} +\def\markdownRendererOlBegin{\startitemize} +\def\markdownRendererOlItemWithNumber#1{% + \sym{#1.} + This is the + \ifnum #1=1\relax + first + \else + \ifnum #1=2\relax + second + \else + third + \fi + \fi +} +\def\markdownRendererOlItemEnd{.\par} +\def\markdownRendererOlEnd{\stopitemize} + +\startmarkdown +This is a loose list + +1. item + +2. item + +3. item \stopmarkdown \stoptext @@ -13961,67 +14482,31 @@ context document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> Jane Doe is 99 years old. - -% \fi -% -% \begin{markdown} - -#### Heading Renderers -The \mdef{markdownRendererHeadingOne} macro represents a first level heading. -The macro receives a single argument that corresponds to the heading text. - -% \end{markdown} -% -% \iffalse -% -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererHeadingOne{% - \markdownRendererHeadingOnePrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { headingOne } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { headingOne } - { 1 } -\ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -% -%<*manual-tokens> -% \fi -% -% \begin{markdown} - -The \mdef{markdownRendererHeadingTwo} macro represents a second level -heading. The macro receives a single argument that corresponds to the heading -text. - -% \end{markdown} -% -% \iffalse +> This is a tight list (the first item, the second item, and the third item). +> +> This is a loose list: +> +> 1. This is the first item. +> +> 2. This is the second item. +> +> 3. This is the third item. + % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererHeadingTwo{% - \markdownRendererHeadingTwoPrototype}% +\def\markdownRendererFancyOlEndTight{% + \markdownRendererFancyOlEndTightPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { headingTwo } + { fancyOlEndTight } \prop_gput:Nnn \g_@@_renderer_arities_prop - { headingTwo } - { 1 } + { fancyOlEndTight } + { 0 } \ExplSyntaxOff % \end{macrocode} % \par @@ -14033,60 +14518,91 @@ text. % % \begin{markdown} -The \mdef{markdownRendererHeadingThree} macro represents a third level -heading. The macro receives a single argument that corresponds to the heading -text. +#### 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 -% -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererHeadingThree{% - \markdownRendererHeadingThreePrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { headingThree } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { headingThree } - { 1 } -\ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -% -%<*manual-tokens> -% \fi -% -% \begin{markdown} -The \mdef{markdownRendererHeadingFour} macro represents a fourth level -heading. The macro receives a single argument that corresponds to the heading -text. +##### \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*. -% \end{markdown} -% -% \iffalse % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererHeadingFour{% - \markdownRendererHeadingFourPrototype}% +\def\markdownRendererCite{% + \markdownRendererCitePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { headingFour } + { cite } \prop_gput:Nnn \g_@@_renderer_arities_prop - { headingFour } + { cite } { 1 } \ExplSyntaxOff % \end{macrocode} @@ -14099,9 +14615,12 @@ text. % % \begin{markdown} -The \mdef{markdownRendererHeadingFive} macro represents a fifth level -heading. The macro receives a single argument that corresponds to the heading -text. +#### 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 +raw span contents and the raw attribute that designates the format of the +inline raw span. This macro will only be produced, when the \Opt{rawAttribute} +option is enabled. % \end{markdown} % @@ -14111,16 +14630,16 @@ text. % \fi % % \begin{macrocode} -\def\markdownRendererHeadingFive{% - \markdownRendererHeadingFivePrototype}% +\def\markdownRendererInputRawInline{% + \markdownRendererInputRawInlinePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { headingFive } + { inputRawInline } \prop_gput:Nnn \g_@@_renderer_arities_prop - { headingFive } - { 1 } + { inputRawInline } + { 2 } \ExplSyntaxOff % \end{macrocode} % \par @@ -14132,129 +14651,77 @@ text. % % \begin{markdown} -The \mdef{markdownRendererHeadingSix} macro represents a sixth level -heading. The macro receives a single argument that corresponds to the heading -text. +The \mdef{markdownRendererInputRawBlock} macro represents a raw block. The +macro receives two arguments: the filename of a file contaning the raw block +and the raw attribute that designates the format of the raw block. This macro +will only be produced, when the \Opt{rawAttribute} and \Opt{fencedCode} options +are enabled. % \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\markdownRendererInterblockSeparator{} -\def\markdownRendererHeadingOne{1} -\def\markdownRendererHeadingTwo{2} -\def\markdownRendererHeadingThree{3} -\def\markdownRendererHeadingFour{4} -\def\markdownRendererHeadingFive{5} -\def\markdownRendererHeadingSix{6} -\markdownBegin -###### -##### -##### -### -###### -\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: - -> 65536 - ##### \LaTeX{} Example {.unnumbered} Using a text editor, create a text document named `document.tex` with the following content: -``` tex +```` tex \documentclass{article} -\usepackage{markdown} +\usepackage[rawAttribute, fencedCode]{markdown} +\usepackage{expl3} +\ExplSyntaxOn +\cs_new:Nn + \display_raw_content:nn + { + % If the raw attribute is TeX, execute the content as a TeX document. + \str_if_eq:nnTF + { #2 } + { tex } + { \markdownEscape { #1 } } + % Otherwise, ignore the content. + { } + } \markdownSetup{ renderers = { - interblockSeparator = {}, - headingOne = 1, - headingTwo = 2, - headingThree = 3, - headingFour = 4, - headingFive = 5, - headingSix = 6, + rawInline = { \display_raw_content:nn { #1 } { #2 } }, + rawBlock = { \display_raw_content:nn { #1 } { #2 } } }, } +\ExplSyntaxOff \begin{document} \begin{markdown} -###### -##### -##### -### -###### -\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: - -> 65536 - -##### \Hologo{ConTeXt} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\usemodule[t][markdown] -\def\markdownRendererInterblockSeparator{} -\def\markdownRendererHeadingOne{1} -\def\markdownRendererHeadingTwo{2} -\def\markdownRendererHeadingThree{3} -\def\markdownRendererHeadingFour{4} -\def\markdownRendererHeadingFive{5} -\def\markdownRendererHeadingSix{6} -\starttext -\startmarkdown -###### -##### -##### -### -###### -\stopmarkdown -\stoptext -``````` +`$H_2 O$`{=tex} is a liquid. + +``` {=html} +

Here is some HTML content that will be ignored.

+``` +\end{markdown} +\end{document} +```` Next, invoke LuaTeX from the terminal: ``` sh -context document.tex +lualatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the following text: -> 65536 +> H~2~O is a liquid. % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererHeadingSix{% - \markdownRendererHeadingSixPrototype}% +\def\markdownRendererInputRawBlock{% + \markdownRendererInputRawBlockPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { headingSix } + { inputRawBlock } \prop_gput:Nnn \g_@@_renderer_arities_prop - { headingSix } - { 1 } + { inputRawBlock } + { 2 } \ExplSyntaxOff % \end{macrocode} % \par @@ -14266,9 +14733,27 @@ following text: % % \begin{markdown} -#### Thematic Break Renderer -The \mdef{markdownRendererThematicBreak} macro represents a thematic break. -The macro receives no arguments. +#### Special Character Renderers +The following macros replace any special plain \TeX{} characters, including +% \iffalse +the active pipe character (`|`) of \Hologo{ConTeXt}, in the input text: + +- \mdef{markdownRendererAmpersand} replaces the ampersand (`&`). +- \mdef{markdownRendererBackslash} replaces the backslash (`\`). +- \mdef{markdownRendererCircumflex} replaces the circumflex (`^`). +- \mdef{markdownRendererDollarSign} replaces the dollar sign (`$`). +- \mdef{markdownRendererHash} replaces the hash sign (`#`). +- \mdef{markdownRendererLeftBrace} replaces the left brace (`{`). +- \mdef{markdownRendererPercentSign} replaces the percent sign (`%`). +- \mdef{markdownRendererPipe} replaces the pipe character (`|`). +- \mdef{markdownRendererRightBrace} replaces the right brace (`}`). +- \mdef{markdownRendererTilde} replaces the tilde (`~`). +- \mdef{markdownRendererUnderscore} replaces the underscore (`_`). + +% \fi +% the active pipe character (`|`) of \Hologo{ConTeXt}, in the input text. +% These macros will only be produced, when the \Opt{hybrid} option is +% `false`. % \end{markdown} % @@ -14277,16 +14762,13 @@ The macro receives no arguments. ##### Plain \TeX{} Example {.unnumbered} Using a text editor, create a text document named `document.tex` with the -following content: +following content. We will make the tilde behave as if it were written in +\TeX{}, where it represents a non-breaking space. ``` tex \input markdown -\def\markdownRendererThematicBreak{\vfil\break} +\def\markdownRendererTilde{~} \markdownBegin -This is the first page. - -*** - -This is the second page. +Bartel~Leendert van~der~Waerden \markdownEnd \bye ``````` @@ -14295,33 +14777,26 @@ Next, invoke LuaTeX from the terminal: luatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the -following text: +following text, where the middot (`·`) denotes a non-breaking space: -> This is the first page. -> -> *** -> -> This is the second page. +> Bartel·Leendert van·der·Waerden ##### \LaTeX{} Example {.unnumbered} Using a text editor, create a text document named `document.tex` with the -following content: +following content. We will make the tilde behave as if it were written in +\TeX{}, where it represents a non-breaking space. ``` tex \documentclass{article} \usepackage{markdown} \markdownSetup{ renderers = { - thematicBreak = \newpage, + tilde = ~, }, } \begin{document} \begin{markdown} -This is the first page. - -*** - -This is the second page. +Bartel~Leendert van~der~Waerden \end{markdown} \end{document} ``````` @@ -14330,28 +14805,21 @@ Next, invoke LuaTeX from the terminal: lualatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the -following text: +following text, where the middot (`·`) denotes a non-breaking space: -> This is the first page. -> -> *** -> -> This is the second page. +> Bartel·Leendert van·der·Waerden ##### \Hologo{ConTeXt} Example {.unnumbered} Using a text editor, create a text document named `document.tex` with the -following content: +following content. We will make the tilde behave as if it were written in +\TeX{}, where it represents a non-breaking space. ``` tex \usemodule[t][markdown] -\def\markdownRendererThematicBreak{\page[yes]} +\def\markdownRendererTilde{~} \starttext \startmarkdown -This is the first page. - -*** - -This is the second page. +Bartel~Leendert van~der~Waerden \stopmarkdown \stoptext ``````` @@ -14360,68 +14828,134 @@ Next, invoke LuaTeX from the terminal: context document.tex `````` A PDF document named `document.pdf` should be produced and contain the -following text: +following text, where the middot (`·`) denotes a non-breaking space: -> This is the first page. -> -> *** -> -> This is the second page. +> Bartel·Leendert van·der·Waerden % %<*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\markdownRendererLeftBrace{% + \markdownRendererLeftBracePrototype}% \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 } + { leftBrace } \prop_gput:Nnn \g_@@_renderer_arities_prop - { horizontalRule } + { leftBrace } { 0 } +\ExplSyntaxOff +\def\markdownRendererRightBrace{% + \markdownRendererRightBracePrototype}% +\ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { thematicBreak } + { rightBrace } \prop_gput:Nnn \g_@@_renderer_arities_prop - { thematicBreak } + { rightBrace } + { 0 } +\ExplSyntaxOff +\def\markdownRendererDollarSign{% + \markdownRendererDollarSignPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { dollarSign } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { dollarSign } + { 0 } +\ExplSyntaxOff +\def\markdownRendererPercentSign{% + \markdownRendererPercentSignPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { percentSign } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { percentSign } + { 0 } +\ExplSyntaxOff +\def\markdownRendererAmpersand{% + \markdownRendererAmpersandPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { ampersand } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { ampersand } + { 0 } +\ExplSyntaxOff +\def\markdownRendererUnderscore{% + \markdownRendererUnderscorePrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { underscore } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { underscore } + { 0 } +\ExplSyntaxOff +\def\markdownRendererHash{% + \markdownRendererHashPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { hash } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { hash } + { 0 } +\ExplSyntaxOff +\def\markdownRendererCircumflex{% + \markdownRendererCircumflexPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { circumflex } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { circumflex } + { 0 } +\ExplSyntaxOff +\def\markdownRendererBackslash{% + \markdownRendererBackslashPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { backslash } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { backslash } + { 0 } +\ExplSyntaxOff +\def\markdownRendererTilde{% + \markdownRendererTildePrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { tilde } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { tilde } + { 0 } +\ExplSyntaxOff +\def\markdownRendererPipe{% + \markdownRendererPipePrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { pipe } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { pipe } { 0 } \ExplSyntaxOff % \end{macrocode} @@ -14432,12 +14966,13 @@ following text: %<*manual-tokens> % \fi % -% \begin{markdown} - -#### Note Renderer -The \mdef{markdownRendererNote} macro represents a note. This macro -will only be produced, when the \Opt{notes} option is enabled. The -macro receives a single argument that corresponds to the note text. +% \begin{markdown} + +#### Strike-Through Renderer +The \mdef{markdownRendererStrikeThrough} 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 \Opt{strikeThrough} +option is enabled. % \end{markdown} % @@ -14449,14 +14984,11 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \input markdown -\def\markdownOptionNotes{true} -\def\markdownRendererNote#1{ (and \lowercase{#1})} +\def\markdownOptionStrikeThrough{true} +\input soulutf8.sty +\def\markdownRendererStrikeThrough#1{\st{#1}} \markdownBegin -This is some text[^1] and this is some other text[^2]. - - [^1]: this is a note - - [^2]: this is some other note +This is ~~a lunar roving vehicle~~ strike-through text. \markdownEnd \bye ``````` @@ -14467,8 +14999,7 @@ luatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> This is some text (and this is a note) and this is some other -> text (and this is some other note). +> This is ~~a lunar roving vehicle~~ strike-through text. ##### \LaTeX{} Example {.unnumbered} @@ -14476,19 +15007,16 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \documentclass{article} -\usepackage[notes]{markdown} +\usepackage[strikeThrough]{markdown} +\usepackage{soulutf8} \markdownSetup{ renderers = { - note = { (and \MakeLowercase{#1})}, + strikeThrough = {\st{#1}}, }, } \begin{document} \begin{markdown} -This is some text[^1] and this is some other text[^2]. - - [^1]: this is a note - - [^2]: this is some other note +This is ~~a lunar roving vehicle~~ strike-through text. \end{markdown} \end{document} ``````` @@ -14499,8 +15027,7 @@ lualatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> This is some text (and this is a note) and this is some other -> text (and this is some other note). +> This is ~~a lunar roving vehicle~~ strike-through text. ##### \Hologo{ConTeXt} Example {.unnumbered} @@ -14508,15 +15035,11 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \usemodule[t][markdown] -\setupmarkdown[notes = yes] -\def\markdownRendererNote#1{ (and \lowercase{#1})} +\setupmarkdown[strikeThrough = yes] +\def\markdownRendererStrikeThrough#1{\overstrikes{#1}} \starttext \startmarkdown -This is some text[^1] and this is some other text[^2]. - - [^1]: this is a note - - [^2]: this is some other note +This is ~~a lunar roving vehicle~~ strike-through text. \stopmarkdown \stoptext ``````` @@ -14527,63 +15050,22 @@ context document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> This is some text (and this is a note) and this is some other -> text (and this is some other note). +> This is ~~a lunar roving vehicle~~ strike-through text. % %<*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\markdownRendererStrikeThrough{% + \markdownRendererStrikeThroughPrototype}% \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 } + { strikeThrough } \prop_gput:Nnn \g_@@_renderer_arities_prop - { note } + { strikeThrough } { 1 } \ExplSyntaxOff % \end{macrocode} @@ -14596,63 +15078,53 @@ 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. +#### Subscript Renderer +The \mdef{markdownRendererSubscript} 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 \Opt{subscripts} +option is enabled. % \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\markdownOptionSubscripts{true} +\def\markdownRendererSubscript#1{ (#1 moles) and } +\markdownBegin +H~2~O is a liquid. +\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: + +> H (2 moles) and O is a liquid. + ##### \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 +\usepackage[subscripts]{markdown} \markdownSetup{ renderers = { - cite = {% - \citationsCounter=1% - \citationsTotal=#1% - This is - \expandafter\citations - }, + subscript = { (#1 moles) and }, }, } \begin{document} \begin{markdown} -[see @abrahams90, pp. 12; @eijkhout91, pp. 34] +H~2~O is a liquid. \end{markdown} \end{document} ``````` @@ -14663,26 +15135,46 @@ 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*. +> H (2 moles) and O is a liquid. + +##### \Hologo{ConTeXt} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\usemodule[t][markdown] +\setupmarkdown[subscripts = yes] +\def\markdownRendererSubscript#1{ (#1 moles) and } +\starttext +\startmarkdown +H~2~O is a liquid. +\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: + +> H (2 moles) and O is a liquid. % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererCite{% - \markdownRendererCitePrototype}% +\def\markdownRendererSubscript{% + \markdownRendererSubscriptPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { cite } + { subscript } \prop_gput:Nnn \g_@@_renderer_arities_prop - { cite } + { subscript } { 1 } -\ExplSyntaxOff % \end{macrocode} % \par % @@ -14693,59 +15185,53 @@ 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. +#### Superscript Renderer +The \mdef{markdownRendererSuperscript} 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 \Opt{superscripts} +option is enabled. % \end{markdown} % % \iffalse -##### \LaTeX{} Example {.unnumbered} +##### Plain \TeX{} 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 +\input markdown +\def\markdownOptionSuperscripts{true} +\def\markdownRendererSuperscript#1{ taken to the power of #1} +\markdownBegin +2^10^ is 1024. +\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: + +> 2 taken to the power of 10 is 1024. + +##### \LaTeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\documentclass{article} +\usepackage[superscripts]{markdown} \markdownSetup{ renderers = { - textCite = {% - \citationsCounter=1% - \citationsTotal=#1% - This is - \expandafter\citations - }, + superscript = { taken to the power of #1}, }, } \begin{document} \begin{markdown} -@abrahams90 [pp. 12; also @eijkhout91] +2^10^ is 1024. \end{markdown} \end{document} ``````` @@ -14756,23 +15242,45 @@ 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*. +> 2 taken to the power of 10 is 1024. + +##### \Hologo{ConTeXt} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\usemodule[t][markdown] +\setupmarkdown[superscripts = yes] +\def\markdownRendererSuperscript#1{ taken to the power of #1} +\starttext +\startmarkdown +2^10^ is 1024. +\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: + +> 2 taken to the power of 10 is 1024. % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererTextCite{% - \markdownRendererTextCitePrototype}% +\def\markdownRendererSuperscript{% + \markdownRendererSuperscriptPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { textCite } + { superscript } \prop_gput:Nnn \g_@@_renderer_arities_prop - { textCite } + { superscript } { 1 } \ExplSyntaxOff % \end{macrocode} @@ -14912,16 +15420,11 @@ following text: % % \begin{markdown} -#### HTML Comment Renderers - -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. +#### 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} % @@ -14933,91 +15436,72 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \documentclass{article} -\usepackage[html]{markdown} -\usepackage{marginnote} +\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 = { - inlineHtmlComment = {\marginnote{#1}}, - blockHtmlCommentBegin = {\begin{quote}}, - blockHtmlCommentEnd = {\end{quote}}, + textCite = {% + \citationsCounter=1% + \citationsTotal=#1% + This is + \expandafter\citations + }, }, } \begin{document} \begin{markdown} -A useful use of inline HTML comments are side notes. - - -We can render block HTML comments as blockquotes: - - +@abrahams90 [pp. 12; also @eijkhout91] \end{markdown} \end{document} ``````` Next, invoke LuaTeX from the terminal: ``` sh lualatex document.tex -lualatex document.tex `````` 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: +following text: -> Side notes are displayed in the horizontal margins next to the relevant -> passages, which makes them *easier for the reader to find* than notes. +> This is a text citation *abrahams90* with a postfix *pp. 12*, +> and a citation *eijkhout91* with a prefix *also*. % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererInlineHtmlComment{% - \markdownRendererInlineHtmlCommentPrototype}% +\def\markdownRendererTextCite{% + \markdownRendererTextCitePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { inlineHtmlComment } + { textCite } \prop_gput:Nnn \g_@@_renderer_arities_prop - { inlineHtmlComment } + { textCite } { 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 % @@ -15028,83 +15512,163 @@ The horizontal margins should contain the following text: % % \begin{markdown} -#### HTML Tag and Element Renderers - -The \mdef{markdownRendererInlineHtmlTag} macro represents an opening, closing, -or empty inline \acro{HTML} tag. 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} tag. - -The \mdef{markdownRendererInputBlockHtmlElement} macro represents a block -\acro{HTML} element. This macro will only be produced, when the \Opt{html} -option is enabled. The macro receives a single argument that filename of a file -containing the contents of the \acro{HTML} element. +#### Thematic Break Renderer +The \mdef{markdownRendererThematicBreak} macro represents a thematic 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\markdownRendererThematicBreak{\vfil\break} +\markdownBegin +This is the first page. + +*** + +This is the second page. +\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 the first page. +> +> *** +> +> This is the second page. + ##### \LaTeX{} Example {.unnumbered} Using a text editor, create a text document named `document.tex` with the following content: ``` tex \documentclass{article} -\usepackage[html]{markdown} -\usepackage{marginnote} -\usepackage{verbatim} +\usepackage{markdown} \markdownSetup{ renderers = { - inlineHtmlTag = {\textbf{#1}}, - inputBlockHtmlElement = {\verbatiminput{#1}}, + thematicBreak = \newpage, }, } \begin{document} \begin{markdown} -_Hello,_ world!
+This is the first page. -
_Hello,_ world!
+*** + +This is the second page. \end{markdown} \end{document} ``````` Next, invoke LuaTeX from the terminal: ``` sh lualatex document.tex -lualatex document.tex `````` A PDF document named `document.pdf` should be produced and contain the -following body text: +following text: -> ****_Hello,_ world!**
** +> This is the first page. > ->
_Hello,_ world!
+> *** +> +> This is the second page. + +##### \Hologo{ConTeXt} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\usemodule[t][markdown] +\def\markdownRendererThematicBreak{\page[yes]} +\starttext +\startmarkdown +This is the first page. + +*** + +This is the second page. +\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: + +> This is the first page. +> +> *** +> +> This is the second page. % %<*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\markdownRendererInlineHtmlTag{% - \markdownRendererInlineHtmlTagPrototype}% \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 - { inlineHtmlTag } + { horizontalRule } \prop_gput:Nnn \g_@@_renderer_arities_prop - { inlineHtmlTag } - { 1 } -\ExplSyntaxOff -\def\markdownRendererInputBlockHtmlElement{% - \markdownRendererInputBlockHtmlElementPrototype}% -\ExplSyntaxOn + { horizontalRule } + { 0 } \seq_gput_right:Nn \g_@@_renderers_seq - { inputBlockHtmlElement } + { thematicBreak } \prop_gput:Nnn \g_@@_renderer_arities_prop - { inputBlockHtmlElement } - { 1 } + { thematicBreak } + { 0 } \ExplSyntaxOff % \end{macrocode} % \par @@ -15116,25 +15680,13 @@ following body text: % % \begin{markdown} -#### Attribute Renderers -The following macros are only produced, when the \Opt{headerAttributes} option -is enabled. - -\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}. - -\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}. - -\mdef{markdownRendererAttributeKeyValue} represents a HTML attribute in the form -\meta{key}`=`\meta{value} that is neither an identifier nor a class name. -The macro receives two attributes that correspond to the \meta{key} and the -\meta{value}, respectively. +#### Tickbox Renderers +The macros named \mdef{markdownRendererTickedBox}, +\mdef{markdownRendererHalfTickedBox}, and \mdef{markdownRendererUntickedBox} +represent ticked and unticked boxes, respectively. These macros will either be +produced, when the \Opt{taskLists} option is enabled, or 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. % \end{markdown} % @@ -15146,35 +15698,17 @@ Using a text editor, create a text document named `document.tex` with the following content: ``` tex \documentclass{article} -\usepackage[headerAttributes, underscores=false]{markdown} +\usepackage[taskLists]{markdown} \markdownSetup{ renderers = { - attributeIdentifier = {% - \par - \emph{(Identifier: #1)} - \par - }, - attributeClassName = {% - \par - \emph{(Class name: #1)} - \par - }, - attributeKeyValue = {% - \par - \emph{(Key: #1, Value: #2)} - \par - }, + untickedBox = No, + tickedBox = Yes, }, } \begin{document} \begin{markdown} - -# First top-level heading {jane=doe} - -## A subheading {#identifier} - -# Second top-level heading {.class_name} - +- [ ] you can't. +- [x] I can! \end{markdown} \end{document} ``````` @@ -15185,55 +15719,72 @@ lualatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> # First top-level heading -> -> *(Key: Jane, Value: Doe)* -> -> ## A subheading -> -> *(Identifier: identifier)* -> -> # Second top-level heading -> -> *(Class name: class\_name)* +> - No you can't. +> - Yes I can! + +##### \Hologo{ConTeXt} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\usemodule[t][markdown] +\setupmarkdown[taskLists = yes] +\def\markdownRendererUntickedBox{No} +\def\markdownRendererTickedBox{Yes} +\starttext +\startmarkdown +- [ ] you can't. +- [x] I can! +\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: + +> - No you can't. +> - Yes I can! % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererAttributeIdentifier{% - \markdownRendererAttributeIdentifierPrototype}% +\def\markdownRendererTickedBox{% + \markdownRendererTickedBoxPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { attributeIdentifier } + { tickedBox } \prop_gput:Nnn \g_@@_renderer_arities_prop - { attributeIdentifier } - { 1 } + { tickedBox } + { 0 } \ExplSyntaxOff -\def\markdownRendererAttributeClassName{% - \markdownRendererAttributeClassNamePrototype}% +\def\markdownRendererHalfTickedBox{% + \markdownRendererHalfTickedBoxPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { attributeClassName } + { halfTickedBox } \prop_gput:Nnn \g_@@_renderer_arities_prop - { attributeClassName } - { 1 } + { halfTickedBox } + { 0 } \ExplSyntaxOff -\def\markdownRendererAttributeKeyValue{% - \markdownRendererAttributeKeyValuePrototype}% +\def\markdownRendererUntickedBox{% + \markdownRendererUntickedBoxPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { attributeKeyValue } + { untickedBox } \prop_gput:Nnn \g_@@_renderer_arities_prop - { attributeKeyValue } - { 2 } + { untickedBox } + { 0 } \ExplSyntaxOff % \end{macrocode} % \par @@ -15245,99 +15796,98 @@ following text: % % \begin{markdown} -#### Header Attribute Context Renderers -The following macros are only produced, when the \Opt{headerAttributes} option -is enabled. +#### YAML Metadata Renderers {#yamlmetadatarenderers} -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 -receive no arguments. +The \mdef{markdownRendererJekyllDataBegin} macro represents the beginning of a +\acro{yaml} document. This macro will only be produced when the \Opt{jekyllData} +option is enabled. The macro receives no arguments. % \end{markdown} % % \iffalse +% +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererJekyllDataBegin{% + \markdownRendererJekyllDataBeginPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { jekyllDataBegin } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { jekyllDataBegin } + { 0 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +% +%<*manual-tokens> +% \fi +% +% \begin{markdown} + +The \mdef{markdownRendererJekyllDataEnd} macro represents the end of a +\acro{yaml} document. This macro will only be produced when the +\Opt{jekyllData} option is enabled. The macro receives no arguments. -##### \LaTeX{} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\documentclass{article} -\usepackage[headerAttributes]{markdown} -\markdownSetup{ - renderers = { - headerAttributeContextBegin = {% - \par - \emph{(The beginning of a header attribute context)} - \par - }, - headerAttributeContextBegin = {% - \par - \emph{(The end of a header attribute context)} - \par - }, - }, -} -\begin{document} -\begin{markdown} - -# First top-level heading - -## A subheading {#identifier} - -# Second top-level heading {.class_name} - -\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: - -> # First top-level heading -> -> *(The beginning of a header attribute context)* -> -> ## A subheading -> -> *(The end of a header attribute context)* -> -> *(The beginning of a header attribute context)* -> -> # Second top-level heading -> -> *(The end of a header attribute context)* - +% \end{markdown} +% +% \iffalse % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererHeaderAttributeContextBegin{% - \markdownRendererHeaderAttributeContextBeginPrototype}% +\def\markdownRendererJekyllDataEnd{% + \markdownRendererJekyllDataEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { headerAttributeContextBegin } + { jekyllDataEnd } \prop_gput:Nnn \g_@@_renderer_arities_prop - { headerAttributeContextBegin } + { jekyllDataEnd } { 0 } \ExplSyntaxOff -\def\markdownRendererHeaderAttributeContextEnd{% - \markdownRendererHeaderAttributeContextEndPrototype}% +% \end{macrocode} +% \par +% +% \iffalse +% +%<*manual-tokens> +% \fi +% +% \begin{markdown} + +The \mdef{markdownRendererJekyllDataMappingBegin} macro represents the +beginning of a mapping in a \acro{yaml} document. This macro will only be +produced when the \Opt{jekyllData} option is enabled. The macro receives two +arguments: the scalar key in the parent structure, cast to a string following +\acro{yaml} serialization rules, and the number of items in the mapping. + +% \end{markdown} +% +% \iffalse +% +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererJekyllDataMappingBegin{% + \markdownRendererJekyllDataMappingBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { headerAttributeContextEnd } + { jekyllDataMappingBegin } \prop_gput:Nnn \g_@@_renderer_arities_prop - { headerAttributeContextEnd } - { 0 } + { jekyllDataMappingBegin } + { 2 } \ExplSyntaxOff % \end{macrocode} % \par @@ -15349,105 +15899,28 @@ following text: % % \begin{markdown} -#### Strike-Through Renderer -The \mdef{markdownRendererStrikeThrough} 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 \Opt{strikeThrough} -option is enabled. +The \mdef{markdownRendererJekyllDataMappingEnd} macro represents the +end of a mapping in a \acro{yaml} document. This macro will only be produced +when the \Opt{jekyllData} option is enabled. 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\markdownOptionStrikeThrough{true} -\input soulutf8.sty -\def\markdownRendererStrikeThrough#1{\st{#1}} -\markdownBegin -This is ~~a lunar roving vehicle~~ strike-through 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 lunar roving vehicle~~ strike-through text. - -##### \LaTeX{} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\documentclass{article} -\usepackage[strikeThrough]{markdown} -\usepackage{soulutf8} -\markdownSetup{ - renderers = { - strikeThrough = {\st{#1}}, - }, -} -\begin{document} -\begin{markdown} -This is ~~a lunar roving vehicle~~ strike-through 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 lunar roving vehicle~~ strike-through text. - -##### \Hologo{ConTeXt} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\usemodule[t][markdown] -\setupmarkdown[strikeThrough = yes] -\def\markdownRendererStrikeThrough#1{\overstrikes{#1}} -\starttext -\startmarkdown -This is ~~a lunar roving vehicle~~ strike-through text. -\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: - -> This is ~~a lunar roving vehicle~~ strike-through text. - % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererStrikeThrough{% - \markdownRendererStrikeThroughPrototype}% +\def\markdownRendererJekyllDataMappingEnd{% + \markdownRendererJekyllDataMappingEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { strikeThrough } + { jekyllDataMappingEnd } \prop_gput:Nnn \g_@@_renderer_arities_prop - { strikeThrough } - { 1 } + { jekyllDataMappingEnd } + { 0 } \ExplSyntaxOff % \end{macrocode} % \par @@ -15459,103 +15932,63 @@ following text: % % \begin{markdown} -#### Superscript Renderer -The \mdef{markdownRendererSuperscript} 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 \Opt{superscripts} -option is enabled. +The \mdef{markdownRendererJekyllDataSequenceBegin} macro represents the +beginning of a sequence in a \acro{yaml} document. This macro will only be +produced when the \Opt{jekyllData} option is enabled. The macro receives two +arguments: the scalar key in the parent structure, cast to a string following +\acro{yaml} serialization rules, and the number of items in the sequence. % \end{markdown} % % \iffalse +% +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererJekyllDataSequenceBegin{% + \markdownRendererJekyllDataSequenceBeginPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { jekyllDataSequenceBegin } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { jekyllDataSequenceBegin } + { 2 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +% +%<*manual-tokens> +% \fi +% +% \begin{markdown} -##### Plain \TeX{} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\input markdown -\def\markdownOptionSuperscripts{true} -\def\markdownRendererSuperscript#1{ taken to the power of #1} -\markdownBegin -2^10^ is 1024. -\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: - -> 2 taken to the power of 10 is 1024. - -##### \LaTeX{} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\documentclass{article} -\usepackage[superscripts]{markdown} -\markdownSetup{ - renderers = { - superscript = { taken to the power of #1}, - }, -} -\begin{document} -\begin{markdown} -2^10^ is 1024. -\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: - -> 2 taken to the power of 10 is 1024. - -##### \Hologo{ConTeXt} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\usemodule[t][markdown] -\setupmarkdown[superscripts = yes] -\def\markdownRendererSuperscript#1{ taken to the power of #1} -\starttext -\startmarkdown -2^10^ is 1024. -\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: - -> 2 taken to the power of 10 is 1024. +The \mdef{markdownRendererJekyllDataSequenceEnd} macro represents the +end of a sequence in a \acro{yaml} document. This macro will only be produced +when the \Opt{jekyllData} option is enabled. The macro receives no arguments. +% \end{markdown} +% +% \iffalse % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererSuperscript{% - \markdownRendererSuperscriptPrototype}% +\def\markdownRendererJekyllDataSequenceEnd{% + \markdownRendererJekyllDataSequenceEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { superscript } + { jekyllDataSequenceEnd } \prop_gput:Nnn \g_@@_renderer_arities_prop - { superscript } - { 1 } + { jekyllDataSequenceEnd } + { 0 } \ExplSyntaxOff % \end{macrocode} % \par @@ -15567,103 +16000,66 @@ following text: % % \begin{markdown} -#### Subscript Renderer -The \mdef{markdownRendererSubscript} 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 \Opt{subscripts} -option is enabled. +The \mdef{markdownRendererJekyllDataBoolean} macro represents a boolean scalar +value in a \acro{yaml} document. This macro will only be produced when the +\Opt{jekyllData} option is enabled. The macro receives two arguments: the +scalar key in the parent structure, and the scalar value, both cast to a string +following \acro{yaml} serialization rules. % \end{markdown} % % \iffalse +% +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererJekyllDataBoolean{% + \markdownRendererJekyllDataBooleanPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { jekyllDataBoolean } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { jekyllDataBoolean } + { 2 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +% +%<*manual-tokens> +% \fi +% +% \begin{markdown} -##### Plain \TeX{} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\input markdown -\def\markdownOptionSubscripts{true} -\def\markdownRendererSubscript#1{ (#1 moles) and } -\markdownBegin -H~2~O is a liquid. -\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: - -> H (2 moles) and O is a liquid. - -##### \LaTeX{} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\documentclass{article} -\usepackage[subscripts]{markdown} -\markdownSetup{ - renderers = { - subscript = { (#1 moles) and }, - }, -} -\begin{document} -\begin{markdown} -H~2~O is a liquid. -\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: - -> H (2 moles) and O is a liquid. - -##### \Hologo{ConTeXt} Example {.unnumbered} - -Using a text editor, create a text document named `document.tex` with the -following content: -``` tex -\usemodule[t][markdown] -\setupmarkdown[subscripts = yes] -\def\markdownRendererSubscript#1{ (#1 moles) and } -\starttext -\startmarkdown -H~2~O is a liquid. -\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: - -> H (2 moles) and O is a liquid. +The \mdef{markdownRendererJekyllDataNumber} macro represents a numeric scalar +value in a \acro{yaml} document. This macro will only be produced when the +\Opt{jekyllData} option is enabled. The macro receives two arguments: the +scalar key in the parent structure, and the scalar value, both cast to a string +following \acro{yaml} serialization rules. +% \end{markdown} +% +% \iffalse % %<*tex> % \fi % % \begin{macrocode} -\def\markdownRendererSubscript{% - \markdownRendererSubscriptPrototype}% +\def\markdownRendererJekyllDataNumber{% + \markdownRendererJekyllDataNumberPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { subscript } + { jekyllDataNumber } \prop_gput:Nnn \g_@@_renderer_arities_prop - { subscript } - { 1 } + { jekyllDataNumber } + { 2 } +\ExplSyntaxOff % \end{macrocode} % \par % @@ -15674,12 +16070,11 @@ following text: % % \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 -raw span contents and the raw attribute that designates the format of the -inline raw span. This macro will only be produced, when the \Opt{rawAttribute} -option is enabled. +The \mdef{markdownRendererJekyllDataString} macro represents a string scalar +value in a \acro{yaml} document. This macro will only be produced when the +\Opt{jekyllData} option is enabled. The macro receives two arguments: the +scalar key in the parent structure, cast to a string following \acro{yaml} +serialization rules, and the scalar value. % \end{markdown} % @@ -15689,15 +16084,15 @@ option is enabled. % \fi % % \begin{macrocode} -\def\markdownRendererInputRawInline{% - \markdownRendererInputRawInlinePrototype}% +\def\markdownRendererJekyllDataString{% + \markdownRendererJekyllDataStringPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g_@@_renderers_seq - { inputRawInline } + { jekyllDataString } \prop_gput:Nnn \g_@@_renderer_arities_prop - { inputRawInline } + { jekyllDataString } { 2 } \ExplSyntaxOff % \end{macrocode} @@ -15710,53 +16105,95 @@ option is enabled. % % \begin{markdown} -The \mdef{markdownRendererInputRawBlock} macro represents a raw block. The -macro receives two arguments: the filename of a file contaning the raw block -and the raw attribute that designates the format of the raw block. This macro -will only be produced, when the \Opt{rawAttribute} and \Opt{fencedCode} options -are enabled. +The \mdef{markdownRendererJekyllDataEmpty} macro represents an empty scalar +value in a \acro{yaml} document. This macro will only be produced when the +\Opt{jekyllData} option is enabled. The macro receives one argument: the +scalar key in the parent structure, cast to a string following \acro{yaml} +serialization rules. +% See also Section <#sec:expl3yamlmetadata> for the description of the +% high-level expl3 interface that you can also use to react to \acro{yaml} +% metadata. +% % \end{markdown} % % \iffalse +% +%<*tex> +% \fi +% +% \begin{macrocode} +\def\markdownRendererJekyllDataEmpty{% + \markdownRendererJekyllDataEmptyPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g_@@_renderers_seq + { jekyllDataEmpty } +\prop_gput:Nnn + \g_@@_renderer_arities_prop + { jekyllDataEmpty } + { 1 } +\ExplSyntaxOff +% \end{macrocode} +% \par +% +% \iffalse +% +%<*manual-tokens> + +##### Plain \TeX{} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\input markdown +\def\markdownOptionJekyllData{true} +\def\markdownRendererJekyllDataString#1#2{\gdef\name{#2}} +\def\markdownRendererJekyllDataNumber#1#2{\gdef\age{#2}} +\def\markdownRendererJekyllDataEnd{% + \name{} is \age{} years old.} +\markdownBegin +--- +name: Jane Doe +age: 99 +--- +\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: + +> Jane Doe is 99 years old. ##### \LaTeX{} Example {.unnumbered} Using a text editor, create a text document named `document.tex` with the following content: -```` tex +``` tex \documentclass{article} -\usepackage[rawAttribute, fencedCode]{markdown} -\usepackage{expl3} -\ExplSyntaxOn -\cs_new:Nn - \display_raw_content:nn - { - % If the raw attribute is TeX, execute the content as a TeX document. - \str_if_eq:nnTF - { #2 } - { tex } - { \markdownEscape { #1 } } - % Otherwise, ignore the content. - { } - } +\usepackage[jekyllData]{markdown} \markdownSetup{ renderers = { - rawInline = { \display_raw_content:nn { #1 } { #2 } }, - rawBlock = { \display_raw_content:nn { #1 } { #2 } } - }, + jekyllDataString = {\gdef\name{#2}}, + jekyllDataNumber = {\gdef\age{#2}}, + jekyllDataEnd = {\name{} is \age{} years old.}, + } } -\ExplSyntaxOff \begin{document} -\begin{markdown} -`$H_2 O$`{=tex} is a liquid. -``` {=html} -

Here is some HTML content that will be ignored.

-``` +\begin{markdown} +--- +name: Jane Doe +age: 99 +--- \end{markdown} + \end{document} -```` +``````` Next, invoke LuaTeX from the terminal: ``` sh lualatex document.tex @@ -15764,30 +16201,39 @@ lualatex document.tex A PDF document named `document.pdf` should be produced and contain the following text: -> H~2~O is a liquid. +> Jane Doe is 99 years old. + +##### \Hologo{ConTeXt} Example {.unnumbered} + +Using a text editor, create a text document named `document.tex` with the +following content: +``` tex +\usemodule[t][markdown] +\setupmarkdown[jekyllData = yes] +\def\markdownRendererJekyllDataString#1#2{\gdef\name{#2}} +\def\markdownRendererJekyllDataNumber#1#2{\gdef\age{#2}} +\def\markdownRendererJekyllDataEnd{% + \name{} is \age{} years old.} +\starttext + +\startmarkdown +--- +name: Jane Doe +age: 99 +--- +\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: + +> Jane Doe is 99 years old. -% -%<*tex> -% \fi -% -% \begin{macrocode} -\def\markdownRendererInputRawBlock{% - \markdownRendererInputRawBlockPrototype}% -\ExplSyntaxOn -\seq_gput_right:Nn - \g_@@_renderers_seq - { inputRawBlock } -\prop_gput:Nnn - \g_@@_renderer_arities_prop - { inputRawBlock } - { 2 } -\ExplSyntaxOff -% \end{macrocode} -% \par -% -% \iffalse -% -%<*manual-tokens> % \fi % % \begin{markdown} @@ -16056,8 +16502,8 @@ following text: % \end{macrocode} % \begin{markdown} % -% The \mdef{markdownRendererFootnote} and -% \mdef{markdownRendererFootnotePrototype} macros have been deprecated +% The \mref{markdownRendererFootnote} and +% \mref{markdownRendererFootnotePrototype} macros have been deprecated % and will be removed in Markdown 3.0.0. % % \end{markdown} @@ -16067,8 +16513,8 @@ following text: % \end{macrocode} % \begin{markdown} % -% The \mdef{markdownRendererHorizontalRule} and -% \mdef{markdownRendererHorizontalRulePrototype} macros have been deprecated +% The \mref{markdownRendererHorizontalRule} and +% \mref{markdownRendererHorizontalRulePrototype} macros have been deprecated % and will be removed in Markdown 3.0.0. % % \end{markdown} @@ -16181,7 +16627,7 @@ following text: % as follows: % % - `0` – Shell escape via the 18 output file stream -% - `1` – Shell escape via the Lua \luamref{os.execute} method +% - `1` – Shell escape via the Lua `os.execute` method % - `2` – Direct Lua access % - `3` – The \pkg{lt3luabridge} Lua package % @@ -16223,6 +16669,7 @@ following text: } } } +\ExplSyntaxOff % \end{macrocode} % \par % \begin{markdown} @@ -16307,8 +16754,8 @@ pdflatex --shell-escape document.tex % Section <#sec:texinterface>). % % The \LaTeX{} implementation redefines the plain \TeX{} logging macros (see -% Section <#sec:texinterfacelogging>) to use the \LaTeX{} \mref{PackageInfo}, -% \mref{PackageWarning}, and \mref{PackageError} macros. +% Section <#sec:texinterfacelogging>) to use the \LaTeX{} `\PackageInfo`, +% `\PackageWarning`, and `\PackageError` macros. % % \end{markdown} % \begin{macrocode} @@ -16327,7 +16774,7 @@ pdflatex --shell-escape document.tex % \end{Verbatim} % \begin{markdown} % where \meta{options} are the \LaTeX{} interface options (see Section -% <#sec:latexoptions>). Note that \meta{options} inside the \mref{usepackage} +% <#sec:latexoptions>). Note that \meta{options} inside the `\usepackage` % macro may not set the `markdownRenderers` (see Section % <#sec:latexrenderers>) and `markdownRendererPrototypes` (see Section % <#sec:latexrendererprototypes>) keys. This limitation is due to the way @@ -16354,8 +16801,8 @@ pdflatex --shell-escape document.tex % \end{macrocode} % \markdownBegin % -% You may prepend your own code to the \mref{markdown} macro and append your own -% code to the \mref{endmarkdown} macro to produce special effects before and after +% 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 % the \envmref{markdown} \LaTeX{} environment (and likewise for the starred % version). % @@ -16597,7 +17044,7 @@ without low-level programming. % *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 -% \mref{usetheme} macro [@tantau21, Section 15.1]. +% `\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{} @@ -16615,7 +17062,7 @@ without low-level programming. % package named `markdownthemewitiko_beamer_MU.sty`. % % If the \LaTeX{} option with key `theme` is (repeatedly) specified in the -% \mref{usepackage} macro, the loading of the theme(s) will be postponed in +% `\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 @@ -16796,7 +17243,7 @@ Example themes provided with the Markdown package include: % ``` The theme requires a Unix-like operating system with GNU Diffutils and Graphviz installed. The theme also requires shell access unless the - \mref{markdownOptionFrozenCache} plain \TeX{} option is enabled. + \Opt{frozenCache} plain \TeX{} option is enabled. % \markdownEnd % \iffalse @@ -16889,7 +17336,7 @@ conference article: The theme requires the \pkg{catchfile} \LaTeX{} package and a Unix-like operating system with GNU Coreutils `md5sum` and either GNU Wget or cURL installed. The theme also requires shell access unless the - \mref{markdownOptionFrozenCache} plain \TeX{} option is enabled. + \Opt{frozenCache} plain \TeX{} option is enabled. % \markdownEnd % \iffalse @@ -17231,7 +17678,7 @@ The following ordered list will be preceded by roman numerals: % \par % \begin{markdown} % -% The \mref{markdownOptionFinalizeCache} and \mref{markdownOptionFrozenCache} plain +% The \Opt{finalizeCache} and \Opt{frozenCache} plain % \TeX{} options are exposed through \LaTeX{} options with keys `finalizeCache` % and `frozenCache`. % @@ -17263,8 +17710,8 @@ The following ordered list will be preceded by roman numerals: % \begin{markdown} % % The following example \LaTeX{} code showcases a possible configuration of -% plain \TeX{} interface options \mref{markdownOptionHybrid}, -% \mref{markdownOptionSmartEllipses}, and \mref{markdownOptionCacheDir}. +% plain \TeX{} interface options \Opt{hybrid}, \Opt{smartEllipses}, and +% \Opt{cacheDir}. % ``` tex % \markdownSetup{ % hybrid, @@ -17411,7 +17858,7 @@ The following ordered list will be preceded by roman numerals: % \begin{markdown} % % The following example \LaTeX{} code showcases a possible configuration of the -% \mref{markdownRendererImagePrototype} and \mref{markdownRendererCodeSpanPrototype} +% `\markdownRendererImagePrototype` and `\markdownRendererCodeSpanPrototype` % markdown token renderer prototypes. % ``` tex % \markdownSetup{ @@ -17498,7 +17945,7 @@ texexec --passon=--shell-escape document.tex % % The \Hologo{ConTeXt} implementation redefines the plain \TeX{} logging macros % (see Section <#sec:texinterfacelogging>) to use the \Hologo{ConTeXt} -% \mref{writestatus} macro. +% `\writestatus` macro. % % \end{markdown} % \begin{macrocode} @@ -17517,7 +17964,7 @@ texexec --passon=--shell-escape document.tex % \usemodule[t][markdown] % ``````` % \noindent It is expected that the special plain \TeX{} characters have the -% expected category codes, when \mref{input}ting the file. +% expected category codes, when `\input`ting the file. % %### Typesetting Markdown % The interface exposes the \mdef{startmarkdown} and \mdef{stopmarkdown} macro @@ -20402,7 +20849,6 @@ function M.writer.new(options) self.escaped_uri_chars = { ["{"] = "\\markdownRendererLeftBrace{}", ["}"] = "\\markdownRendererRightBrace{}", - ["%"] = "\\markdownRendererPercentSign{}", ["\\"] = "\\markdownRendererBackslash{}", } self.escaped_minimal_strings = { @@ -20759,9 +21205,39 @@ function M.writer.new(options) % \par % \begin{markdown} % +% Define \luamdef{writer->attributes} as a function that will transform +% input attributes `attr` to the output format. +% +% \end{markdown} +% \begin{macrocode} + function self.attributes(attr) + local buf = {} + + table.sort(attr) + local key, value + for i = 1, #attr do + if attr[i]:sub(1, 1) == "#" then + table.insert(buf, {"\\markdownRendererAttributeIdentifier{", + attr[i]:sub(2), "}"}) + elseif attr[i]:sub(1, 1) == "." then + table.insert(buf, {"\\markdownRendererAttributeClassName{", + attr[i]:sub(2), "}"}) + else + key, value = attr[i]:match("([^= ]+)%s*=%s*(.*)") + table.insert(buf, {"\\markdownRendererAttributeKeyValue{", + key, "}{", value, "}"}) + end + end + + return buf + end +% \end{macrocode} +% \par +% \begin{markdown} +% % Define \luamdef{writer->active\_attributes} as a stack of attributes % of the headings that are currently active. The -% \luamref{writer->active\_headings} member variable is mutable. +% \luamdef{writer->active\_headings} member variable is mutable. % % \end{markdown} % \begin{macrocode} @@ -20771,7 +21247,7 @@ function M.writer.new(options) % \begin{markdown} % % Define \luamdef{writer->heading} as a function that will transform an -% input heading `s` at level `level` with identifiers `identifiers` to the +% input heading `s` at level `level` with attributes `attributes` to the % output format. % % \end{markdown} @@ -20853,21 +21329,7 @@ function M.writer.new(options) end if self.is_writing then - table.sort(attributes) - local key, value - for i = 1, #attributes do - if attributes[i]:sub(1, 1) == "#" then - table.insert(buf, {"\\markdownRendererAttributeIdentifier{", - attributes[i]:sub(2), "}"}) - elseif attributes[i]:sub(1, 1) == "." then - table.insert(buf, {"\\markdownRendererAttributeClassName{", - attributes[i]:sub(2), "}"}) - else - key, value = attributes[i]:match("([^= ]+)%s*=%s*(.*)") - table.insert(buf, {"\\markdownRendererAttributeKeyValue{", - key, "}{", value, "}"}) - end - end + table.insert(buf, self.attributes(attributes)) end local cmd @@ -21015,7 +21477,8 @@ parsers.doubletildes = P("~~") parsers.fourspaces = P(" ") parsers.any = P(1) -parsers.fail = parsers.any - 1 +parsers.succeed = P(true) +parsers.fail = P(false) parsers.escapable = S("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~") parsers.anyescaped = parsers.backslash / "" * parsers.escapable @@ -21232,14 +21695,31 @@ local function captures_geq_length(_,i,a,b) return #a >= #b and i end -parsers.infostring = (parsers.linechar - (parsers.backtick - + parsers.space^1 * (parsers.newline + parsers.eof)))^0 +parsers.tilde_infostring + = C((parsers.linechar + - (parsers.spacechar^1 * parsers.newline))^0) + * parsers.optionalspace + * (parsers.newline + parsers.eof) + +parsers.backtick_infostring + = C((parsers.linechar + - (parsers.backtick + + parsers.spacechar^1 * parsers.newline))^0) + * parsers.optionalspace + * (parsers.newline + parsers.eof) local fenceindent -parsers.fencehead = function(char) +parsers.fencehead = function(char, infostring) + return C(parsers.nonindentspace) / function(s) fenceindent = #s end + * Cg(char^3, "fencelength") + * parsers.optionalspace * infostring +end + +parsers.fencehead_with_attributes + = function(char) return C(parsers.nonindentspace) / function(s) fenceindent = #s end * Cg(char^3, "fencelength") - * parsers.optionalspace * C(parsers.infostring) + * parsers.optionalspace * Ct(parsers.attributes) * parsers.optionalspace * (parsers.newline + parsers.eof) end @@ -21503,12 +21983,14 @@ parsers.urlchar = parsers.anyescaped - parsers.newline - parsers.more % \end{markdown} % \begin{macrocode} parsers.TildeFencedCode - = parsers.fencehead(parsers.tilde) + = parsers.fencehead(parsers.tilde, + parsers.tilde_infostring) * Cs(parsers.fencedline(parsers.tilde)^0) * parsers.fencetail(parsers.tilde) parsers.BacktickFencedCode - = parsers.fencehead(parsers.backtick) + = parsers.fencehead(parsers.backtick, + parsers.backtick_infostring) * Cs(parsers.fencedline(parsers.backtick)^0) * parsers.fencetail(parsers.backtick) @@ -21578,7 +22060,7 @@ function M.reader.new(writer, options) % \begin{markdown} % % Create a \luamdef{reader->parsers} hash table that stores \acro{peg} patterns -% that depend on the received `options`. Make \luamdef{reader->parsers} inherit +% that depend on the received `options`. Make \luamref{reader->parsers} inherit % from the global \luamref{parsers} table. % % \end{markdown} @@ -21804,14 +22286,6 @@ function M.reader.new(writer, options) % \par % \begin{markdown} % -%#### Parsers Used for Notes (local) -% -% \end{markdown} -% \begin{macrocode} -% \end{macrocode} -% \par -% \begin{markdown} -% %#### Helpers for Links and References (local) % % \end{markdown} @@ -22220,7 +22694,7 @@ function M.reader.new(writer, options) % \begin{markdown} % % Create a local writable copy of the global read-only -% \luamdef{walkable_syntax} hash table. This table can be used by user-defined +% \luamref{walkable_syntax} hash table. This table can be used by user-defined % syntax extensions to insert new \acro{peg} patterns into existing rules % of the \acro{peg} grammar of markdown using % the \luamref{reader->insert_pattern} method. Furthermore, built-in syntax @@ -22300,12 +22774,12 @@ function M.reader.new(writer, options) local syntax = { "Blocks", - Blocks = ( V("ExpectedJekyllData") - * (V("Blank")^0 / writer.interblocksep) - )^-1 + Blocks = V("InitializeState") + * ( V("ExpectedJekyllData") + * (V("Blank")^0 / writer.interblocksep))^-1 * V("Blank")^0 * V("Block")^-1 - * (V("Blank")^0 / writer.interblocksep + * ( V("Blank")^0 / writer.interblocksep * V("Block"))^0 * V("Blank")^0 * parsers.eof, @@ -22344,23 +22818,37 @@ function M.reader.new(writer, options) Smart = parsers.Smart, Symbol = parsers.Symbol, SpecialChar = parsers.fail, + InitializeState = parsers.succeed, } % \end{macrocode} % \par % \begin{markdown} % % Define \luamref{reader->update_rule} as a function that receives two -% arguments: a left-hand side terminal symbol and a \acro{peg} pattern. -% The function (re)defines \luamref{walkable_syntax}`[`left-hand side terminal -% symbol`]` to be equal to pattern. +% arguments: a left-hand side terminal symbol and a function that accepts +% the current \acro{peg} pattern in \luamref{walkable_syntax}`[`left-hand side +% terminal symbol`]` if defined or `nil` otherwise and returns a +% \acro{peg} pattern that will (re)define \luamref{walkable_syntax}`[`left-hand +% side terminal symbol`]`. % % \end{markdown} % \begin{macrocode} - self.update_rule = function(rule_name, pattern) + self.update_rule = function(rule_name, get_pattern) assert(current_extension_name ~= nil) assert(syntax[rule_name] ~= nil, [[Rule ]] .. rule_name .. [[ -> ... does not exist in markdown grammar]]) - local accountable_pattern = { pattern, current_extension_name, rule_name } + local previous_pattern + local extension_name + if walkable_syntax[rule_name] then + local previous_accountable_pattern = walkable_syntax[rule_name][1] + previous_pattern = previous_accountable_pattern[1] + extension_name = previous_accountable_pattern[2] .. ", " .. current_extension_name + else + previous_pattern = nil + extension_name = current_extension_name + end + local pattern = get_pattern(previous_pattern) + local accountable_pattern = { pattern, extension_name, rule_name } walkable_syntax[rule_name] = { accountable_pattern } end % \end{macrocode} @@ -22390,6 +22878,19 @@ function M.reader.new(writer, options) % \par % \begin{markdown} % +% Add method \luamdef{reader->initialize_named_group} that defines named groups +% with a default capture value. +% +% \end{markdown} +% \begin{macrocode} + self.initialize_named_group = function(name, value) + syntax.InitializeState = syntax.InitializeState + * Cg(Ct("") / value, name) + end +% \end{macrocode} +% \par +% \begin{markdown} +% % Apply syntax extensions. % % \end{markdown} @@ -22556,7 +23057,10 @@ function M.reader.new(writer, options) local inlines_t = util.table_copy(syntax) inlines_t[1] = "Inlines" - inlines_t.Inlines = parsers.Inline^0 * (parsers.spacing^0 * parsers.eof / "") + inlines_t.Inlines = V("InitializeState") + * parsers.Inline^0 + * ( parsers.spacing^0 + * parsers.eof / "") parsers.inlines = Ct(inlines_t) local inlines_no_link_t = util.table_copy(inlines_t) @@ -22665,7 +23169,7 @@ end % %### Built-In Syntax Extensions {#luabuiltinextensions} % -% Create \luamdef{extensions} hash table that contains built-in syntax +% Create \luamref{extensions} hash table that contains built-in syntax % extensions. Syntax extensions are functions that produce objects with two % methods: `extend_writer` and `extend_reader`. The `extend_writer` object % takes a \luamref{writer} object as the only parameter and mutates it. @@ -22678,6 +23182,50 @@ M.extensions = {} % \end{macrocode} % \begin{markdown} % +%#### Bracketed Spans +% +% The \luamdef{extensions.bracketed_spans} function implements the Pandoc +% bracketed spans syntax extension. +% +% \end{markdown} +% \begin{macrocode} +M.extensions.bracketed_spans = function() + return { + name = "built-in bracketed_spans syntax extension", + extend_writer = function(self) +% \end{macrocode} +% \par +% \begin{markdown} +% +% Define \luamdef{writer->span} as a function that will transform an input +% bracketed span `s` with attributes `attr` to the output format. +% +% \end{markdown} +% \begin{macrocode} + function self.span(s, attr) + return {"\\markdownRendererBracketedSpanAttributeContextBegin", + self.attributes(attr), + s, + "\\markdownRendererBracketedSpanAttributeContextEnd{}"} + end + end, extend_reader = function(self) + local parsers = self.parsers + local writer = self.writer + + local Span = parsers.between(parsers.Inline, + parsers.lbracket, + parsers.rbracket) + * Ct(parsers.attributes) + / writer.span + + self.insert_pattern("Inline after Emph", + Span, "Span") + end + } +end +% \end{macrocode} +% \begin{markdown} +% %#### Citations % % The \luamdef{extensions.citations} function implements the Pandoc citation @@ -22726,7 +23274,7 @@ M.extensions.citations = function(citation_nbsps) % \begin{markdown} % % Define \luamdef{writer->citation} as a function that will transform an input -% citation name `c` to the output format. If \luamref{writer->hybrid} is `true`, +% citation name `c` to the output format. If option \Opt{hybrid} is enabled, % use the \luamref{writer->escape_minimal} function. Otherwise, use the % \luamref{escape_citation} function. % @@ -23052,9 +23600,9 @@ end % %#### Definition Lists % -% The \luamdef{extensions.definition_lists} function implements the definition -% list syntax extension. If the `tight_lists` parameter is `true`, tight lists -% will produce special right item renderers. +% The \luamdef{extensions.definition_lists} function implements the Pandoc +% definition list syntax extension. If the `tight_lists` parameter is `true`, +% tight lists will produce special right item renderers. % % \end{markdown} % \begin{macrocode} @@ -23094,56 +23642,257 @@ M.extensions.definition_lists = function(tight_lists) return {"\\markdownRendererDlBeginTight\n", buffer, "\n\\markdownRendererDlEndTight"} else - return {"\\markdownRendererDlBegin\n", buffer, - "\n\\markdownRendererDlEnd"} + return {"\\markdownRendererDlBegin\n", buffer, + "\n\\markdownRendererDlEnd"} + end + end + end, extend_reader = function(self) + local parsers = self.parsers + local writer = self.writer + + local defstartchar = S("~:") + + local defstart = ( defstartchar * #parsers.spacing + * (parsers.tab + parsers.space^-3) + + parsers.space * defstartchar * #parsers.spacing + * (parsers.tab + parsers.space^-2) + + parsers.space * parsers.space * defstartchar + * #parsers.spacing + * (parsers.tab + parsers.space^-1) + + parsers.space * parsers.space * parsers.space + * defstartchar * #parsers.spacing + ) + + local dlchunk = Cs(parsers.line * (parsers.indentedline - parsers.blankline)^0) + + local function definition_list_item(term, defs, _) + return { term = self.parser_functions.parse_inlines(term), + definitions = defs } + end + + local DefinitionListItemLoose + = C(parsers.line) * parsers.skipblanklines + * Ct((defstart + * parsers.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) + * Cc(true) / definition_list_item + + local DefinitionList + = ( Ct(DefinitionListItemLoose^1) * Cc(false) + + Ct(DefinitionListItemTight^1) + * (parsers.skipblanklines + * -DefinitionListItemLoose * Cc(true)) + ) / writer.definitionlist + + self.insert_pattern("Block after Heading", + DefinitionList, "DefinitionList") + end + } +end +% \end{macrocode} +% \begin{markdown} +% +%#### Fancy Lists +% +% The \luamdef{extensions.fancy_lists} function implements the Pandoc fancy +% list syntax extension. +% +% \end{markdown} +% \begin{macrocode} +M.extensions.fancy_lists = function() + return { + name = "built-in fancy_lists syntax extension", + extend_writer = function(self) + local options = self.options + +% \end{macrocode} +% \par +% \begin{markdown} +% +% Define \luamdef{writer->fancylist} as a function that will transform an +% input ordered list to the output format, where: +% +%- `items` is an array of the list items, +%- `tight` specifies, whether the list is tight or not, +%- `startnum` is the number of the first list item, +%- `numstyle` is the style of the list item labels from among the following: +% - `Decimal` -- decimal arabic numbers, +% - `LowerRoman` -- lower roman numbers, +% - `UpperRoman` -- upper roman numbers, +% - `LowerAlpha` -- lower ASCII alphabetic characters, and +% - `UpperAlpha` -- upper ASCII alphabetic characters, and +%- `numdelim` is the style of delimiters between list item labels and +% texts from among the following: +% - `Default` -- default style, +% - `OneParen` -- parentheses, and +% - `Period` -- periods. +% +% \end{markdown} +% \begin{macrocode} + function self.fancylist(items,tight,startnum,numstyle,numdelim) + if not self.is_writing then return "" end + local buffer = {} + local num = startnum + for _,item in ipairs(items) do + buffer[#buffer + 1] = self.fancyitem(item,num) + if num ~= nil then + num = num + 1 + end + end + local contents = util.intersperse(buffer,"\n") + if tight and options.tightLists then + return {"\\markdownRendererFancyOlBeginTight{", + numstyle,"}{",numdelim,"}",contents, + "\n\\markdownRendererFancyOlEndTight "} + else + return {"\\markdownRendererFancyOlBegin{", + numstyle,"}{",numdelim,"}",contents, + "\n\\markdownRendererFancyOlEnd "} + end + end +% \end{macrocode} +% \begin{markdown} +% +% Define \luamdef{writer->fancyitem} as a function that will transform an +% input fancy ordered list item to the output format, where `s` is the text of +% the list item. If the optional parameter `num` is present, it is the number +% of the list item. +% +% \end{markdown} +% \begin{macrocode} + function self.fancyitem(s,num) + if num ~= nil then + return {"\\markdownRendererFancyOlItemWithNumber{",num,"}",s, + "\\markdownRendererFancyOlItemEnd "} + else + return {"\\markdownRendererFancyOlItem ",s,"\\markdownRendererFancyOlItemEnd "} end end end, extend_reader = function(self) local parsers = self.parsers + local options = self.options local writer = self.writer - local defstartchar = S("~:") - - local defstart = ( defstartchar * #parsers.spacing - * (parsers.tab + parsers.space^-3) - + parsers.space * defstartchar * #parsers.spacing + 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 * parsers.space * defstartchar + + parsers.space * C(label^2 * numdelim) + * #parsers.spacing + + parsers.space * C(label * numdelim) * #parsers.spacing * (parsers.tab + parsers.space^-1) - + parsers.space * parsers.space * parsers.space - * defstartchar * #parsers.spacing - ) + + parsers.space * parsers.space * C(label^1 + * numdelim) * #parsers.spacing + local starter = parsers.bullet + enumerator - local dlchunk = Cs(parsers.line * (parsers.indentedline - parsers.blankline)^0) + local NestedList = Cs((parsers.optionallyindentedline + - starter)^1) + / function(a) return "\001"..a end - local function definition_list_item(term, defs, _) - return { term = self.parser_functions.parse_inlines(term), - definitions = defs } + local ListBlockLine = parsers.optionallyindentedline + - parsers.blankline - (parsers.indent^-1 + * starter) + + local ListBlock = parsers.line * ListBlockLine^0 + + local ListContinuationBlock = parsers.blanklines * (parsers.indent / "") + * ListBlock + + 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) end - local DefinitionListItemLoose - = C(parsers.line) * parsers.skipblanklines - * Ct((defstart - * parsers.indented_blocks(dlchunk) - / self.parser_functions.parse_blocks_nested)^1) - * Cc(false) / definition_list_item + 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 + end - local DefinitionListItemTight - = C(parsers.line) - * Ct((defstart * dlchunk - / self.parser_functions.parse_blocks_nested)^1) - * Cc(true) / definition_list_item + local function roman2number(roman) + local romans = { ["L"] = 50, ["X"] = 10, ["V"] = 5, ["I"] = 1 } + local numeral = 0 - local DefinitionList - = ( Ct(DefinitionListItemLoose^1) * Cc(false) - + Ct(DefinitionListItemTight^1) - * (parsers.skipblanklines - * -DefinitionListItemLoose * Cc(true)) - ) / writer.definitionlist + local i = 1 + local len = string.len(roman) + while i < len do + local z1, z2 = romans[ string.sub(roman, i, i) ], romans[ string.sub(roman, i+1, i+1) ] + if z1 < z2 then + numeral = numeral + (z2 - z1) + i = i + 2 + else + numeral = numeral + z1 + i = i + 1 + end + end + if i <= len then numeral = numeral + romans[ string.sub(roman,i,i) ] end + return numeral + end - self.insert_pattern("Block after Heading", - DefinitionList, "DefinitionList") + local function sniffstyle(itemprefix) + local numstr, delimend = itemprefix:match("^([A-Za-z0-9]*)([.)]*)") + local numdelim + if delimend == ")" then + numdelim = "OneParen" + elseif delimend == "." then + numdelim = "Period" + else + numdelim = "Default" + end + numstr = numstr or itemprefix + + local num + num = numstr:match("^([IVXL]+)") + if num then + return roman2number(num), "UpperRoman", numdelim + end + num = numstr:match("^([ivxl]+)") + if num then + return roman2number(string.upper(num)), "LowerRoman", numdelim + end + num = numstr:match("^([A-Z])") + if num then + return string.byte(num) - string.byte("A") + 1, "UpperAlpha", numdelim + end + num = numstr:match("^([a-z])") + if num then + return string.byte(num) - string.byte("a") + 1, "LowerAlpha", numdelim + end + return math.floor(tonumber(numstr) or 1), "Decimal", numdelim + end + + local function fancylist(items,tight,start) + local startnum, numstyle, numdelim = sniffstyle(start) + return writer.fancylist(items,tight, + options.startNumber and startnum, + 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 + + self.update_rule("OrderedList", function() return FancyList end) end } end @@ -23154,8 +23903,8 @@ end % % The \luamdef{extensions.fenced_code} function implements the commonmark % fenced code block syntax extension. When the `blank_before_code_fence` -% parameter is `true`, the syntax extension requires between a paragraph and -% the following fenced code block. +% parameter is `true`, the syntax extension requires a blank line between a +% paragraph and the following fenced code block. % % \end{markdown} % \begin{macrocode} @@ -23186,12 +23935,12 @@ M.extensions.fenced_code = function(blank_before_code_fence) local writer = self.writer local FencedCode = (parsers.TildeFencedCode - + parsers.BacktickFencedCode) - / function(infostring, code) - local expanded_code = self.expandtabs(code) - return writer.fencedCode(expanded_code, - infostring) - end + + parsers.BacktickFencedCode) + / function(infostring, code) + local expanded_code = self.expandtabs(code) + return writer.fencedCode(expanded_code, + infostring) + end self.insert_pattern("Block after Verbatim", FencedCode, "FencedCode") @@ -23200,12 +23949,18 @@ M.extensions.fenced_code = function(blank_before_code_fence) if blank_before_code_fence then fencestart = parsers.fail else - fencestart = parsers.fencehead(parsers.backtick) - + parsers.fencehead(parsers.tilde) + fencestart = parsers.fencehead(parsers.backtick, + parsers.backtick_infostring) + + parsers.fencehead(parsers.tilde, + parsers.tilde_infostring) end - local EndlineExceptions = parsers.EndlineExceptions + fencestart - self.update_rule("EndlineExceptions", EndlineExceptions) + self.update_rule("EndlineExceptions", function(previous_pattern) + if previous_pattern == nil then + previous_pattern = parsers.EndlineExceptions + end + return previous_pattern + fencestart + end) self.add_special_character("~") end @@ -23214,91 +23969,133 @@ end % \end{macrocode} % \begin{markdown} % -%#### Notes +%#### Fenced Divs % -% The \luamdef{extensions.notes} function implements the Pandoc note -% and inline note syntax extensions. When the `note` parameter is -% `true`, the Pandoc note syntax extension will be enabled. When the -% `inline_notes` parameter is `true`, the Pandoc inline note syntax -% extension will be enabled. +% The \luamdef{extensions.fenced_divs} function implements the Pandoc fenced +% divs syntax extension. When the `blank_before_div_fence` parameter is `true`, +% the syntax extension requires a blank line between a paragraph and the +% following fenced code block. % % \end{markdown} % \begin{macrocode} -M.extensions.notes = function(notes, inline_notes) - assert(notes or inline_notes) +M.extensions.fenced_divs = function(blank_before_div_fence) return { - name = "built-in notes syntax extension", + name = "built-in fenced_divs syntax extension", extend_writer = function(self) % \end{macrocode} % \par % \begin{markdown} % -% Define \luamdef{writer->note} as a function that will transform an -% input note `s` to the output format. +% Define \luamdef{writer->div} as a function that will transform an input +% fenced div with content `c` and with attributes `attr` to the output format. % % \end{markdown} % \begin{macrocode} - function self.note(s) - return {"\\markdownRendererNote{",s,"}"} + function self.div(c, attr) + return {"\\markdownRendererFencedDivAttributeContextBegin", + self.attributes(attr), + c, + "\\markdownRendererFencedDivAttributeContextEnd"} end end, extend_reader = function(self) local parsers = self.parsers local writer = self.writer +% \end{macrocode} +% \par +% \begin{markdown} +% +% Define basic patterns for matching the opening and the closing tag of a div. +% +% \end{markdown} +% \begin{macrocode} + local fenced_div_infostring + = C((parsers.linechar + - ( parsers.spacechar^1 + * parsers.colon^1))^1) - if inline_notes then - local InlineNote - = parsers.circumflex - * (parsers.tag / self.parser_functions.parse_inlines_no_inline_note) - / writer.note - - self.insert_pattern("Inline after Emph", - InlineNote, "InlineNote") - end - if notes then - local function strip_first_char(s) - return s:sub(2) - end - - local RawNoteRef - = #(parsers.lbracket * parsers.circumflex) - * parsers.tag / strip_first_char + local fenced_div_begin = parsers.nonindentspace + * parsers.colon^3 + * parsers.optionalspace + * fenced_div_infostring + * ( parsers.spacechar^1 + * parsers.colon^1)^0 + * parsers.optionalspace + * (parsers.newline + parsers.eof) - local rawnotes = {} + local fenced_div_end = parsers.nonindentspace + * parsers.colon^3 + * parsers.optionalspace + * (parsers.newline + parsers.eof) +% \end{macrocode} +% \par +% \begin{markdown} +% +% Initialize a named group named `div_level` for tracking how deep we are +% nested in divs. +% +% \end{markdown} +% \begin{macrocode} + self.initialize_named_group("div_level", "0") - -- like indirect_link - local function lookup_note(ref) - return writer.defer_call(function() - local found = rawnotes[self.normalize_tag(ref)] - if found then - return writer.note( - self.parser_functions.parse_blocks_nested(found)) - else - return {"[", - self.parser_functions.parse_inlines("^" .. ref), "]"} - end - end) + local function increment_div_level(increment) + local function update_div_level(s, i, current_level) -- luacheck: ignore s i + current_level = tonumber(current_level) + local next_level = tostring(current_level + increment) + return true, next_level end - local function register_note(ref,rawnote) - rawnotes[self.normalize_tag(ref)] = rawnote - return "" - end + return Cg( Cmt(Cb("div_level"), update_div_level) + , "div_level") + end - local NoteRef = RawNoteRef / lookup_note + local FencedDiv = fenced_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) + / function (infostring, div) + local attr = lpeg.match(Ct(parsers.attributes), infostring) + if attr == nil then + attr = {"." .. infostring} + end + return div, attr + end + / writer.div - local NoteBlock - = parsers.leader * RawNoteRef * parsers.colon - * parsers.spnl * parsers.indented_blocks(parsers.chunk) - / register_note + self.insert_pattern("Block after Verbatim", + FencedDiv, "FencedDiv") - local Blank = NoteBlock + parsers.Blank - self.update_rule("Blank", Blank) + self.add_special_character(":") +% \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 + local function check_div_level(s, i, current_level) -- luacheck: ignore s i + current_level = tonumber(current_level) + return current_level > 0 + end - self.insert_pattern("Inline after Emph", - NoteRef, "NoteRef") + local is_inside_div = Cmt(Cb("div_level"), check_div_level) + local fencestart = is_inside_div * fenced_div_end + self.update_rule("EndlineExceptions", function(previous_pattern) + if previous_pattern == nil then + previous_pattern = parsers.EndlineExceptions + end + return previous_pattern + fencestart + end) end - - self.add_special_character("^") end } end @@ -23307,8 +24104,8 @@ end % %#### Header Attributes % -% The \luamdef{extensions.header_attributes} function implements a syntax -% extension that enables the assignment of HTML attributes to headings. +% The \luamdef{extensions.header_attributes} function implements the Pandoc +% header attributes syntax extension. % % \end{markdown} % \begin{macrocode} @@ -23363,164 +24160,98 @@ M.extensions.header_attributes = function() / writer.heading local Heading = AtxHeading + SetextHeading - self.update_rule("Heading", Heading) + self.update_rule("Heading", function() return Heading end) end } end % \end{macrocode} % \begin{markdown} % -%#### YAML Metadata +%#### Notes % -% The \luamdef{extensions.jekyll_data} function implements the Pandoc -% `yaml_metadata_block` syntax extension for entering metadata in \acro{yaml}. -% When the `expect_jekyll_data` parameter is `true`, then a markdown document -% may begin directly with \acro{yaml} metadata and may contain nothing but -% \acro{yaml} metadata +% The \luamdef{extensions.notes} function implements the Pandoc note +% and inline note syntax extensions. When the `note` parameter is +% `true`, the Pandoc note syntax extension will be enabled. When the +% `inline_notes` parameter is `true`, the Pandoc inline note syntax +% extension will be enabled. % % \end{markdown} % \begin{macrocode} -M.extensions.jekyll_data = function(expect_jekyll_data) +M.extensions.notes = function(notes, inline_notes) + assert(notes or inline_notes) return { - name = "built-in jekyll_data syntax extension", + name = "built-in notes syntax extension", extend_writer = function(self) % \end{macrocode} % \par % \begin{markdown} % -% Define \luamdef{writer->jekyllData} as a function that will transform an -% input \acro{yaml} table `d` to the output format. The table is the value for -% the key `p` in the parent table; if `p` is nil, then the table has no parent. -% All scalar keys and values encountered in the table will be cast to a string -% following \acro{yaml} serialization rules. String values will also be -% transformed using the function `t`. +% Define \luamdef{writer->note} as a function that will transform an +% input note `s` to the output format. % % \end{markdown} % \begin{macrocode} - function self.jekyllData(d, t, p) - if not self.is_writing then return "" end + function self.note(s) + return {"\\markdownRendererNote{",s,"}"} + end + end, extend_reader = function(self) + local parsers = self.parsers + local writer = self.writer - local buf = {} + if inline_notes then + local InlineNote + = parsers.circumflex + * (parsers.tag / self.parser_functions.parse_inlines_no_inline_note) + / writer.note - local keys = {} - for k, _ in pairs(d) do - table.insert(keys, k) + self.insert_pattern("Inline after Emph", + InlineNote, "InlineNote") + end + if notes then + local function strip_first_char(s) + return s:sub(2) end - table.sort(keys) - if not p then - table.insert(buf, "\\markdownRendererJekyllDataBegin") - end + local RawNoteRef + = #(parsers.lbracket * parsers.circumflex) + * parsers.tag / strip_first_char - if #d > 0 then - table.insert(buf, "\\markdownRendererJekyllDataSequenceBegin{") - table.insert(buf, self.uri(p or "null")) - table.insert(buf, "}{") - table.insert(buf, #keys) - table.insert(buf, "}") - else - table.insert(buf, "\\markdownRendererJekyllDataMappingBegin{") - table.insert(buf, self.uri(p or "null")) - table.insert(buf, "}{") - table.insert(buf, #keys) - table.insert(buf, "}") - end + local rawnotes = {} - for _, k in ipairs(keys) do - local v = d[k] - local typ = type(v) - k = tostring(k or "null") - if typ == "table" and next(v) ~= nil then - table.insert( - buf, - self.jekyllData(v, t, k) - ) - else - k = self.uri(k) - v = tostring(v) - if typ == "boolean" then - table.insert(buf, "\\markdownRendererJekyllDataBoolean{") - table.insert(buf, k) - table.insert(buf, "}{") - table.insert(buf, v) - table.insert(buf, "}") - elseif typ == "number" then - table.insert(buf, "\\markdownRendererJekyllDataNumber{") - table.insert(buf, k) - table.insert(buf, "}{") - table.insert(buf, v) - table.insert(buf, "}") - elseif typ == "string" then - table.insert(buf, "\\markdownRendererJekyllDataString{") - table.insert(buf, k) - table.insert(buf, "}{") - table.insert(buf, t(v)) - table.insert(buf, "}") - elseif typ == "table" then - table.insert(buf, "\\markdownRendererJekyllDataEmpty{") - table.insert(buf, k) - table.insert(buf, "}") + -- like indirect_link + local function lookup_note(ref) + return writer.defer_call(function() + local found = rawnotes[self.normalize_tag(ref)] + if found then + return writer.note( + self.parser_functions.parse_blocks_nested(found)) else - error(format("Unexpected type %s for value of " .. - "YAML key %s", typ, k)) + return {"[", + self.parser_functions.parse_inlines("^" .. ref), "]"} end - end - end - - if #d > 0 then - table.insert(buf, "\\markdownRendererJekyllDataSequenceEnd") - else - table.insert(buf, "\\markdownRendererJekyllDataMappingEnd") + end) end - if not p then - table.insert(buf, "\\markdownRendererJekyllDataEnd") + local function register_note(ref,rawnote) + rawnotes[self.normalize_tag(ref)] = rawnote + return "" end - return buf - end - end, extend_reader = function(self) - local parsers = self.parsers - local writer = self.writer - - local JekyllData - = Cmt( C((parsers.line - P("---") - P("..."))^0) - , function(s, i, text) -- luacheck: ignore s i - local data - local ran_ok, _ = pcall(function() - local tinyyaml = require("markdown-tinyyaml") - data = tinyyaml.parse(text, {timestamps=false}) - end) - if ran_ok and data ~= nil then - return true, writer.jekyllData(data, function(s) - return self.parser_functions.parse_blocks_nested(s) - end, nil) - else - return false - end - end - ) + local NoteRef = RawNoteRef / lookup_note - local UnexpectedJekyllData - = P("---") - * parsers.blankline / 0 - * #(-parsers.blankline) -- if followed by blank, it's thematic break - * JekyllData - * (P("---") + P("...")) + local NoteBlock + = parsers.leader * RawNoteRef * parsers.colon + * parsers.spnl * parsers.indented_blocks(parsers.chunk) + / register_note - local ExpectedJekyllData - = ( P("---") - * parsers.blankline / 0 - * #(-parsers.blankline) -- if followed by blank, it's thematic break - )^-1 - * JekyllData - * (P("---") + P("..."))^-1 + local Blank = NoteBlock + parsers.Blank + self.update_rule("Blank", function() return Blank end) - self.insert_pattern("Block before Blockquote", - UnexpectedJekyllData, "UnexpectedJekyllData") - if expect_jekyll_data then - self.update_rule("ExpectedJekyllData", ExpectedJekyllData) + self.insert_pattern("Inline after Emph", + NoteRef, "NoteRef") end + + self.add_special_character("^") end } end @@ -23530,7 +24261,7 @@ end %#### Pipe Tables % % The \luamdef{extensions.pipe_table} function implements the \acro{PHP} -% Markdown table syntax extension (affectionately known as pipe tables). When +% 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_captions` syntax extension for table captions. % @@ -23708,7 +24439,7 @@ M.extensions.raw_attribute = function() % \begin{markdown} % % Define \luamdef{writer->rawInline} as a function that will transform an -% input inline raw span `s` with the raw attribute `i` to the output format. +% input inline raw span `s` with the raw attribute `attr` to the output format. % % \end{markdown} % \begin{macrocode} @@ -23725,7 +24456,7 @@ M.extensions.raw_attribute = function() % \begin{markdown} % % Define \luamdef{writer->rawBlock} as a function that will transform an -% input raw block `s` with the raw attribute `i` to the output format. +% input raw block `s` with the raw attribute `attr` to the output format. % % \end{markdown} % \begin{macrocode} @@ -23756,17 +24487,17 @@ M.extensions.raw_attribute = function() if options.fencedCode then local RawBlock = (parsers.TildeFencedCode - + parsers.BacktickFencedCode) - / function(infostring, code) - local expanded_code = self.expandtabs(code) - local attr = lpeg.match(raw_attribute, infostring) - if attr then - return writer.rawBlock(expanded_code, attr) - else - return writer.fencedCode(expanded_code, - infostring) - end + + parsers.BacktickFencedCode) + / function(infostring, code) + local expanded_code = self.expandtabs(code) + local attr = lpeg.match(raw_attribute, infostring) + if attr then + return writer.rawBlock(expanded_code, attr) + else + return writer.fencedCode(expanded_code, + infostring) end + end self.insert_pattern("Block after Verbatim", RawBlock, "RawBlock") @@ -23819,47 +24550,6 @@ end % \end{macrocode} % \begin{markdown} % -%#### Superscripts -% -% The \luamdef{extensions.superscripts} function implements the Pandoc -% superscript syntax extension. -% -% \end{markdown} -% \begin{macrocode} -M.extensions.superscripts = function() - return { - name = "built-in superscripts syntax extension", - extend_writer = function(self) -% \end{macrocode} -% \par -% \begin{markdown} -% -% Define \luamdef{writer->superscript} as a function that will transform -% a superscript span `s` of input text to the output format. -% -% \end{markdown} -% \begin{macrocode} - function self.superscript(s) - return {"\\markdownRendererSuperscript{",s,"}"} - end - end, extend_reader = function(self) - local parsers = self.parsers - local writer = self.writer - - local Superscript = ( - parsers.between(parsers.Str, parsers.circumflex, parsers.circumflex) - ) / writer.superscript - - self.insert_pattern("Inline after Emph", - Superscript, "Superscript") - - self.add_special_character("^") - end - } -end -% \end{macrocode} -% \begin{markdown} -% %#### Subscripts % % The \luamdef{extensions.subscripts} function implements the Pandoc @@ -23901,201 +24591,197 @@ end % \end{macrocode} % \begin{markdown} % -%#### Fancy Lists +%#### Superscripts % -% The \luamdef{extensions.fancy_lists} function implements the Pandoc fancy -% list extension. +% The \luamdef{extensions.superscripts} function implements the Pandoc +% superscript syntax extension. % % \end{markdown} % \begin{macrocode} -M.extensions.fancy_lists = function() +M.extensions.superscripts = function() return { - name = "built-in fancy_lists syntax extension", + name = "built-in superscripts syntax extension", extend_writer = function(self) - local options = self.options - -% \end{macrocode} -% \par -% \begin{markdown} -% -% Define \luamdef{writer->fancylist} as a function that will transform an -% input ordered list to the output format, where: -% -%- `items` is an array of the list items, -%- `tight` specifies, whether the list is tight or not, -%- `startnum` is the number of the first list item, -%- `numstyle` is the style of the list item labels from among the following: -% - `Decimal` -- decimal arabic numbers, -% - `LowerRoman` -- lower roman numbers, -% - `UpperRoman` -- upper roman numbers, -% - `LowerAlpha` -- lower ASCII alphabetic characters, and -% - `UpperAlpha` -- upper ASCII alphabetic characters, and -%- `numdelim` is the style of delimiters between list item labels and -% texts from among the following: -% - `Default` -- default style, -% - `OneParen` -- parentheses, and -% - `Period` -- periods. -% -% \end{markdown} -% \begin{macrocode} - function self.fancylist(items,tight,startnum,numstyle,numdelim) - if not self.is_writing then return "" end - local buffer = {} - local num = startnum - for _,item in ipairs(items) do - buffer[#buffer + 1] = self.fancyitem(item,num) - if num ~= nil then - num = num + 1 - end - end - local contents = util.intersperse(buffer,"\n") - if tight and options.tightLists then - return {"\\markdownRendererFancyOlBeginTight{", - numstyle,"}{",numdelim,"}",contents, - "\n\\markdownRendererFancyOlEndTight "} - else - return {"\\markdownRendererFancyOlBegin{", - numstyle,"}{",numdelim,"}",contents, - "\n\\markdownRendererFancyOlEnd "} - end - end % \end{macrocode} +% \par % \begin{markdown} % -% Define \luamdef{writer->fancyitem} as a function that will transform an -% input fancy ordered list item to the output format, where `s` is the text of -% the list item. If the optional parameter `num` is present, it is the number -% of the list item. +% Define \luamdef{writer->superscript} as a function that will transform +% a superscript span `s` of input text to the output format. % % \end{markdown} % \begin{macrocode} - function self.fancyitem(s,num) - if num ~= nil then - return {"\\markdownRendererFancyOlItemWithNumber{",num,"}",s, - "\\markdownRendererFancyOlItemEnd "} - else - return {"\\markdownRendererFancyOlItem ",s,"\\markdownRendererFancyOlItemEnd "} - end + function self.superscript(s) + return {"\\markdownRendererSuperscript{",s,"}"} end end, extend_reader = function(self) local parsers = self.parsers - 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 NestedList = Cs((parsers.optionallyindentedline - - starter)^1) - / function(a) return "\001"..a end + local Superscript = ( + parsers.between(parsers.Str, parsers.circumflex, parsers.circumflex) + ) / writer.superscript - local ListBlockLine = parsers.optionallyindentedline - - parsers.blankline - (parsers.indent^-1 - * starter) + self.insert_pattern("Inline after Emph", + Superscript, "Superscript") - local ListBlock = parsers.line * ListBlockLine^0 + self.add_special_character("^") + end + } +end +% \end{macrocode} +% \begin{markdown} +% +%#### YAML Metadata +% +% The \luamdef{extensions.jekyll_data} function implements the Pandoc +% `yaml_metadata_block` syntax extension. When the `expect_jekyll_data` +% parameter is `true`, then a markdown document may begin directly with +% \acro{yaml} metadata and may contain nothing but \acro{yaml} metadata. +% +% \end{markdown} +% \begin{macrocode} +M.extensions.jekyll_data = function(expect_jekyll_data) + return { + name = "built-in jekyll_data syntax extension", + extend_writer = function(self) +% \end{macrocode} +% \par +% \begin{markdown} +% +% Define \luamdef{writer->jekyllData} as a function that will transform an +% input \acro{yaml} table `d` to the output format. The table is the value for +% the key `p` in the parent table; if `p` is nil, then the table has no parent. +% All scalar keys and values encountered in the table will be cast to a string +% following \acro{yaml} serialization rules. String values will also be +% transformed using the function `t`. +% +% \end{markdown} +% \begin{macrocode} + function self.jekyllData(d, t, p) + if not self.is_writing then return "" end - local ListContinuationBlock = parsers.blanklines * (parsers.indent / "") - * ListBlock + local buf = {} - 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) - end + local keys = {} + for k, _ in pairs(d) do + table.insert(keys, k) + end + table.sort(keys) - 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 - end + if not p then + table.insert(buf, "\\markdownRendererJekyllDataBegin") + end - local function roman2number(roman) - local romans = { ["L"] = 50, ["X"] = 10, ["V"] = 5, ["I"] = 1 } - local numeral = 0 + if #d > 0 then + table.insert(buf, "\\markdownRendererJekyllDataSequenceBegin{") + table.insert(buf, self.uri(p or "null")) + table.insert(buf, "}{") + table.insert(buf, #keys) + table.insert(buf, "}") + else + table.insert(buf, "\\markdownRendererJekyllDataMappingBegin{") + table.insert(buf, self.uri(p or "null")) + table.insert(buf, "}{") + table.insert(buf, #keys) + table.insert(buf, "}") + end - local i = 1 - local len = string.len(roman) - while i < len do - local z1, z2 = romans[ string.sub(roman, i, i) ], romans[ string.sub(roman, i+1, i+1) ] - if z1 < z2 then - numeral = numeral + (z2 - z1) - i = i + 2 + for _, k in ipairs(keys) do + local v = d[k] + local typ = type(v) + k = tostring(k or "null") + if typ == "table" and next(v) ~= nil then + table.insert( + buf, + self.jekyllData(v, t, k) + ) else - numeral = numeral + z1 - i = i + 1 + k = self.uri(k) + v = tostring(v) + if typ == "boolean" then + table.insert(buf, "\\markdownRendererJekyllDataBoolean{") + table.insert(buf, k) + table.insert(buf, "}{") + table.insert(buf, v) + table.insert(buf, "}") + elseif typ == "number" then + table.insert(buf, "\\markdownRendererJekyllDataNumber{") + table.insert(buf, k) + table.insert(buf, "}{") + table.insert(buf, v) + table.insert(buf, "}") + elseif typ == "string" then + table.insert(buf, "\\markdownRendererJekyllDataString{") + table.insert(buf, k) + table.insert(buf, "}{") + table.insert(buf, t(v)) + table.insert(buf, "}") + elseif typ == "table" then + table.insert(buf, "\\markdownRendererJekyllDataEmpty{") + table.insert(buf, k) + table.insert(buf, "}") + else + error(format("Unexpected type %s for value of " .. + "YAML key %s", typ, k)) + end end end - if i <= len then numeral = numeral + romans[ string.sub(roman,i,i) ] end - return numeral - end - local function sniffstyle(itemprefix) - local numstr, delimend = itemprefix:match("^([A-Za-z0-9]*)([.)]*)") - local numdelim - if delimend == ")" then - numdelim = "OneParen" - elseif delimend == "." then - numdelim = "Period" + if #d > 0 then + table.insert(buf, "\\markdownRendererJekyllDataSequenceEnd") else - numdelim = "Default" + table.insert(buf, "\\markdownRendererJekyllDataMappingEnd") end - numstr = numstr or itemprefix - local num - num = numstr:match("^([IVXL]+)") - if num then - return roman2number(num), "UpperRoman", numdelim - end - num = numstr:match("^([ivxl]+)") - if num then - return roman2number(string.upper(num)), "LowerRoman", numdelim - end - num = numstr:match("^([A-Z])") - if num then - return string.byte(num) - string.byte("A") + 1, "UpperAlpha", numdelim - end - num = numstr:match("^([a-z])") - if num then - return string.byte(num) - string.byte("a") + 1, "LowerAlpha", numdelim + if not p then + table.insert(buf, "\\markdownRendererJekyllDataEnd") end - return math.floor(tonumber(numstr) or 1), "Decimal", numdelim - end - local function fancylist(items,tight,start) - local startnum, numstyle, numdelim = sniffstyle(start) - return writer.fancylist(items,tight, - options.startNumber and startnum, - numstyle or "Decimal", - numdelim or "Default") + return buf end + end, extend_reader = function(self) + local parsers = self.parsers + local writer = self.writer - 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 JekyllData + = Cmt( C((parsers.line - P("---") - P("..."))^0) + , function(s, i, text) -- luacheck: ignore s i + local data + local ran_ok, _ = pcall(function() + local tinyyaml = require("markdown-tinyyaml") + data = tinyyaml.parse(text, {timestamps=false}) + end) + if ran_ok and data ~= nil then + return true, writer.jekyllData(data, function(s) + return self.parser_functions.parse_blocks_nested(s) + end, nil) + else + return false + end + end + ) + + local UnexpectedJekyllData + = P("---") + * parsers.blankline / 0 + * #(-parsers.blankline) -- if followed by blank, it's thematic break + * JekyllData + * (P("---") + P("...")) - self.update_rule("OrderedList", FancyList) + local ExpectedJekyllData + = ( P("---") + * parsers.blankline / 0 + * #(-parsers.blankline) -- if followed by blank, it's thematic break + )^-1 + * JekyllData + * (P("---") + P("..."))^-1 + + self.insert_pattern("Block before Blockquote", + UnexpectedJekyllData, "UnexpectedJekyllData") + if expect_jekyll_data then + self.update_rule("ExpectedJekyllData", function() return ExpectedJekyllData end) + end end } end @@ -24132,6 +24818,11 @@ function M.new(options) % \begin{macrocode} local extensions = {} + if options.bracketedSpans then + local bracketed_spans_extension = M.extensions.bracketed_spans() + table.insert(extensions, bracketed_spans_extension) + end + if options.contentBlocks then local content_blocks_extension = M.extensions.content_blocks( options.contentBlocksLanguageMap) @@ -24150,6 +24841,12 @@ function M.new(options) table.insert(extensions, fenced_code_extension) end + if options.fencedDivs then + local fenced_div_extension = M.extensions.fenced_divs( + options.blankBeforeDivFence) + table.insert(extensions, fenced_div_extension) + end + if options.headerAttributes then local header_attributes_extension = M.extensions.header_attributes() table.insert(extensions, header_attributes_extension) @@ -24870,14 +25567,14 @@ end % % The \mdef{markdownPrepare} macro contains the Lua code that is executed prior % to any conversion from markdown to plain \TeX{}. It exposes the -% \luamref{convert} function for the use by any further Lua code. +% `convert` function for the use by any further Lua code. % % \end{markdown} % \begin{macrocode} \def\markdownPrepare{% % \end{macrocode} % \begin{markdown} -% First, ensure that the \mref{markdownOptionCacheDir} directory exists. +% First, ensure that the \Opt{cacheDir} directory exists. % \end{markdown} % \begin{macrocode} local lfs = require("lfs") @@ -24973,7 +25670,7 @@ end % \begin{markdown} % % The \mref{markdownReadAndConvert} macro is largely a rewrite of the -% \Hologo{LaTeX2e} \mref{filecontents} macro to plain \TeX{}. +% \Hologo{LaTeX2e} `\filecontents` macro to plain \TeX{}. % % \end{markdown} % \begin{macrocode} @@ -24985,7 +25682,7 @@ end % backslash as an ordinary character inside the macro definition. Likewise, % swap the character codes of the percent sign (`\%`) and the ampersand (`@`), % so that we can remove percent signs from the beginning of lines when -% \mref{markdownOptionStripPercentSigns} is enabled. +% \Opt{stripPercentSigns} is enabled. % \end{markdown} % \begin{macrocode} \catcode`\^^M=13% @@ -24999,7 +25696,7 @@ end % \end{macrocode} % \begin{markdown} % If we are not reading markdown documents from the frozen cache, -% open the \mref{markdownOptionInputTempFileName} file for writing. +% open the \Opt{inputTempFileName} file for writing. % \end{markdown} % \begin{macrocode} |markdownIfOption{frozenCache}{}{@ @@ -25024,7 +25721,7 @@ end % \begin{markdown} % The \mdef{markdownReadAndConvertStripPercentSigns} macro will process the % individual lines of output, stipping away leading percent signs (`\%`) when -% \mref{markdownOptionStripPercentSigns} is enabled. +% \Opt{stripPercentSigns} is enabled. % Notice the use of the comments (`@`) to ensure that the entire macro is at % a single line and therefore no (active) newline symbols % (`^^M`) are produced. @@ -25060,7 +25757,7 @@ end % \begin{markdown} % If we are not reading markdown documents from the frozen cache and the ending % token sequence does not appear in the line, store the line in the -% \mref{markdownOptionInputTempFileName} file. +% \Opt{inputTempFileName} file. % If we are reading markdown documents from the frozen cache and the % ending token sequence does not appear in the line, gobble the line. % \end{markdown} @@ -25073,10 +25770,10 @@ end % \end{macrocode} % \begin{markdown} % When the ending token sequence appears in the line, make the next newline -% character close the \mref{markdownOptionInputTempFileName} file, return the +% character close the \Opt{inputTempFileName} file, return the % character categories back to the former state, convert the -% \mref{markdownOptionInputTempFileName} file from markdown to plain \TeX{}, -% \mref{input} the result of the conversion, and expand the ending control +% \Opt{inputTempFileName} file from markdown to plain \TeX{}, +% `\input` the result of the conversion, and expand the ending control % sequence. % \end{markdown} % \begin{macrocode} @@ -25181,10 +25878,10 @@ end % whether the shell access is enabled (`1`), disabled (`0`), or restricted % (`2`). % -% Inherit the value of the the \mref{pdfshellescape} (Lua\TeX{}, \Hologo{pdfTeX}) -% or the \mref{shellescape} (\Hologo{XeTeX}) commands. If neither of these +% Inherit the value of the 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 -% \luamref{status.shell_escape} configuration item. +% `status.shell_escape` configuration item. % % If you cannot detect, whether the shell access is enabled, act as if it were. % @@ -25210,7 +25907,7 @@ end % % 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 \luamref{os.execute} method otherwise. +% unavailable, or by using the Lua `os.execute` method otherwise. % % \end{markdown} % \begin{macrocode} @@ -25245,8 +25942,8 @@ end % % 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 \luamref{print} function in the same manner it -% would use the \luamref{tex.print} method. +% engine, but it can use the `print` function in the same manner it +% would use the `tex.print` method. % % \end{markdown} % \begin{macrocode} @@ -25262,7 +25959,7 @@ end |gdef|markdownLuaExecute#1{% % \end{macrocode} % \begin{markdown} -% Create the file \mref{markdownOptionHelperScriptFileName} and fill it with the +% 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} @@ -25279,7 +25976,7 @@ end end) % \end{macrocode} % \begin{markdown} -% If there was an error, use the file \mref{markdownOptionErrorTempFileName} to +% If there was an error, use the file \Opt{errorTempFileName} to % store the error message. % \end{markdown} % \begin{macrocode} @@ -25299,9 +25996,9 @@ end |immediate|closeout|markdownOutputFileStream % \end{macrocode} % \begin{markdown} -% Execute the generated \mref{markdownOptionHelperScriptFileName} Lua script using +% Execute the generated \Opt{helperScriptFileName} Lua script using % the \TeX{}Lua binary and store the output in the -% \mref{markdownOptionOutputTempFileName} file. +% \Opt{outputTempFileName} file. % \end{markdown} % \begin{macrocode} |markdownInfo{Executing a helper Lua script from the file @@ -25313,7 +26010,7 @@ end /|markdownOptionOutputTempFileName"}% % \end{macrocode} % \begin{markdown} -% \mref{input} the generated \mref{markdownOptionOutputTempFileName} file. +% `\input` the generated \Opt{outputTempFileName} file. % \end{markdown} % \begin{macrocode} |input|markdownOptionOutputTempFileName|relax}% @@ -25340,8 +26037,8 @@ end % \begin{markdown} % % The direct Lua access version of the \mref{markdownLuaExecute} macro is defined -% in terms of the \mref{directlua} primitive. The \luamref{print} function is set as -% an alias to the \luamref{tex.print} method in order to mimic the behaviour of the +% 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:luabridge>, % % \end{markdown} @@ -25520,8 +26217,8 @@ end % %### Logging Facilities % The \LaTeX{} implementation redefines the plain \TeX{} logging macros (see -% Section <#sec:texinterfacelogging>) to use the \LaTeX{} \mref{PackageInfo}, -% \mref{PackageWarning}, and \mref{PackageError} macros. +% Section <#sec:texinterfacelogging>) to use the \LaTeX{} `\PackageInfo`, +% `\PackageWarning`, and `\PackageError` macros. % % \end{markdown} % \begin{macrocode} @@ -25660,7 +26357,7 @@ end % % If the infostring starts with `dot …`, we redefine the fenced code block % token renderer prototype, so that it typesets the code block via Graphviz -% tools if and only if the \mref{markdownOptionFrozenCache} plain \TeX{} option is +% tools if and only if the \Opt{frozenCache} plain \TeX{} option is % disabled and the code block has not been previously typeset: % % \end{markdown} @@ -25723,8 +26420,8 @@ end % \end{macrocode} % \begin{markdown} % -% We define the \mref{markdown@witiko@graphicx@http@counter} counter to enumerate -% the images for caching and the \mref{markdown@witiko@graphicx@http@filename} +% We define the \mdef{markdown@witiko@graphicx@http@counter} counter to enumerate +% the images for caching and the \mdef{markdown@witiko@graphicx@http@filename} % command, which will store the pathname of the file containing the pathname % of the downloaded image file. % @@ -25738,7 +26435,7 @@ end % \end{macrocode} % \begin{markdown} % -% We define the \mref{markdown@witiko@graphicx@http@download} command, which will +% We define the \mdef{markdown@witiko@graphicx@http@download} command, which will % receive two arguments that correspond to the URL of the online image and to % the pathname, where the online image should be downloaded. The command will % produce a shell command that tries to downloads the online image to the @@ -25774,7 +26471,7 @@ end % \begin{markdown} % % The image will be downloaded only if the image URL has the http or https -% protocols and the \mref{markdownOptionFrozenCache} plain \TeX{} option is disabled: +% protocols and the \Opt{frozenCache} plain \TeX{} option is disabled: % % \end{markdown} % \begin{macrocode} @@ -25786,7 +26483,7 @@ end % \end{macrocode} % \begin{markdown} % -% The image will be downloaded to the pathname \mref{markdownOptionCacheDir}`/`\meta{the MD5 digest of the image URL}`.`\meta{the suffix of the % image URL}: % @@ -26255,7 +26952,7 @@ end % \begin{markdown} % % If identifier attributes appear at the beginning of a section, we make the -% next heading produce the \mref{label} macro. +% next heading produce the `\label` macro. % % \end{markdown} % \begin{macrocode} @@ -26439,9 +27136,9 @@ end % \begin{markdown} % %#### Citations -% Here is a basic implementation for citations that uses the \LaTeX{} \mref{cite} -% macro. There are also implementations that use the \pkg{natbib} \mref{citep}, -% and \mref{citet} macros, and the Bib\LaTeX{} \mref{autocites} and \mref{textcites} +% Here is a basic implementation for citations that uses the \LaTeX{} `\cite` +% macro. There are also implementations that use the \pkg{natbib} `\citep`, +% and `\citet` macros, and the Bib\LaTeX{} `\autocites` and `\textcites` % macros. These implementations will be used, when the respective packages are % loaded. % @@ -26849,8 +27546,8 @@ end % %#### YAML Metadata {#latexyamlmetadata} % -% The default setup of \acro{yaml} metadata will invoke the \mref{title}, -% \mref{author}, and \mref{date} macros when scalar values for keys that +% The default setup of \acro{yaml} metadata will invoke the `\title`, +% `\author`, and `\date` macros when scalar values for keys that % correspond to the `title`, `author`, and `date` relative wildcards are % encountered, respectively. % @@ -26868,10 +27565,10 @@ end % \begin{markdown} % % To complement the default setup of our key--values, we will use -% the \mref{maketitle} macro to typeset the title page of a document +% the `\maketitle` macro to typeset the title page of a document % at the end of \acro{yaml} metadata. If we are in the preamble, we will wait % macro until after the beginning of the document. Otherwise, we will use -% the \mref{maketitle} macro straight away. +% the `\maketitle` macro straight away. % % \end{markdown} % \begin{macrocode} @@ -26984,7 +27681,7 @@ end % after supplying the missing plain \TeX{} macros. % % When buffering user input, we should disable the bytes with the high bit set, -% since these are made active by the \mref{enableregime} macro. We will do this +% since these are made active by the `\enableregime` macro. We will do this % by redefining the \mref{markdownMakeOther} macro accordingly. The code is % courtesy of Scott Pakin, the creator of the \pkg{filecontents} \LaTeX{} % package. @@ -27169,7 +27866,7 @@ end % \begin{markdown} % % The code fence infostring is used as a name from the \Hologo{ConTeXt} -% \mref{definetyping} macro. This allows the user to set up code highlighting +% `\definetyping` macro. This allows the user to set up code highlighting % mapping as follows: % ````` tex % % Map the `TEX` syntax highlighter to the `latex` infostring. diff --git a/macros/generic/markdown/markdown.html b/macros/generic/markdown/markdown.html index 8f66e86c6e..4d62b54fc2 100644 --- a/macros/generic/markdown/markdown.html +++ b/macros/generic/markdown/markdown.html @@ -84,7 +84,7 @@

Markdown Package User Manual

Vít Novotný

-

2.18.0-0-gd8ae860 2022-10-30

+

2.19.0-0-g80fcf20 2022-12-23