From e11a34ebeb96a1e568cc937df3b614062ddb0adf Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 19 Feb 2024 03:01:14 +0000 Subject: CTAN sync 202402190301 --- macros/generic/markdown/examples/context-mkiv.tex | 6 +- macros/generic/markdown/examples/example.md | 16 +- macros/generic/markdown/examples/latex-luatex.tex | 16 +- macros/generic/markdown/examples/latex-pdftex.tex | 10 +- macros/generic/markdown/examples/optex.tex | 379 ++++++++++++++++++++++ 5 files changed, 405 insertions(+), 22 deletions(-) create mode 100644 macros/generic/markdown/examples/optex.tex (limited to 'macros/generic/markdown/examples') diff --git a/macros/generic/markdown/examples/context-mkiv.tex b/macros/generic/markdown/examples/context-mkiv.tex index 4c05059f3a..8b000e43ed 100644 --- a/macros/generic/markdown/examples/context-mkiv.tex +++ b/macros/generic/markdown/examples/context-mkiv.tex @@ -58,8 +58,10 @@ kpse.set_program_name("luatex") \starttext % Typeset the document `example.md` by letting the Markdown package handle -% the conversion internally. -\inputmarkdown{./example.md} +% the conversion internally. Optionally, we can specify additional options +% between the square brackets similarly to the command `\setupmarkdown`. +% Unlike `\setupmarkdown`, the options will only apply for this document. +\inputmarkdown[smart_ellipses = yes]{./example.md} % Typeset the document `example.tex` that we prepared separately using the % Lua command-line interface and that contains a plain TeX representation diff --git a/macros/generic/markdown/examples/example.md b/macros/generic/markdown/examples/example.md index 8819ef5b67..5e5457088e 100644 --- a/macros/generic/markdown/examples/example.md +++ b/macros/generic/markdown/examples/example.md @@ -41,9 +41,7 @@ This is a table: This is a bullet list: -* The first item of a bullet list - - that spans several paragraphs, +* The first item of a bullet list, * the second item of a bullet list, @@ -57,9 +55,7 @@ This is a compact bullet list: This is an ordered list: -5. The first item of an ordered list - - that spans several paragraphs, +5. The first item of an ordered list, 6. the second item of an ordered list, @@ -67,9 +63,7 @@ This is an ordered list: This is a fancy ordered list: -e) The first item of an ordered list - - that spans several paragraphs, +e) The first item of an ordered list, f) the second item of an ordered list, @@ -77,9 +71,7 @@ g) the third item of an ordered list. This is an ordered list using hash enumerators: -#. The first item of an ordered list - - that spans several paragraphs, +#. The first item of an ordered list, #. the second item of an ordered list, diff --git a/macros/generic/markdown/examples/latex-luatex.tex b/macros/generic/markdown/examples/latex-luatex.tex index 18b16bf776..9b2e623408 100644 --- a/macros/generic/markdown/examples/latex-luatex.tex +++ b/macros/generic/markdown/examples/latex-luatex.tex @@ -1,5 +1,15 @@ \documentclass{book} \usepackage{polyglossia} +% work around a bug in polyglossia +\makeatletter +\ExplSyntaxOn +\pretocmd\xpg@set@alias@values{% + \prop_if_exist:cF { xpg@alias@keyvals@#1@#4 } + { \prop_new:c {xpg@alias@keyvals@#1@#4} } +}{}{} +\ExplSyntaxOff +\makeatother +% end of workaround \setmainlanguage{english} \usepackage{fontspec} \usepackage{booktabs} @@ -28,13 +38,13 @@ texMathSingleBackslash, ]{markdown} % Set the document metadata using a YAML metadata block. -\begin{markdown*}{hybrid} +\begin{markdown}[hybrid] --- title: An Example *Markdown* Document -author: Vít Novotný +author: Vít Starý Novotný date: \today --- -\end{markdown*} +\end{markdown} \begin{document} % Typeset the document `example.md` by letting the Markdown package handle % the conversion internally. diff --git a/macros/generic/markdown/examples/latex-pdftex.tex b/macros/generic/markdown/examples/latex-pdftex.tex index db6cbea8c8..7d188d75f2 100644 --- a/macros/generic/markdown/examples/latex-pdftex.tex +++ b/macros/generic/markdown/examples/latex-pdftex.tex @@ -29,13 +29,13 @@ texMathSingleBackslash, ]{markdown} % Set the document metadata using a YAML metadata block. -\begin{markdown*}{hybrid} +\begin{markdown}[hybrid] --- title: An Example *Markdown* Document -author: Vít Novotný +author: Vít Starý Novotný date: \today --- -\end{markdown*} +\end{markdown} \begin{document} % Typeset the document `example.md` by letting the Markdown package handle % the conversion internally. @@ -55,7 +55,7 @@ date: \today Here are some non-ASCII characters: *ěščřžýáíé*. \end{markdown} -\begin{markdown*}{html, hybrid} +\begin{markdown}[hybrid] Here is some HTML code mixed *with Markdown*. In \TeX, the HTML code will be silently ignored, whereas in \TeX 4ht, the HTML code will be passed through to the output: @@ -72,5 +72,5 @@ through to the output: 10 -\end{markdown*} +\end{markdown} \end{document} diff --git a/macros/generic/markdown/examples/optex.tex b/macros/generic/markdown/examples/optex.tex new file mode 100644 index 0000000000..d39369f6b3 --- /dev/null +++ b/macros/generic/markdown/examples/optex.tex @@ -0,0 +1,379 @@ +\fontfam[lm] +\hyperlinks\Blue\Blue + +% Set options of the Markdown module +\_def \markdownOptions { + cacheDir="_markdown_example", + definitionLists=true, + fencedCode=true, + hashEnumerators=true, + smartEllipses=true, + strikeThrough=true, +} + +% Set renderers of the Markdown module +%% Attribute Renderers +%%% TODO + +%% Block Quote Renderers +\_def \markdownRendererBlockQuoteBegin {\_begblock} +\_def \markdownRendererBlockQuoteEnd {\_endblock} + +%% Bracketed Spans Attribute Context Renderers +%%% TODO + +%% Bullet List Renderers +\_def \markdownRendererUlBegin {\_begitems \_itemskipamount=\_olistskipamount} +\_def \markdownRendererUlBeginTight {\_begitems} +\_def \markdownRendererUlItem {\_startitem} +\_def \markdownRendererUlItemEnd {\_par} +\_def \markdownRendererUlEnd {\_enditems} +\_def \markdownRendererUlEndTight {\_enditems} + +%% Citations Renderers +%%% TODO + +%% Code Block Renderers +\_def \markdownRendererInputVerbatim #1{\_verbinput (-) {#1} } +\_def \markdownRendererInputFencedCode #1#2{\_verbinput \_hisyntax{#2} (-) {#1} } + +%% Code Span Renderer +\_def \markdownRendererCodeSpan #1{{\_ttfont #1}} + +%% Code Span Attribute Context Renderers +%%% TODO + +%% Content Block Renderers +%%% TODO + +%% Definition List Renderers +\_sdef{_item:d}{\_aftergroup\dword} +\_def \dword #1#2{{\bf#2 }\ignorespaces} +\_def \markdownRendererDlBegin {\_begitems \_style d \_itemskipamount=\_olistskipamount} +\_def \markdownRendererDlBeginTight {\_begitems \_style d} +\_def \markdownRendererDlItem {% + \_begingroup + \_def \markdownRendererInterblockSeparator {% + \_par + \_advance\_leftskip by\_iindent + \_def \markdownRendererInterblockSeparator {\_par}% + }% + \_startitem +} +\_def \markdownRendererDlItemEnd {% + \_par + \_endgroup +} +\_def \markdownRendererDlDefinitionBegin {} +\_def \markdownRendererDlDefinitionEnd #1{% + \_ifx #1\markdownRendererDlDefinitionBegin + \_firstnoindent + \markdownRendererInterblockSeparator + \_vskip\_itemskipamount + \_fi + #1% +} +\_def \markdownRendererDlEnd {\_enditems} +\_def \markdownRendererDlEndTight {\_enditems} + +%% Ellipsis Renderer +\_def \markdownRendererEllipsis {$\_ldots$} + +%% Emphasis Renderers +\_def \markdownRendererEmphasis #1{{\_em #1}} +\_def \markdownRendererStrongEmphasis #1{{\_bf #1}} + +%% Fenced Code Attribute Context Renderers +%%% TODO + +%% Fenced Div Attribute Context Renderers +%%% TODO + +%% Header Attribute Context Renderers +%%% TODO + +%% Heading Renderers +\_def \markdownRendererHeadingOne #1{\_printtit{#1}} +\_def \markdownRendererHeadingTwo #1{\_inchap{#1}} +\_def \markdownRendererHeadingThree #1{\_insec{#1}} +\_def \markdownRendererHeadingFour #1{\_insecc{#1}} +\_def \markdownRendererHeadingFive #1{{\_bf #1}\_firstnoindent} +\_def \markdownRendererHeadingSix #1{#1\_firstnoindent} + +%% HTML Comment Renderers +%%% TODO + +%% HTML Tag and Element Renderers +%%% TODO + +%% Image Renderer +\_def \markdownRendererImage #1#2#3#4{% + \_topinsert + \_centerline{\_inspic{#3}}% + \_cskip + \_caption/f #4% + \_par + \_endinsert +} + +%% Image Attribute Context Renderers +%%% TODO + +%% Interblock Separator Renderer +\_def \markdownRendererInterblockSeparator {\_par} +\_def \markdownRendererParagraphSeparator {\markdownRendererInterblockSeparator} + +%% Line Block Renderers +%%% TODO + +%% Line Break Renderers +\_def \markdownRendererSoftLineBreak { } +\_def \markdownRendererHardLineBreak {\_nl} + +%% Link Renderer +\_def \markdownRendererLink #1#2#3#4{\_ea\_ulink\_ea[\_expanded{#3}]{#1}} + +%% Link Attribute Context Renderers +%%% TODO + +%% Markdown Document Renderers +\_let \markdownRendererDocumentBegin \_relax +\_let \markdownRendererDocumentEnd \_relax + +%% Non-Breaking Space Renderer +\_def \markdownRendererNbsp {~} + +%% Note Renderer +%%% TODO + +%% Ordered List Renderers +\_def \markdownRendererOlBegin {\_begitems \_style n \_itemskipamount=\_olistskipamount} +\_def \markdownRendererOlBeginTight {\_begitems \_style n} +\_def \markdownRendererFancyOlBegin #1#2{\markdownRendererOlBegin} +\_def \markdownRendererFancyOlBeginTight #1#2{\markdownRendererOlBeginTight} +\_def \markdownRendererOlItem {\_startitem} +\_def \markdownRendererOlItemEnd {\_par} +\_def \markdownRendererOlItemWithNumber #1{\_itemnum=#1 \_advance\_itemnum by -1 \_startitem} +\_let \markdownRendererFancyOlItem \markdownRendererOlItem +\_let \markdownRendererFancyOlItemEnd \markdownRendererOlItemEnd +\_let \markdownRendererFancyOlItemWithNumber \markdownRendererOlItemWithNumber +\_def \markdownRendererOlEnd {\_enditems} +\_def \markdownRendererOlEndTight {\_enditems} +\_let \markdownRendererFancyOlEndTight \markdownRendererOlEndTight +\_let \markdownRendererFancyOlEnd \markdownRendererOlEnd + +%% Raw Content Renderers +%%% TODO + +%% Section Renderers +\_let \markdownRendererSectionBegin \_relax +\_let \markdownRendererSectionEnd \_relax + +%% Replacement Character Renderers +\_def \markdownRendererReplacementCharacter {^^^^fffd} + +%% Special Character Renderers +\_edef \markdownRendererAmpersand #1{\_csstring\&} +\_edef \markdownRendererBackslash #1{\_csstring\\} +\_edef \markdownRendererCircumflex #1{\_csstring\^} +\_edef \markdownRendererDollarSign #1{\_csstring\$} +\_edef \markdownRendererHash #1{\_csstring\#} +\_edef \markdownRendererLeftBrace #1{\_csstring\{} +\_edef \markdownRendererPercentSign #1{\_csstring\%} +\_def \markdownRendererPipe #1{|} +\_edef \markdownRendererRightBrace #1{\_csstring\}} +\_edef \markdownRendererTilde #1{\_csstring\~} +\_def \markdownRendererUnderscore #1{_} + +%% Strike-Through Renderer +\_def \markdownRendererStrikeThrough #1{% + \_setbox0=\_hbox {#1}% + \_leavevmode + \_rlap {\raise.5ex \_hbox to \_wd0 {\_hfil \_hrulefill \_hfil}}% + \_box0 +} + +%% Subscript Renderer +%%% TODO + +%% Superscript Renderer +%%% TODO + +%% Table Renderer +%%% TODO + +%% TeX Math Renderers +%%% TODO + +%% Thematic Break Renderer +\_def \markdownRendererThematicBreak {% + \_vskip 0.5\_baselineskip + \_hrule + \_par + \_vskip 0.5\_baselineskip + \_firstnoindent +} + +%% Tickbox Renderers +%%% TODO + +%% YAML Metadata Renderers +\_let \markdownRendererJekyllDataBegin \_relax +\_let \markdownRendererJekyllDataEnd \_relax +\_def \markdownRendererJekyllDataMappingBegin #1#2{} +\_let \markdownRendererJekyllDataMappingEnd \_relax +\_def \markdownRendererJekyllDataSequenceBegin #1#2{} +\_let \markdownRendererJekyllDataSequenceEnd \_relax +\_def \markdownRendererJekyllDataBoolean #1#2{} +\_def \markdownRendererJekyllDataNumber #1#2{} +\_def \markdownRendererJekyllDataString #1#2{} +\_def \markdownRendererJekyllDataEmpty #1{} + +% Load the Markdown module and set TeX macros for the Markdown module +\_directlua{ + kpse = require("kpse") + kpse.set_program_name("luatex") + markdown = require("markdown") +} + +\_eoldef \markdownBegin #1{% #1 includes the end of the current line, parameters can be here + \_def\_markdownParams{#1}% + \_bgroup \_setverb \_savemathsb \_endlinechar=`\^^J + \_markdownBeginA +} + +\_ea\_def \_ea\_markdownBeginA \_ea#\_ea1\_csstring\\markdownEnd#2^^J{% + \_restoremathsb \_egroup + \_bgroup + \_catcode`\%=12\_relax + \_catcode`\#=12\_relax + \_directlua { + % Prepare a table of options. + local defaultOptions = {\markdownOptions} + local currentOptions = {\_markdownParams} + local options = {} + for k,v in pairs(defaultOptions) do options[k] = v end + for k,v in pairs(currentOptions) do options[k] = v end + % Ensure that the cache directory exists. + if options.cacheDir then + local lfs = require("lfs") + if not lfs.isdir(options.cacheDir) then + assert(lfs.mkdir(options.cacheDir)) + end + end + % Convert Markdown to TeX and print it. + local convert = markdown.new(options) + local input = "\_luaescapestring{#1}" + local output = convert(input) + tex.print(output) + }% + \_egroup +} + +% Set the document metadata using a YAML metadata block +\markdownBegin hybrid=true,jekyllData=true +--- +title: An Example *Markdown* Document +author: Vít Starý Novotný +date: \today +--- + +# This is an H1 + +## This is an H2 + +### This is an H3 + +#### This is an H4 + +##### This is an H5 + +###### This is an H6 + +This is a text paragraph containing an ellipsis ... and followed by a +thematic break. + +*** + +This is inline `code`. This is a [link](http://google.cz "Google"). +This is an *emphasized* span of text. +This is a __strongly emphasized__ span of text. + + ![example image](example-image.png "An example image from Martin Scharrer's mwe package") + +This is a fenced code block: + +``` tex +\fontfam[LMfonts] +Hello World! \bye +``` + +This is a bullet list: + +* The first item of a bullet list, + +* the second item of a bullet list, + +* the third item of a bullet list. + +This is a compact bullet list: + +* The first item of a bullet list, +* the second item of a bullet list, +* the third item of a bullet list. + +This is an ordered list: + +5. The first item of an ordered list, + +6. the second item of an ordered list, + +7. the third item of an ordered list. + +This is an ordered list using hash enumerators: + +#. The first item of an ordered list, + +#. the second item of an ordered list, + +#. the third item of an ordered list. + +This is a compact ordered list: + +5. The first item of an ordered list, +6. the second item of an ordered list, +7. the third item of an ordered list. + +This is a compact ordered list using hash enumerators: + +#. The first item of an ordered list, +#. the second item of an ordered list, +#. the third item of an ordered list. + +This is a definition list: + +Term 1 + +: Definition 1 with some ~~removed text~~ + +Term 2 + +: Definition 2 + + Some code, part of Definition 2 + + Third paragraph of Definition 2. + +: Definition 3 + +This is a compact definition list: + +Term 1 +: Definition 1 +Term 2 +: Definition 2 +: Definition 3 + +\markdownEnd + +\bye -- cgit v1.2.3