diff options
author | Karl Berry <karl@freefriends.org> | 2022-12-23 21:03:50 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-12-23 21:03:50 +0000 |
commit | 8d383d484835575910b71ef5e1746d57be9afef3 (patch) | |
tree | 5d61e2067af838ba094af5faed2682ca07373ff1 /Master/texmf-dist/tex | |
parent | 23f484c87d10a1d39e2ea85bab67f04e17adff4a (diff) |
markdown (23dec22)
git-svn-id: svn://tug.org/texlive/trunk@65339 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/markdown/markdown.tex | 1063 | ||||
-rw-r--r-- | Master/texmf-dist/tex/luatex/markdown/markdown.lua | 909 |
2 files changed, 1102 insertions, 870 deletions
diff --git a/Master/texmf-dist/tex/generic/markdown/markdown.tex b/Master/texmf-dist/tex/generic/markdown/markdown.tex index 885c7598b09..bc769262a08 100644 --- a/Master/texmf-dist/tex/generic/markdown/markdown.tex +++ b/Master/texmf-dist/tex/generic/markdown/markdown.tex @@ -341,10 +341,18 @@ { boolean } { false } \__markdown_add_lua_option:nnn + { blankBeforeDivFence } + { boolean } + { false } +\__markdown_add_lua_option:nnn { blankBeforeHeading } { boolean } { false } \__markdown_add_lua_option:nnn + { bracketedSpans } + { boolean } + { false } +\__markdown_add_lua_option:nnn { breakableBlockquotes } { boolean } { false } @@ -376,6 +384,10 @@ { eagerCache } { boolean } { true } +\__markdown_add_lua_option:nnn + { expectJekyllData } + { boolean } + { false } \cs_generate_variant:Nn \__markdown_add_lua_option:nnn { nnV } @@ -384,10 +396,6 @@ { clist } \c_empty_clist \__markdown_add_lua_option:nnn - { expectJekyllData } - { boolean } - { false } -\__markdown_add_lua_option:nnn { fancyLists } { boolean } { false } @@ -396,15 +404,11 @@ { boolean } { false } \__markdown_add_lua_option:nnn - { finalizeCache } + { fencedDivs } { boolean } { false } \__markdown_add_lua_option:nnn - { footnotes } - { boolean } - { false } -\__markdown_add_lua_option:nnn - { notes } + { finalizeCache } { boolean } { false } \__markdown_add_lua_option:nnn @@ -444,6 +448,14 @@ { boolean } { false } \__markdown_add_lua_option:nnn + { footnotes } + { boolean } + { false } +\__markdown_add_lua_option:nnn + { notes } + { boolean } + { false } +\__markdown_add_lua_option:nnn { pipeTables } { boolean } { false } @@ -512,8 +524,8 @@ { boolean } { true } \ExplSyntaxOff -\def\markdownLastModified{2022-10-30}% -\def\markdownVersion{2.18.0-0-gd8ae860}% +\def\markdownLastModified{2022-12-23}% +\def\markdownVersion{2.19.0-0-g80fcf20}% \let\markdownBegin\relax \let\markdownEnd\relax \let\markdownInput\relax @@ -666,952 +678,961 @@ \seq_new:N \g__markdown_renderers_seq \prop_new:N \g__markdown_renderer_arities_prop \ExplSyntaxOff -\def\markdownRendererTickedBox{% - \markdownRendererTickedBoxPrototype}% +\def\markdownRendererAttributeIdentifier{% + \markdownRendererAttributeIdentifierPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { tickedBox } + { attributeIdentifier } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { tickedBox } - { 0 } + { attributeIdentifier } + { 1 } \ExplSyntaxOff -\def\markdownRendererHalfTickedBox{% - \markdownRendererHalfTickedBoxPrototype}% +\def\markdownRendererAttributeClassName{% + \markdownRendererAttributeClassNamePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { halfTickedBox } + { attributeClassName } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { halfTickedBox } - { 0 } + { attributeClassName } + { 1 } \ExplSyntaxOff -\def\markdownRendererUntickedBox{% - \markdownRendererUntickedBoxPrototype}% +\def\markdownRendererAttributeKeyValue{% + \markdownRendererAttributeKeyValuePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { untickedBox } + { attributeKeyValue } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { untickedBox } - { 0 } + { attributeKeyValue } + { 2 } \ExplSyntaxOff -\def\markdownRendererDocumentBegin{% - \markdownRendererDocumentBeginPrototype}% +\def\markdownRendererBlockQuoteBegin{% + \markdownRendererBlockQuoteBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { documentBegin } + { blockQuoteBegin } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { documentBegin } + { blockQuoteBegin } { 0 } \ExplSyntaxOff -\def\markdownRendererDocumentEnd{% - \markdownRendererDocumentEndPrototype}% +\def\markdownRendererBlockQuoteEnd{% + \markdownRendererBlockQuoteEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { documentEnd } + { blockQuoteEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { documentEnd } + { blockQuoteEnd } { 0 } \ExplSyntaxOff -\def\markdownRendererInterblockSeparator{% - \markdownRendererInterblockSeparatorPrototype}% +\def\markdownRendererBracketedSpanAttributeContextBegin{% + \markdownRendererBracketedSpanAttributeContextBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { interblockSeparator } + { bracketedSpanAttributeContextBegin } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { interblockSeparator } + { bracketedSpanAttributeContextBegin } { 0 } \ExplSyntaxOff -\def\markdownRendererLineBreak{% - \markdownRendererLineBreakPrototype}% +\def\markdownRendererBracketedSpanAttributeContextEnd{% + \markdownRendererBracketedSpanAttributeContextEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { lineBreak } + { bracketedSpanAttributeContextEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { lineBreak } + { bracketedSpanAttributeContextEnd } { 0 } \ExplSyntaxOff -\def\markdownRendererEllipsis{% - \markdownRendererEllipsisPrototype}% +\def\markdownRendererUlBegin{% + \markdownRendererUlBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { ellipsis } + { ulBegin } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { ellipsis } + { ulBegin } { 0 } \ExplSyntaxOff -\def\markdownRendererNbsp{% - \markdownRendererNbspPrototype}% +\def\markdownRendererUlBeginTight{% + \markdownRendererUlBeginTightPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { nbsp } + { ulBeginTight } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { nbsp } + { ulBeginTight } { 0 } \ExplSyntaxOff -\def\markdownRendererLeftBrace{% - \markdownRendererLeftBracePrototype}% +\def\markdownRendererUlItem{% + \markdownRendererUlItemPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { leftBrace } + { ulItem } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { leftBrace } + { ulItem } { 0 } \ExplSyntaxOff -\def\markdownRendererRightBrace{% - \markdownRendererRightBracePrototype}% +\def\markdownRendererUlItemEnd{% + \markdownRendererUlItemEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { rightBrace } + { ulItemEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { rightBrace } + { ulItemEnd } { 0 } \ExplSyntaxOff -\def\markdownRendererDollarSign{% - \markdownRendererDollarSignPrototype}% +\def\markdownRendererUlEnd{% + \markdownRendererUlEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { dollarSign } + { ulEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { dollarSign } + { ulEnd } { 0 } \ExplSyntaxOff -\def\markdownRendererPercentSign{% - \markdownRendererPercentSignPrototype}% +\def\markdownRendererUlEndTight{% + \markdownRendererUlEndTightPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { percentSign } + { ulEndTight } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { percentSign } + { ulEndTight } { 0 } \ExplSyntaxOff -\def\markdownRendererAmpersand{% - \markdownRendererAmpersandPrototype}% +\def\markdownRendererInputVerbatim{% + \markdownRendererInputVerbatimPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { ampersand } + { inputVerbatim } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { ampersand } - { 0 } + { inputVerbatim } + { 1 } \ExplSyntaxOff -\def\markdownRendererUnderscore{% - \markdownRendererUnderscorePrototype}% +\def\markdownRendererInputFencedCode{% + \markdownRendererInputFencedCodePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { underscore } + { inputFencedCode } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { underscore } - { 0 } + { inputFencedCode } + { 2 } \ExplSyntaxOff -\def\markdownRendererHash{% - \markdownRendererHashPrototype}% +\def\markdownRendererCodeSpan{% + \markdownRendererCodeSpanPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { hash } + { codeSpan } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { hash } - { 0 } + { codeSpan } + { 1 } \ExplSyntaxOff -\def\markdownRendererCircumflex{% - \markdownRendererCircumflexPrototype}% +\def\markdownRendererContentBlock{% + \markdownRendererContentBlockPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { circumflex } + { contentBlock } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { circumflex } - { 0 } + { contentBlock } + { 4 } \ExplSyntaxOff -\def\markdownRendererBackslash{% - \markdownRendererBackslashPrototype}% +\def\markdownRendererContentBlockOnlineImage{% + \markdownRendererContentBlockOnlineImagePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { backslash } + { contentBlockOnlineImage } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { backslash } - { 0 } + { contentBlockOnlineImage } + { 4 } \ExplSyntaxOff -\def\markdownRendererTilde{% - \markdownRendererTildePrototype}% +\def\markdownRendererContentBlockCode{% + \markdownRendererContentBlockCodePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { tilde } + { contentBlockCode } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { tilde } - { 0 } + { contentBlockCode } + { 5 } \ExplSyntaxOff -\def\markdownRendererPipe{% - \markdownRendererPipePrototype}% +\def\markdownRendererDlBegin{% + \markdownRendererDlBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { pipe } + { dlBegin } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { pipe } + { dlBegin } { 0 } \ExplSyntaxOff -\def\markdownRendererCodeSpan{% - \markdownRendererCodeSpanPrototype}% +\def\markdownRendererDlBeginTight{% + \markdownRendererDlBeginTightPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { codeSpan } + { dlBeginTight } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { codeSpan } - { 1 } + { dlBeginTight } + { 0 } \ExplSyntaxOff -\def\markdownRendererLink{% - \markdownRendererLinkPrototype}% +\def\markdownRendererDlItem{% + \markdownRendererDlItemPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { link } + { dlItem } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { link } - { 4 } + { dlItem } + { 1 } \ExplSyntaxOff -\def\markdownRendererImage{% - \markdownRendererImagePrototype}% +\def\markdownRendererDlItemEnd{% + \markdownRendererDlItemEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { image } + { dlItemEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { image } - { 4 } + { dlItemEnd } + { 0 } \ExplSyntaxOff -\def\markdownRendererContentBlock{% - \markdownRendererContentBlockPrototype}% +\def\markdownRendererDlDefinitionBegin{% + \markdownRendererDlDefinitionBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { contentBlock } + { dlDefinitionBegin } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { contentBlock } - { 4 } + { dlDefinitionBegin } + { 0 } \ExplSyntaxOff -\def\markdownRendererContentBlockOnlineImage{% - \markdownRendererContentBlockOnlineImagePrototype}% +\def\markdownRendererDlDefinitionEnd{% + \markdownRendererDlDefinitionEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { contentBlockOnlineImage } + { dlDefinitionEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { contentBlockOnlineImage } - { 4 } + { dlDefinitionEnd } + { 0 } \ExplSyntaxOff -\def\markdownRendererContentBlockCode{% - \markdownRendererContentBlockCodePrototype}% +\def\markdownRendererDlEnd{% + \markdownRendererDlEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { contentBlockCode } + { dlEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { contentBlockCode } - { 5 } + { dlEnd } + { 0 } \ExplSyntaxOff -\def\markdownRendererUlBegin{% - \markdownRendererUlBeginPrototype}% +\def\markdownRendererDlEndTight{% + \markdownRendererDlEndTightPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { ulBegin } + { dlEndTight } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { ulBegin } + { dlEndTight } { 0 } \ExplSyntaxOff -\def\markdownRendererUlBeginTight{% - \markdownRendererUlBeginTightPrototype}% +\def\markdownRendererEllipsis{% + \markdownRendererEllipsisPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { ulBeginTight } + { ellipsis } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { ulBeginTight } + { ellipsis } { 0 } \ExplSyntaxOff -\def\markdownRendererUlItem{% - \markdownRendererUlItemPrototype}% +\def\markdownRendererEmphasis{% + \markdownRendererEmphasisPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { ulItem } + { emphasis } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { ulItem } - { 0 } + { emphasis } + { 1 } \ExplSyntaxOff -\def\markdownRendererUlItemEnd{% - \markdownRendererUlItemEndPrototype}% +\def\markdownRendererStrongEmphasis{% + \markdownRendererStrongEmphasisPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { ulItemEnd } + { strongEmphasis } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { ulItemEnd } - { 0 } + { strongEmphasis } + { 1 } \ExplSyntaxOff -\def\markdownRendererUlEnd{% - \markdownRendererUlEndPrototype}% +\def\markdownRendererFencedDivAttributeContextBegin{% + \markdownRendererFencedDivAttributeContextBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { ulEnd } + { fencedDivAttributeContextBegin } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { ulEnd } + { fencedDivAttributeContextBegin } { 0 } \ExplSyntaxOff -\def\markdownRendererUlEndTight{% - \markdownRendererUlEndTightPrototype}% +\def\markdownRendererFencedDivAttributeContextEnd{% + \markdownRendererFencedDivAttributeContextEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { ulEndTight } + { fencedDivAttributeContextEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { ulEndTight } + { fencedDivAttributeContextEnd } { 0 } \ExplSyntaxOff -\def\markdownRendererOlBegin{% - \markdownRendererOlBeginPrototype}% +\def\markdownRendererHeaderAttributeContextBegin{% + \markdownRendererHeaderAttributeContextBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { olBegin } + { headerAttributeContextBegin } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { olBegin } + { headerAttributeContextBegin } { 0 } \ExplSyntaxOff -\def\markdownRendererOlBeginTight{% - \markdownRendererOlBeginTightPrototype}% +\def\markdownRendererHeaderAttributeContextEnd{% + \markdownRendererHeaderAttributeContextEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { olBeginTight } + { headerAttributeContextEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { olBeginTight } + { headerAttributeContextEnd } { 0 } \ExplSyntaxOff -\def\markdownRendererFancyOlBegin{% - \markdownRendererFancyOlBeginPrototype}% +\def\markdownRendererHeadingOne{% + \markdownRendererHeadingOnePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { fancyOlBegin } + { headingOne } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { fancyOlBegin } - { 2 } + { headingOne } + { 1 } \ExplSyntaxOff -\def\markdownRendererFancyOlBeginTight{% - \markdownRendererFancyOlBeginTightPrototype}% +\def\markdownRendererHeadingTwo{% + \markdownRendererHeadingTwoPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { fancyOlBeginTight } + { headingTwo } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { fancyOlBeginTight } - { 2 } + { headingTwo } + { 1 } \ExplSyntaxOff -\def\markdownRendererOlItem{% - \markdownRendererOlItemPrototype}% +\def\markdownRendererHeadingThree{% + \markdownRendererHeadingThreePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { olItem } + { headingThree } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { olItem } - { 0 } + { headingThree } + { 1 } \ExplSyntaxOff -\def\markdownRendererOlItemEnd{% - \markdownRendererOlItemEndPrototype}% +\def\markdownRendererHeadingFour{% + \markdownRendererHeadingFourPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { olItemEnd } + { headingFour } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { olItemEnd } - { 0 } + { headingFour } + { 1 } \ExplSyntaxOff -\def\markdownRendererOlItemWithNumber{% - \markdownRendererOlItemWithNumberPrototype}% +\def\markdownRendererHeadingFive{% + \markdownRendererHeadingFivePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { olItemWithNumber } + { headingFive } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { olItemWithNumber } + { headingFive } { 1 } \ExplSyntaxOff -\def\markdownRendererFancyOlItem{% - \markdownRendererFancyOlItemPrototype}% +\def\markdownRendererHeadingSix{% + \markdownRendererHeadingSixPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { fancyOlItem } + { headingSix } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { fancyOlItem } - { 0 } + { headingSix } + { 1 } \ExplSyntaxOff -\def\markdownRendererFancyOlItemEnd{% - \markdownRendererFancyOlItemEndPrototype}% +\def\markdownRendererInlineHtmlComment{% + \markdownRendererInlineHtmlCommentPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { fancyOlItemEnd } + { inlineHtmlComment } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { fancyOlItemEnd } - { 0 } + { inlineHtmlComment } + { 1 } \ExplSyntaxOff -\def\markdownRendererFancyOlItemWithNumber{% - \markdownRendererFancyOlItemWithNumberPrototype}% +\def\markdownRendererBlockHtmlCommentBegin{% + \markdownRendererBlockHtmlCommentBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { fancyOlItemWithNumber } + { blockHtmlCommentBegin } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { fancyOlItemWithNumber } - { 1 } + { blockHtmlCommentBegin } + { 0 } \ExplSyntaxOff -\def\markdownRendererOlEnd{% - \markdownRendererOlEndPrototype}% +\def\markdownRendererBlockHtmlCommentEnd{% + \markdownRendererBlockHtmlCommentEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { olEnd } + { blockHtmlCommentEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { olEnd } + { blockHtmlCommentEnd } { 0 } \ExplSyntaxOff -\def\markdownRendererOlEndTight{% - \markdownRendererOlEndTightPrototype}% +\def\markdownRendererInlineHtmlTag{% + \markdownRendererInlineHtmlTagPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { olEndTight } + { inlineHtmlTag } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { olEndTight } - { 0 } + { inlineHtmlTag } + { 1 } \ExplSyntaxOff -\def\markdownRendererFancyOlEnd{% - \markdownRendererFancyOlEndPrototype}% +\def\markdownRendererInputBlockHtmlElement{% + \markdownRendererInputBlockHtmlElementPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { fancyOlEnd } + { inputBlockHtmlElement } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { fancyOlEnd } - { 0 } + { inputBlockHtmlElement } + { 1 } \ExplSyntaxOff -\def\markdownRendererFancyOlEndTight{% - \markdownRendererFancyOlEndTightPrototype}% +\def\markdownRendererImage{% + \markdownRendererImagePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { fancyOlEndTight } + { image } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { fancyOlEndTight } - { 0 } + { image } + { 4 } \ExplSyntaxOff -\def\markdownRendererDlBegin{% - \markdownRendererDlBeginPrototype}% +\def\markdownRendererInterblockSeparator{% + \markdownRendererInterblockSeparatorPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { dlBegin } + { interblockSeparator } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { dlBegin } + { interblockSeparator } { 0 } \ExplSyntaxOff -\def\markdownRendererDlBeginTight{% - \markdownRendererDlBeginTightPrototype}% +\def\markdownRendererLineBreak{% + \markdownRendererLineBreakPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { dlBeginTight } + { lineBreak } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { dlBeginTight } + { lineBreak } { 0 } \ExplSyntaxOff -\def\markdownRendererDlItem{% - \markdownRendererDlItemPrototype}% +\def\markdownRendererLink{% + \markdownRendererLinkPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { dlItem } + { link } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { dlItem } - { 1 } + { link } + { 4 } \ExplSyntaxOff -\def\markdownRendererDlItemEnd{% - \markdownRendererDlItemEndPrototype}% +\def\markdownRendererDocumentBegin{% + \markdownRendererDocumentBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { dlItemEnd } + { documentBegin } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { dlItemEnd } + { documentBegin } { 0 } \ExplSyntaxOff -\def\markdownRendererDlDefinitionBegin{% - \markdownRendererDlDefinitionBeginPrototype}% +\def\markdownRendererDocumentEnd{% + \markdownRendererDocumentEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { dlDefinitionBegin } + { documentEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { dlDefinitionBegin } + { documentEnd } { 0 } \ExplSyntaxOff -\def\markdownRendererDlDefinitionEnd{% - \markdownRendererDlDefinitionEndPrototype}% +\def\markdownRendererNbsp{% + \markdownRendererNbspPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { dlDefinitionEnd } + { nbsp } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { dlDefinitionEnd } + { nbsp } { 0 } \ExplSyntaxOff -\def\markdownRendererDlEnd{% - \markdownRendererDlEndPrototype}% \ExplSyntaxOn +\cs_new:Npn + \markdownRendererNote + { + \cs_if_exist:NTF + \markdownRendererFootnote + { + \markdownWarning + { + Footnote~renderer~has~been~deprecated,~ + to~be~removed~in~Markdown~3.0.0 + } + \markdownRendererFootnote + } + { + \cs_if_exist:NTF + \markdownRendererFootnotePrototype + { + \markdownWarning + { + Footnote~renderer~prototype~has~been~deprecated,~ + to~be~removed~in~Markdown~3.0.0 + } + \markdownRendererFootnotePrototype + } + { + \markdownRendererNotePrototype + } + } + } \seq_gput_right:Nn \g__markdown_renderers_seq - { dlEnd } + { footnote } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { dlEnd } + { footnote } + { 1 } +\seq_gput_right:Nn + \g__markdown_renderers_seq + { note } +\prop_gput:Nnn + \g__markdown_renderer_arities_prop + { note } + { 1 } +\ExplSyntaxOff +\def\markdownRendererOlBegin{% + \markdownRendererOlBeginPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g__markdown_renderers_seq + { olBegin } +\prop_gput:Nnn + \g__markdown_renderer_arities_prop + { olBegin } { 0 } \ExplSyntaxOff -\def\markdownRendererDlEndTight{% - \markdownRendererDlEndTightPrototype}% +\def\markdownRendererOlBeginTight{% + \markdownRendererOlBeginTightPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { dlEndTight } + { olBeginTight } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { dlEndTight } + { olBeginTight } { 0 } \ExplSyntaxOff -\def\markdownRendererEmphasis{% - \markdownRendererEmphasisPrototype}% +\def\markdownRendererFancyOlBegin{% + \markdownRendererFancyOlBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { emphasis } + { fancyOlBegin } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { emphasis } - { 1 } + { fancyOlBegin } + { 2 } \ExplSyntaxOff -\def\markdownRendererStrongEmphasis{% - \markdownRendererStrongEmphasisPrototype}% +\def\markdownRendererFancyOlBeginTight{% + \markdownRendererFancyOlBeginTightPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { strongEmphasis } + { fancyOlBeginTight } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { strongEmphasis } - { 1 } + { fancyOlBeginTight } + { 2 } \ExplSyntaxOff -\def\markdownRendererBlockQuoteBegin{% - \markdownRendererBlockQuoteBeginPrototype}% +\def\markdownRendererOlItem{% + \markdownRendererOlItemPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { blockQuoteBegin } + { olItem } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { blockQuoteBegin } + { olItem } { 0 } \ExplSyntaxOff -\def\markdownRendererBlockQuoteEnd{% - \markdownRendererBlockQuoteEndPrototype}% +\def\markdownRendererOlItemEnd{% + \markdownRendererOlItemEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { blockQuoteEnd } + { olItemEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { blockQuoteEnd } + { olItemEnd } { 0 } \ExplSyntaxOff -\def\markdownRendererInputVerbatim{% - \markdownRendererInputVerbatimPrototype}% +\def\markdownRendererOlItemWithNumber{% + \markdownRendererOlItemWithNumberPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { inputVerbatim } + { olItemWithNumber } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { inputVerbatim } + { olItemWithNumber } { 1 } \ExplSyntaxOff -\def\markdownRendererInputFencedCode{% - \markdownRendererInputFencedCodePrototype}% +\def\markdownRendererFancyOlItem{% + \markdownRendererFancyOlItemPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { inputFencedCode } + { fancyOlItem } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { inputFencedCode } - { 2 } + { fancyOlItem } + { 0 } \ExplSyntaxOff -\def\markdownRendererJekyllDataBegin{% - \markdownRendererJekyllDataBeginPrototype}% +\def\markdownRendererFancyOlItemEnd{% + \markdownRendererFancyOlItemEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { jekyllDataBegin } + { fancyOlItemEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { jekyllDataBegin } + { fancyOlItemEnd } { 0 } \ExplSyntaxOff -\def\markdownRendererJekyllDataEnd{% - \markdownRendererJekyllDataEndPrototype}% +\def\markdownRendererFancyOlItemWithNumber{% + \markdownRendererFancyOlItemWithNumberPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { jekyllDataEnd } + { fancyOlItemWithNumber } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { jekyllDataEnd } - { 0 } + { fancyOlItemWithNumber } + { 1 } \ExplSyntaxOff -\def\markdownRendererJekyllDataMappingBegin{% - \markdownRendererJekyllDataMappingBeginPrototype}% +\def\markdownRendererOlEnd{% + \markdownRendererOlEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { jekyllDataMappingBegin } + { olEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { jekyllDataMappingBegin } - { 2 } + { olEnd } + { 0 } \ExplSyntaxOff -\def\markdownRendererJekyllDataMappingEnd{% - \markdownRendererJekyllDataMappingEndPrototype}% +\def\markdownRendererOlEndTight{% + \markdownRendererOlEndTightPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { jekyllDataMappingEnd } + { olEndTight } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { jekyllDataMappingEnd } + { olEndTight } { 0 } \ExplSyntaxOff -\def\markdownRendererJekyllDataSequenceBegin{% - \markdownRendererJekyllDataSequenceBeginPrototype}% +\def\markdownRendererFancyOlEnd{% + \markdownRendererFancyOlEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { jekyllDataSequenceBegin } + { fancyOlEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { jekyllDataSequenceBegin } - { 2 } + { fancyOlEnd } + { 0 } \ExplSyntaxOff -\def\markdownRendererJekyllDataSequenceEnd{% - \markdownRendererJekyllDataSequenceEndPrototype}% +\def\markdownRendererFancyOlEndTight{% + \markdownRendererFancyOlEndTightPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { jekyllDataSequenceEnd } + { fancyOlEndTight } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { jekyllDataSequenceEnd } + { fancyOlEndTight } { 0 } \ExplSyntaxOff -\def\markdownRendererJekyllDataBoolean{% - \markdownRendererJekyllDataBooleanPrototype}% +\def\markdownRendererCite{% + \markdownRendererCitePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { jekyllDataBoolean } + { cite } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { jekyllDataBoolean } - { 2 } + { cite } + { 1 } \ExplSyntaxOff -\def\markdownRendererJekyllDataNumber{% - \markdownRendererJekyllDataNumberPrototype}% +\def\markdownRendererInputRawInline{% + \markdownRendererInputRawInlinePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { jekyllDataNumber } + { inputRawInline } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { jekyllDataNumber } + { inputRawInline } { 2 } \ExplSyntaxOff -\def\markdownRendererJekyllDataString{% - \markdownRendererJekyllDataStringPrototype}% +\def\markdownRendererInputRawBlock{% + \markdownRendererInputRawBlockPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { jekyllDataString } + { inputRawBlock } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { jekyllDataString } + { inputRawBlock } { 2 } \ExplSyntaxOff -\def\markdownRendererJekyllDataEmpty{% - \markdownRendererJekyllDataEmptyPrototype}% +\def\markdownRendererLeftBrace{% + \markdownRendererLeftBracePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { jekyllDataEmpty } + { leftBrace } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { jekyllDataEmpty } - { 1 } + { leftBrace } + { 0 } \ExplSyntaxOff -\def\markdownRendererHeadingOne{% - \markdownRendererHeadingOnePrototype}% +\def\markdownRendererRightBrace{% + \markdownRendererRightBracePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { headingOne } + { rightBrace } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { headingOne } - { 1 } + { rightBrace } + { 0 } \ExplSyntaxOff -\def\markdownRendererHeadingTwo{% - \markdownRendererHeadingTwoPrototype}% +\def\markdownRendererDollarSign{% + \markdownRendererDollarSignPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { headingTwo } + { dollarSign } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { headingTwo } - { 1 } + { dollarSign } + { 0 } \ExplSyntaxOff -\def\markdownRendererHeadingThree{% - \markdownRendererHeadingThreePrototype}% +\def\markdownRendererPercentSign{% + \markdownRendererPercentSignPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { headingThree } + { percentSign } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { headingThree } - { 1 } + { percentSign } + { 0 } \ExplSyntaxOff -\def\markdownRendererHeadingFour{% - \markdownRendererHeadingFourPrototype}% +\def\markdownRendererAmpersand{% + \markdownRendererAmpersandPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { headingFour } + { ampersand } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { headingFour } - { 1 } + { ampersand } + { 0 } \ExplSyntaxOff -\def\markdownRendererHeadingFive{% - \markdownRendererHeadingFivePrototype}% +\def\markdownRendererUnderscore{% + \markdownRendererUnderscorePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { headingFive } + { underscore } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { headingFive } - { 1 } + { underscore } + { 0 } \ExplSyntaxOff -\def\markdownRendererHeadingSix{% - \markdownRendererHeadingSixPrototype}% +\def\markdownRendererHash{% + \markdownRendererHashPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { headingSix } + { hash } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { headingSix } - { 1 } + { hash } + { 0 } \ExplSyntaxOff +\def\markdownRendererCircumflex{% + \markdownRendererCircumflexPrototype}% \ExplSyntaxOn -\cs_new:Npn - \markdownRendererThematicBreak - { - \cs_if_exist:NTF - \markdownRendererHorizontalRule - { - \markdownWarning - { - Horizontal~rule~renderer~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererHorizontalRule - } - { - \cs_if_exist:NTF - \markdownRendererHorizontalRulePrototype - { - \markdownWarning - { - Horizontal~rule~renderer~prototype~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererHorizontalRulePrototype - } - { - \markdownRendererThematicBreakPrototype - } - } - } \seq_gput_right:Nn \g__markdown_renderers_seq - { horizontalRule } + { circumflex } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { horizontalRule } + { circumflex } { 0 } +\ExplSyntaxOff +\def\markdownRendererBackslash{% + \markdownRendererBackslashPrototype}% +\ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { thematicBreak } + { backslash } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { thematicBreak } + { backslash } { 0 } \ExplSyntaxOff +\def\markdownRendererTilde{% + \markdownRendererTildePrototype}% \ExplSyntaxOn -\cs_new:Npn - \markdownRendererNote - { - \cs_if_exist:NTF - \markdownRendererFootnote - { - \markdownWarning - { - Footnote~renderer~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererFootnote - } - { - \cs_if_exist:NTF - \markdownRendererFootnotePrototype - { - \markdownWarning - { - Footnote~renderer~prototype~has~been~deprecated,~ - to~be~removed~in~Markdown~3.0.0 - } - \markdownRendererFootnotePrototype - } - { - \markdownRendererNotePrototype - } - } - } \seq_gput_right:Nn \g__markdown_renderers_seq - { footnote } + { tilde } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { footnote } - { 1 } + { tilde } + { 0 } +\ExplSyntaxOff +\def\markdownRendererPipe{% + \markdownRendererPipePrototype}% +\ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { note } + { pipe } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { note } - { 1 } + { pipe } + { 0 } \ExplSyntaxOff -\def\markdownRendererCite{% - \markdownRendererCitePrototype}% +\def\markdownRendererStrikeThrough{% + \markdownRendererStrikeThroughPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { cite } + { strikeThrough } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { cite } + { strikeThrough } { 1 } \ExplSyntaxOff -\def\markdownRendererTextCite{% - \markdownRendererTextCitePrototype}% +\def\markdownRendererSubscript{% + \markdownRendererSubscriptPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { textCite } + { subscript } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { textCite } + { subscript } + { 1 } +\def\markdownRendererSuperscript{% + \markdownRendererSuperscriptPrototype}% +\ExplSyntaxOn +\seq_gput_right:Nn + \g__markdown_renderers_seq + { superscript } +\prop_gput:Nnn + \g__markdown_renderer_arities_prop + { superscript } { 1 } \ExplSyntaxOff \def\markdownRendererTable{% @@ -1625,169 +1646,204 @@ { table } { 3 } \ExplSyntaxOff -\def\markdownRendererInlineHtmlComment{% - \markdownRendererInlineHtmlCommentPrototype}% +\def\markdownRendererTextCite{% + \markdownRendererTextCitePrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { inlineHtmlComment } + { textCite } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { inlineHtmlComment } + { textCite } { 1 } \ExplSyntaxOff -\def\markdownRendererBlockHtmlCommentBegin{% - \markdownRendererBlockHtmlCommentBeginPrototype}% \ExplSyntaxOn +\cs_new:Npn + \markdownRendererThematicBreak + { + \cs_if_exist:NTF + \markdownRendererHorizontalRule + { + \markdownWarning + { + Horizontal~rule~renderer~has~been~deprecated,~ + to~be~removed~in~Markdown~3.0.0 + } + \markdownRendererHorizontalRule + } + { + \cs_if_exist:NTF + \markdownRendererHorizontalRulePrototype + { + \markdownWarning + { + Horizontal~rule~renderer~prototype~has~been~deprecated,~ + to~be~removed~in~Markdown~3.0.0 + } + \markdownRendererHorizontalRulePrototype + } + { + \markdownRendererThematicBreakPrototype + } + } + } \seq_gput_right:Nn \g__markdown_renderers_seq - { blockHtmlCommentBegin } + { horizontalRule } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { blockHtmlCommentBegin } + { horizontalRule } + { 0 } +\seq_gput_right:Nn + \g__markdown_renderers_seq + { thematicBreak } +\prop_gput:Nnn + \g__markdown_renderer_arities_prop + { thematicBreak } { 0 } \ExplSyntaxOff -\def\markdownRendererBlockHtmlCommentEnd{% - \markdownRendererBlockHtmlCommentEndPrototype}% +\def\markdownRendererTickedBox{% + \markdownRendererTickedBoxPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { blockHtmlCommentEnd } + { tickedBox } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { blockHtmlCommentEnd } + { tickedBox } { 0 } \ExplSyntaxOff -\def\markdownRendererInlineHtmlTag{% - \markdownRendererInlineHtmlTagPrototype}% +\def\markdownRendererHalfTickedBox{% + \markdownRendererHalfTickedBoxPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { inlineHtmlTag } + { halfTickedBox } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { inlineHtmlTag } - { 1 } + { halfTickedBox } + { 0 } \ExplSyntaxOff -\def\markdownRendererInputBlockHtmlElement{% - \markdownRendererInputBlockHtmlElementPrototype}% +\def\markdownRendererUntickedBox{% + \markdownRendererUntickedBoxPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { inputBlockHtmlElement } + { untickedBox } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { inputBlockHtmlElement } - { 1 } + { untickedBox } + { 0 } \ExplSyntaxOff -\def\markdownRendererAttributeIdentifier{% - \markdownRendererAttributeIdentifierPrototype}% +\def\markdownRendererJekyllDataBegin{% + \markdownRendererJekyllDataBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { attributeIdentifier } + { jekyllDataBegin } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { attributeIdentifier } - { 1 } + { jekyllDataBegin } + { 0 } \ExplSyntaxOff -\def\markdownRendererAttributeClassName{% - \markdownRendererAttributeClassNamePrototype}% +\def\markdownRendererJekyllDataEnd{% + \markdownRendererJekyllDataEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { attributeClassName } + { jekyllDataEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { attributeClassName } - { 1 } + { jekyllDataEnd } + { 0 } \ExplSyntaxOff -\def\markdownRendererAttributeKeyValue{% - \markdownRendererAttributeKeyValuePrototype}% +\def\markdownRendererJekyllDataMappingBegin{% + \markdownRendererJekyllDataMappingBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { attributeKeyValue } + { jekyllDataMappingBegin } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { attributeKeyValue } + { jekyllDataMappingBegin } { 2 } \ExplSyntaxOff -\def\markdownRendererHeaderAttributeContextBegin{% - \markdownRendererHeaderAttributeContextBeginPrototype}% +\def\markdownRendererJekyllDataMappingEnd{% + \markdownRendererJekyllDataMappingEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { headerAttributeContextBegin } + { jekyllDataMappingEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { headerAttributeContextBegin } + { jekyllDataMappingEnd } { 0 } \ExplSyntaxOff -\def\markdownRendererHeaderAttributeContextEnd{% - \markdownRendererHeaderAttributeContextEndPrototype}% +\def\markdownRendererJekyllDataSequenceBegin{% + \markdownRendererJekyllDataSequenceBeginPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { headerAttributeContextEnd } + { jekyllDataSequenceBegin } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { headerAttributeContextEnd } - { 0 } + { jekyllDataSequenceBegin } + { 2 } \ExplSyntaxOff -\def\markdownRendererStrikeThrough{% - \markdownRendererStrikeThroughPrototype}% +\def\markdownRendererJekyllDataSequenceEnd{% + \markdownRendererJekyllDataSequenceEndPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { strikeThrough } + { jekyllDataSequenceEnd } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { strikeThrough } - { 1 } + { jekyllDataSequenceEnd } + { 0 } \ExplSyntaxOff -\def\markdownRendererSuperscript{% - \markdownRendererSuperscriptPrototype}% +\def\markdownRendererJekyllDataBoolean{% + \markdownRendererJekyllDataBooleanPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { superscript } + { jekyllDataBoolean } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { superscript } - { 1 } + { jekyllDataBoolean } + { 2 } \ExplSyntaxOff -\def\markdownRendererSubscript{% - \markdownRendererSubscriptPrototype}% +\def\markdownRendererJekyllDataNumber{% + \markdownRendererJekyllDataNumberPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { subscript } + { jekyllDataNumber } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { subscript } - { 1 } -\def\markdownRendererInputRawInline{% - \markdownRendererInputRawInlinePrototype}% + { jekyllDataNumber } + { 2 } +\ExplSyntaxOff +\def\markdownRendererJekyllDataString{% + \markdownRendererJekyllDataStringPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { inputRawInline } + { jekyllDataString } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { inputRawInline } + { jekyllDataString } { 2 } \ExplSyntaxOff -\def\markdownRendererInputRawBlock{% - \markdownRendererInputRawBlockPrototype}% +\def\markdownRendererJekyllDataEmpty{% + \markdownRendererJekyllDataEmptyPrototype}% \ExplSyntaxOn \seq_gput_right:Nn \g__markdown_renderers_seq - { inputRawBlock } + { jekyllDataEmpty } \prop_gput:Nnn \g__markdown_renderer_arities_prop - { inputRawBlock } - { 2 } + { jekyllDataEmpty } + { 1 } \ExplSyntaxOff \ExplSyntaxOn \keys_define:nn @@ -1883,6 +1939,7 @@ } } } +\ExplSyntaxOff \def\markdownLuaRegisterIBCallback#1{\relax}% \def\markdownLuaUnregisterIBCallback#1{\relax}% \ifx\markdownInfo\undefined diff --git a/Master/texmf-dist/tex/luatex/markdown/markdown.lua b/Master/texmf-dist/tex/luatex/markdown/markdown.lua index 3afe0a924d4..8a5a6ce9f56 100644 --- a/Master/texmf-dist/tex/luatex/markdown/markdown.lua +++ b/Master/texmf-dist/tex/luatex/markdown/markdown.lua @@ -58,7 +58,7 @@ -- those in the standard .ins files. -- local metadata = { - version = "2.18.0-0-gd8ae860", + version = "2.19.0-0-g80fcf20", comment = "A module for the conversion from markdown to plain TeX", author = "John MacFarlane, Hans Hagen, VÃt Novotný", copyright = {"2009-2016 John MacFarlane, Hans Hagen", @@ -118,7 +118,9 @@ defaultOptions.debugExtensionsFileName = "debug-extensions.json" defaultOptions.frozenCacheFileName = "frozenCache.tex" defaultOptions.blankBeforeBlockquote = false defaultOptions.blankBeforeCodeFence = false +defaultOptions.blankBeforeDivFence = false defaultOptions.blankBeforeHeading = false +defaultOptions.bracketedSpans = false defaultOptions.breakableBlockquotes = false defaultOptions.citationNbsps = true defaultOptions.citations = false @@ -127,15 +129,14 @@ defaultOptions.contentBlocks = false defaultOptions.debugExtensions = false defaultOptions.definitionLists = false defaultOptions.eagerCache = true +defaultOptions.expectJekyllData = false metadata.user_extension_api_version = 2 metadata.grammar_version = 2 defaultOptions.extensions = {} -defaultOptions.expectJekyllData = false defaultOptions.fancyLists = false defaultOptions.fencedCode = false +defaultOptions.fencedDivs = false defaultOptions.finalizeCache = false -defaultOptions.footnotes = false -defaultOptions.notes = false defaultOptions.frozenCacheCounter = 0 defaultOptions.hardLineBreaks = false defaultOptions.hashEnumerators = false @@ -145,6 +146,8 @@ defaultOptions.hybrid = false defaultOptions.inlineFootnotes = false defaultOptions.inlineNotes = false defaultOptions.jekyllData = false +defaultOptions.footnotes = false +defaultOptions.notes = false defaultOptions.pipeTables = false defaultOptions.preserveTabs = false defaultOptions.rawAttribute = true @@ -2423,7 +2426,6 @@ function M.writer.new(options) self.escaped_uri_chars = { ["{"] = "\\markdownRendererLeftBrace{}", ["}"] = "\\markdownRendererRightBrace{}", - ["%"] = "\\markdownRendererPercentSign{}", ["\\"] = "\\markdownRendererBackslash{}", } self.escaped_minimal_strings = { @@ -2577,6 +2579,27 @@ function M.writer.new(options) return buf end + 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 self.active_attributes = {} function self.heading(s, level, attributes) attributes = attributes or {} @@ -2655,21 +2678,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 @@ -2770,7 +2779,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 @@ -2922,14 +2932,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 @@ -3145,12 +3172,14 @@ end parsers.urlchar = parsers.anyescaped - parsers.newline - parsers.more 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) @@ -3698,12 +3727,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, @@ -3742,12 +3771,24 @@ function M.reader.new(writer, options) Smart = parsers.Smart, Symbol = parsers.Symbol, SpecialChar = parsers.fail, + InitializeState = parsers.succeed, } - 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 local special_characters = {} @@ -3763,6 +3804,10 @@ function M.reader.new(writer, options) self.add_special_character("<") self.add_special_character("!") self.add_special_character("\\") + self.initialize_named_group = function(name, value) + syntax.InitializeState = syntax.InitializeState + * Cg(Ct("") / value, name) + end for _, extension in ipairs(extensions) do current_extension_name = extension.name extension.extend_writer(writer) @@ -3875,7 +3920,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) @@ -3944,6 +3992,31 @@ function M.reader.new(writer, options) return self end M.extensions = {} +M.extensions.bracketed_spans = function() + return { + name = "built-in bracketed_spans syntax extension", + extend_writer = function(self) + 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 M.extensions.citations = function(citation_nbsps) local escaped_citation_chars = { ["{"] = "\\markdownRendererLeftBrace{}", @@ -4296,6 +4369,163 @@ M.extensions.definition_lists = function(tight_lists) end } end +M.extensions.fancy_lists = function() + return { + name = "built-in fancy_lists syntax extension", + extend_writer = function(self) + local options = self.options + + 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 + 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 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 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 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 function roman2number(roman) + local romans = { ["L"] = 50, ["X"] = 10, ["V"] = 5, ["I"] = 1 } + local numeral = 0 + + 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 + + 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 M.extensions.fenced_code = function(blank_before_code_fence) return { name = "built-in fenced_code syntax extension", @@ -4313,12 +4543,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") @@ -4327,83 +4557,105 @@ 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 } end -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) - 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 - - 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) + local fenced_div_infostring + = C((parsers.linechar + - ( parsers.spacechar^1 + * parsers.colon^1))^1) + + 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 fenced_div_end = parsers.nonindentspace + * parsers.colon^3 + * parsers.optionalspace + * (parsers.newline + parsers.eof) + self.initialize_named_group("div_level", "0") + + 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 RawNoteRef - = #(parsers.lbracket * parsers.circumflex) - * parsers.tag / strip_first_char + return Cg( Cmt(Cb("div_level"), update_div_level) + , "div_level") + end - local rawnotes = {} + 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 - -- 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) - end + self.insert_pattern("Block after Verbatim", + FencedDiv, "FencedDiv") - local function register_note(ref,rawnote) - rawnotes[self.normalize_tag(ref)] = rawnote - return "" + self.add_special_character(":") + 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 - local NoteRef = RawNoteRef / lookup_note - - local NoteBlock - = parsers.leader * RawNoteRef * parsers.colon - * parsers.spnl * parsers.indented_blocks(parsers.chunk) - / register_note - - local Blank = NoteBlock + parsers.Blank - self.update_rule("Blank", Blank) - - 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 @@ -4458,138 +4710,76 @@ 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 -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) - 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 @@ -4775,17 +4965,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") @@ -4816,28 +5006,6 @@ M.extensions.strike_through = function() end } end -M.extensions.superscripts = function() - return { - name = "built-in superscripts syntax extension", - extend_writer = function(self) - 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 M.extensions.subscripts = function() return { name = "built-in subscripts syntax extension", @@ -4860,160 +5028,156 @@ M.extensions.subscripts = function() end } end -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 - - 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 - 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 +M.extensions.jekyll_data = function(expect_jekyll_data) + return { + name = "built-in jekyll_data syntax extension", + extend_writer = function(self) + 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 + ) - self.update_rule("OrderedList", FancyList) + local UnexpectedJekyllData + = P("---") + * parsers.blankline / 0 + * #(-parsers.blankline) -- if followed by blank, it's thematic break + * JekyllData + * (P("---") + P("...")) + + 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 @@ -5023,6 +5187,11 @@ function M.new(options) return defaultOptions[key] end }) 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) @@ -5041,6 +5210,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) |