diff options
author | Karl Berry <karl@freefriends.org> | 2021-12-30 21:19:38 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-12-30 21:19:38 +0000 |
commit | d57ba3afd9451f2d57e12ab453816fee5c54d12b (patch) | |
tree | 1db60660340301ebb2a2617f821ab6d6a421acab /Master/texmf-dist/tex | |
parent | 346bda46d72c2cccd85d29ee00c862ec307acbb0 (diff) |
markdown (30dec21)
git-svn-id: svn://tug.org/texlive/trunk@61448 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
4 files changed, 110 insertions, 25 deletions
diff --git a/Master/texmf-dist/tex/context/third/markdown/t-markdown.tex b/Master/texmf-dist/tex/context/third/markdown/t-markdown.tex index dfacdc95285..f92f89dda62 100644 --- a/Master/texmf-dist/tex/context/third/markdown/t-markdown.tex +++ b/Master/texmf-dist/tex/context/third/markdown/t-markdown.tex @@ -62,14 +62,39 @@ \advance\count0 by 1\relax \ifnum\count0<256\repeat \catcode`|=12}% -\begingroup - \catcode`\|=0% - \catcode`\\=12% - |gdef|startmarkdown{% - |markdownReadAndConvert{\stopmarkdown}% - {|stopmarkdown}}% - |gdef|stopmarkdown{|markdownEnd}% -|endgroup +\ifx\startluacode\undefined % MkII + \begingroup + \catcode`\|=0% + \catcode`\\=12% + |gdef|startmarkdown{% + |markdownReadAndConvert{\stopmarkdown}% + {|stopmarkdown}}% + |gdef|stopmarkdown{% + |markdownEnd}% + |endgroup +\else % MkIV + \startluacode + document.markdown_buffering = false + local function preserve_trailing_spaces(line) + if document.markdown_buffering then + line = line:gsub("[ \t][ \t]$", "\t\t") + end + return line + end + resolvers.installinputlinehandler(preserve_trailing_spaces) + \stopluacode + \begingroup + \catcode`\|=0% + \catcode`\\=12% + |gdef|startmarkdown{% + |ctxlua{document.markdown_buffering = true}% + |markdownReadAndConvert{\stopmarkdown}% + {|stopmarkdown}}% + |gdef|stopmarkdown{% + |ctxlua{document.markdown_buffering = false}% + |markdownEnd}% + |endgroup +\fi \def\markdownRendererLineBreakPrototype{\blank}% \def\markdownRendererLeftBracePrototype{\textbraceleft}% \def\markdownRendererRightBracePrototype{\textbraceright}% diff --git a/Master/texmf-dist/tex/generic/markdown/markdown.tex b/Master/texmf-dist/tex/generic/markdown/markdown.tex index 5e87d94a0e3..a9568c2ad7b 100644 --- a/Master/texmf-dist/tex/generic/markdown/markdown.tex +++ b/Master/texmf-dist/tex/generic/markdown/markdown.tex @@ -45,8 +45,8 @@ %% %% The names of the source files used are shown above. %% -\def\markdownLastModified{2021/09/26}% -\def\markdownVersion{2.11.0-0-g4505824}% +\def\markdownLastModified{2021/12/30}% +\def\markdownVersion{2.12.0-1-g976f074}% \let\markdownBegin\relax \let\markdownEnd\relax \let\markdownInput\relax @@ -67,8 +67,10 @@ \let\markdownOptionContentBlocks\undefined \let\markdownOptionContentBlocksLanguageMap\undefined \let\markdownOptionDefinitionLists\undefined +\let\markdownOptionEagerCache\undefined \let\markdownOptionFootnotes\undefined \let\markdownOptionFencedCode\undefined +\let\markdownOptionHardLineBreaks\undefined \let\markdownOptionHashEnumerators\undefined \let\markdownOptionHeaderAttributes\undefined \let\markdownOptionHtml\undefined @@ -199,6 +201,8 @@ \markdownRendererJekyllDataMappingEndPrototype}% \def\markdownRendererJekyllDataSequenceBegin{% \markdownRendererJekyllDataSequenceBeginPrototype}% +\def\markdownRendererJekyllDataSequenceEnd{% + \markdownRendererJekyllDataSequenceEndPrototype}% \def\markdownRendererJekyllDataBoolean{% \markdownRendererJekyllDataBooleanPrototype}% \def\markdownRendererJekyllDataNumber{% @@ -434,6 +438,9 @@ \ifx\markdownOptionDefinitionLists\undefined\else definitionLists = \markdownOptionDefinitionLists, \fi +\ifx\markdownOptionEagerCache\undefined\else + eagerCache = \markdownOptionEagerCache, +\fi \ifx\markdownOptionFinalizeCache\undefined\else finalizeCache = \markdownOptionFinalizeCache, \fi @@ -445,6 +452,9 @@ \ifx\markdownOptionFencedCode\undefined\else fencedCode = \markdownOptionFencedCode, \fi +\ifx\markdownOptionHardLineBreaks\undefined\else + hardLineBreaks = \markdownOptionHardLineBreaks, +\fi \ifx\markdownOptionHashEnumerators\undefined\else hashEnumerators = \markdownOptionHashEnumerators, \fi @@ -656,7 +666,22 @@ |endgroup \else \markdownInfo{Using mode 2: Direct Lua access}% -\def\markdownLuaExecute#1{\directlua{local print = tex.print #1}}% +\begingroup + \catcode`|=0% + \catcode`\\=12% + |gdef|markdownLuaExecute#1{% + |directlua{% + local function print(input) + local output = {} + for line in input:gmatch("[^\r\n]+") do + table.insert(output, line) + end + tex.print(output) + end + #1 + }% + }% +|endgroup \fi \begingroup \catcode`|=0% diff --git a/Master/texmf-dist/tex/latex/markdown/markdown.sty b/Master/texmf-dist/tex/latex/markdown/markdown.sty index 1c54f4848cb..b1d229209ae 100644 --- a/Master/texmf-dist/tex/latex/markdown/markdown.sty +++ b/Master/texmf-dist/tex/latex/markdown/markdown.sty @@ -134,12 +134,16 @@ \def\markdownOptionContentBlocksLanguageMap{#1}}% \define@key{markdownOptions}{definitionLists}[true]{% \def\markdownOptionDefinitionLists{#1}}% +\define@key{markdownOptions}{eagerCache}[true]{% + \def\markdownOptionEagerCache{#1}}% \define@key{markdownOptions}{footnotes}[true]{% \def\markdownOptionFootnotes{#1}}% \define@key{markdownOptions}{fencedCode}[true]{% \def\markdownOptionFencedCode{#1}}% \define@key{markdownOptions}{jekyllData}[true]{% \def\markdownOptionJekyllData{#1}}% +\define@key{markdownOptions}{hardLineBreaks}[true]{% + \def\markdownOptionHardLineBreaks{#1}}% \define@key{markdownOptions}{hashEnumerators}[true]{% \def\markdownOptionHashEnumerators{#1}}% \define@key{markdownOptions}{headerAttributes}[true]{% @@ -563,8 +567,17 @@ \ifx\empty#4\empty\else \caption{#4}% \fi - \end{table}}{% - \markdownInput{#3}}}, + \end{table}% + }{% + \ifthenelse{\equal{#1}{tex}}{% + \catcode`\%=14\relax + \input #3\relax + \catcode`\%=12\relax + }{% + \markdownInput{#3}% + }% + }% + }, image = {% \begin{figure}% \begin{center}% diff --git a/Master/texmf-dist/tex/luatex/markdown/markdown.lua b/Master/texmf-dist/tex/luatex/markdown/markdown.lua index eb68cc175d5..4241d6cc3b9 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.11.0-0-g4505824", + version = "2.12.0-1-g976f074", 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", @@ -88,10 +88,12 @@ defaultOptions.codeSpans = true defaultOptions.contentBlocks = false defaultOptions.contentBlocksLanguageMap = "markdown-languages.json" defaultOptions.definitionLists = false +defaultOptions.eagerCache = true defaultOptions.fencedCode = false defaultOptions.finalizeCache = false defaultOptions.footnotes = false defaultOptions.frozenCacheCounter = 0 +defaultOptions.hardLineBreaks = false defaultOptions.hashEnumerators = false defaultOptions.headerAttributes = false defaultOptions.html = false @@ -2335,7 +2337,7 @@ function M.writer.new(options) return s end function self.pack(name) - return [[\input ]] .. name .. [[\relax{}]] + return [[\input ]] .. name .. [[\relax]] end function self.interblocksep() if not self.is_writing then return "" end @@ -3762,15 +3764,22 @@ larsers.PipeTable = Ct(larsers.table_row * parsers.newline + larsers.bqstart + larsers.headerstart + larsers.fencestart - ) * parsers.spacechar^0 / writer.space + ) * parsers.spacechar^0 + / (options.hardLineBreaks and writer.linebreak + or writer.space) larsers.OptionalIndent = parsers.spacechar^1 / writer.space larsers.Space = parsers.spacechar^2 * larsers.Endline / writer.linebreak + parsers.spacechar^1 * larsers.Endline^-1 * parsers.eof / "" - + parsers.spacechar^1 * larsers.Endline^-1 - * parsers.optionalspace / writer.space + + parsers.spacechar^1 * larsers.Endline + * parsers.optionalspace + / (options.hardLineBreaks + and writer.linebreak + or writer.space) + + parsers.spacechar^1 * parsers.optionalspace + / writer.space larsers.NonbreakingEndline = parsers.newline * -( -- newline, but not before... @@ -3780,13 +3789,20 @@ larsers.PipeTable = Ct(larsers.table_row * parsers.newline + larsers.bqstart + larsers.headerstart + larsers.fencestart - ) * parsers.spacechar^0 / writer.nbsp + ) * parsers.spacechar^0 + / (options.hardLineBreaks and writer.linebreak + or writer.nbsp) larsers.NonbreakingSpace = parsers.spacechar^2 * larsers.Endline / writer.linebreak + parsers.spacechar^1 * larsers.Endline^-1 * parsers.eof / "" - + parsers.spacechar^1 * larsers.Endline^-1 - * parsers.optionalspace / writer.nbsp + + parsers.spacechar^1 * larsers.Endline + * parsers.optionalspace + / (options.hardLineBreaks + and writer.linebreak + or writer.nbsp) + + parsers.spacechar^1 * parsers.optionalspace + / writer.nbsp if options.underscores then larsers.Strong = ( parsers.between(parsers.Inline, parsers.doubleasterisks, @@ -4299,10 +4315,16 @@ larsers.PipeTable = Ct(larsers.table_row * parsers.newline end table.sort(opt_string) local salt = table.concat(opt_string, ",") .. "," .. metadata.version - local name = util.cache(options.cacheDir, input, salt, function(input) - return util.rope_to_string(parse_blocks_toplevel(input)) .. writer.eof - end, ".md" .. writer.suffix) - local output = writer.pack(name) + local output + local function convert(input) + return util.rope_to_string(parse_blocks_toplevel(input)) .. writer.eof + end + if options.eagerCache or options.finalizeCache then + local name = util.cache(options.cacheDir, input, salt, convert, ".md" .. writer.suffix) + output = writer.pack(name) + else + output = convert(input) + end if options.finalizeCache then local file, mode if options.frozenCacheCounter > 0 then |