summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/markdown/markdown.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/markdown/markdown.tex')
-rw-r--r--Master/texmf-dist/tex/generic/markdown/markdown.tex1154
1 files changed, 578 insertions, 576 deletions
diff --git a/Master/texmf-dist/tex/generic/markdown/markdown.tex b/Master/texmf-dist/tex/generic/markdown/markdown.tex
index cce17fdc4fa..35028f1f0c4 100644
--- a/Master/texmf-dist/tex/generic/markdown/markdown.tex
+++ b/Master/texmf-dist/tex/generic/markdown/markdown.tex
@@ -6,18 +6,15 @@
%%
%% markdown.dtx (with options: `tex')
%%
-%% Copyright (C) 2016-2021 Vít Novotný
+%% Copyright (C) 2016-2022 Vít Novotný
%%
%% This work may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
+%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%
%% http://www.latex-project.org/lppl.txt
%%
-%% and version 1.3 or later is part of all distributions of LaTeX
-%% version 2005/12/01 or later.
-%%
%% This work has the LPPL maintenance status `maintained'.
%% The Current Maintainer of this work is Vít Novotný.
%%
@@ -52,470 +49,535 @@
\seq_new:N \g__markdown_lua_options_seq
\prop_new:N \g__markdown_lua_option_types_prop
\prop_new:N \g__markdown_default_lua_options_prop
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { cacheDir }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
- { cacheDir }
- { string }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
+\seq_new:N \g__markdown_option_layers_seq
+\tl_const:Nn \c__markdown_option_layer_lua_tl { lua }
+\seq_put_right:NV \g__markdown_option_layers_seq \c__markdown_option_layer_lua_tl
+\cs_new:Nn
+ \__markdown_add_lua_option:nnn
+ {
+ \__markdown_add_option:Vnnn
+ \c__markdown_option_layer_lua_tl
+ { #1 }
+ { #2 }
+ { #3 }
+ }
+\cs_new:Nn
+ \__markdown_add_option:nnnn
+ {
+ \seq_put_right:cn
+ { g__markdown_ #1 _options_seq }
+ { #2 }
+ \prop_put:cnn
+ { g__markdown_ #1 _option_types_prop }
+ { #2 }
+ { #3 }
+ \prop_put:cnn
+ { g__markdown_default_ #1 _options_prop }
+ { #2 }
+ { #4 }
+ \__markdown_typecheck_option:n
+ { #2 }
+ }
+\cs_generate_variant:Nn
+ \__markdown_add_option:nnnn
+ { Vnnn }
+\tl_const:Nn \c__markdown_option_value_true_tl { true }
+\tl_const:Nn \c__markdown_option_value_false_tl { false }
+\cs_new:Nn \__markdown_typecheck_option:n
+ {
+ \__markdown_get_option_type:nN
+ { #1 }
+ \l_tmpa_tl
+ \str_case_e:Vn
+ \l_tmpa_tl
+ {
+ { \c__markdown_option_type_boolean_tl }
+ {
+ \__markdown_get_option_value:nN
+ { #1 }
+ \l_tmpa_tl
+ \bool_if:nF
+ {
+ \str_if_eq_p:VV
+ \l_tmpa_tl
+ \c__markdown_option_value_true_tl ||
+ \str_if_eq_p:VV
+ \l_tmpa_tl
+ \c__markdown_option_value_false_tl
+ }
+ {
+ \msg_error:nnnV
+ { __markdown }
+ { failed-typecheck-for-boolean-option }
+ { #1 }
+ \l_tmpa_tl
+ }
+ }
+ }
+ }
+\msg_new:nnn
+ { __markdown }
+ { failed-typecheck-for-boolean-option }
+ {
+ Option~#1~has~value~#2,~
+ but~a~boolean~(true~or~false)~was~expected.
+ }
+\cs_generate_variant:Nn
+ \str_case_e:nn
+ { Vn }
+\cs_generate_variant:Nn
+ \msg_error:nnnn
+ { nnnV }
+\seq_new:N \g__markdown_option_types_seq
+\tl_const:Nn \c__markdown_option_type_counter_tl { counter }
+\seq_put_right:NV \g__markdown_option_types_seq \c__markdown_option_type_counter_tl
+\tl_const:Nn \c__markdown_option_type_boolean_tl { boolean }
+\seq_put_right:NV \g__markdown_option_types_seq \c__markdown_option_type_boolean_tl
+\tl_const:Nn \c__markdown_option_type_number_tl { number }
+\seq_put_right:NV \g__markdown_option_types_seq \c__markdown_option_type_number_tl
+\tl_const:Nn \c__markdown_option_type_path_tl { path }
+\seq_put_right:NV \g__markdown_option_types_seq \c__markdown_option_type_path_tl
+\tl_const:Nn \c__markdown_option_type_slice_tl { slice }
+\seq_put_right:NV \g__markdown_option_types_seq \c__markdown_option_type_slice_tl
+\tl_const:Nn \c__markdown_option_type_string_tl { string }
+\seq_put_right:NV \g__markdown_option_types_seq \c__markdown_option_type_string_tl
+\cs_new:Nn
+ \__markdown_get_option_type:nN
+ {
+ \bool_set_false:N
+ \l_tmpa_bool
+ \seq_map_inline:Nn
+ \g__markdown_option_layers_seq
+ {
+ \prop_get:cnNT
+ { g__markdown_ ##1 _option_types_prop }
+ { #1 }
+ \l_tmpa_tl
+ {
+ \bool_set_true:N
+ \l_tmpa_bool
+ \seq_map_break:
+ }
+ }
+ \bool_if:nF
+ \l_tmpa_bool
+ {
+ \msg_error:nnn
+ { __markdown }
+ { undefined-option }
+ { #1 }
+ }
+ \seq_if_in:NVF
+ \g__markdown_option_types_seq
+ \l_tmpa_tl
+ {
+ \msg_error:nnnV
+ { __markdown }
+ { unknown-option-type }
+ { #1 }
+ \l_tmpa_tl
+ }
+ \tl_set_eq:NN
+ #2
+ \l_tmpa_tl
+ }
+\msg_new:nnn
+ { __markdown }
+ { unknown-option-type }
+ {
+ Option~#1~has~unknown~type~#2.
+ }
+\msg_new:nnn
+ { __markdown }
+ { undefined-option }
+ {
+ Option~#1~is~undefined.
+ }
+\cs_new:Nn
+ \__markdown_get_default_option_value:nN
+ {
+ \bool_set_false:N
+ \l_tmpa_bool
+ \seq_map_inline:Nn
+ \g__markdown_option_layers_seq
+ {
+ \prop_get:cnNT
+ { g__markdown_default_ ##1 _options_prop }
+ { #1 }
+ #2
+ {
+ \bool_set_true:N
+ \l_tmpa_bool
+ \seq_map_break:
+ }
+ }
+ \bool_if:nF
+ \l_tmpa_bool
+ {
+ \msg_error:nnn
+ { __markdown }
+ { undefined-option }
+ { #1 }
+ }
+ }
+\cs_new:Nn
+ \__markdown_get_option_value:nN
+ {
+ \__markdown_option_tl_to_csname:nN
+ { #1 }
+ \l_tmpa_tl
+ \cs_if_free:cTF
+ { \l_tmpa_tl }
+ {
+ \__markdown_get_default_option_value:nN
+ { #1 }
+ #2
+ }
+ {
+ \__markdown_get_option_type:nN
+ { #1 }
+ \l_tmpa_tl
+ \str_if_eq:NNTF
+ \c__markdown_option_type_counter_tl
+ \l_tmpa_tl
+ {
+ \__markdown_option_tl_to_csname:nN
+ { #1 }
+ \l_tmpa_tl
+ \tl_set:Nx
+ #2
+ { \the \cs:w \l_tmpa_tl \cs_end: }
+ }
+ {
+ \__markdown_option_tl_to_csname:nN
+ { #1 }
+ \l_tmpa_tl
+ \tl_set:Nv
+ #2
+ { \l_tmpa_tl }
+ }
+ }
+ }
+\cs_new:Nn \__markdown_option_tl_to_csname:nN
+ {
+ \tl_set:Nn
+ \l_tmpa_tl
+ { \str_upper_case:n { #1 } }
+ \tl_set:Nx
+ #2
+ {
+ markdownOption
+ \tl_head:f { \l_tmpa_tl }
+ \tl_tail:n { #1 }
+ }
+ }
+\__markdown_add_lua_option:nnn
{ cacheDir }
- { . }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { frozenCacheFileName }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
- { frozenCacheFileName }
- { string }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
+ { path }
+ { \markdownOptionOutputDir / _markdown_\jobname }
+\__markdown_add_lua_option:nnn
{ frozenCacheFileName }
- { frozenCache.tex }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { blankBeforeBlockquote }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+ { path }
+ { \markdownOptionCacheDir / frozenCache.tex }
+\__markdown_add_lua_option:nnn
{ blankBeforeBlockquote }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { blankBeforeBlockquote }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { blankBeforeCodeFence }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ blankBeforeCodeFence }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { blankBeforeCodeFence }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { blankBeforeHeading }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ blankBeforeHeading }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { blankBeforeHeading }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { breakableBlockquotes }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ breakableBlockquotes }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { breakableBlockquotes }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { citationNbsps }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ citationNbsps }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { citationNbsps }
{ true }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { citations }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ citations }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { citations }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { codeSpans }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ codeSpans }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { codeSpans }
{ true }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { contentBlocks }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ contentBlocks }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { contentBlocks }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { contentBlocksLanguageMap }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
- { contentBlocksLanguageMap }
- { string }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
+\__markdown_add_lua_option:nnn
{ contentBlocksLanguageMap }
+ { path }
{ markdown-languages.json }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { definitionLists }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ definitionLists }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { definitionLists }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { eagerCache }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ eagerCache }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { eagerCache }
{ true }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { expectJekyllData }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ expectJekyllData }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { expectJekyllData }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { fencedCode }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ fencedCode }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { fencedCode }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { finalizeCache }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ finalizeCache }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { finalizeCache }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { footnotes }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ footnotes }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { footnotes }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { frozenCacheCounter }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ frozenCacheCounter }
{ counter }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { frozenCacheCounter }
{ 0 }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { hardLineBreaks }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ hardLineBreaks }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { hardLineBreaks }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { hashEnumerators }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ hashEnumerators }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { hashEnumerators }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { headerAttributes }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ headerAttributes }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { headerAttributes }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { html }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ html }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { html }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { hybrid }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ hybrid }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { hybrid }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { inlineFootnotes }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ inlineFootnotes }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { inlineFootnotes }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { jekyllData }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ jekyllData }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { jekyllData }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { pipeTables }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ pipeTables }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { pipeTables }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { preserveTabs }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ preserveTabs }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { preserveTabs }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { relativeReferences }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ relativeReferences }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { relativeReferences }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { shiftHeadings }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ shiftHeadings }
{ number }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { shiftHeadings }
{ 0 }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
+\__markdown_add_lua_option:nnn
{ slice }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
- { slice }
- { string }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
{ slice }
{ ^~$ }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { smartEllipses }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ smartEllipses }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { smartEllipses }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { startNumber }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ startNumber }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { startNumber }
{ true }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { stripIndent }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ stripIndent }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { stripIndent }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { tableCaptions }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ tableCaptions }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { tableCaptions }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { taskLists }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ taskLists }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { taskLists }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { texComments }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ texComments }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { texComments }
{ false }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { tightLists }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ tightLists }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { tightLists }
{ true }
-\seq_put_right:Nn
- \g__markdown_lua_options_seq
- { underscores }
-\prop_put:Nnn
- \g__markdown_lua_option_types_prop
+\__markdown_add_lua_option:nnn
{ underscores }
{ boolean }
-\prop_put:Nnn
- \g__markdown_default_lua_options_prop
- { underscores }
{ true }
\ExplSyntaxOff
-\def\markdownLastModified{2022/05/31}%
-\def\markdownVersion{2.15.2-0-gb238dbc}%
+\def\markdownLastModified{2022/06/27}%
+\def\markdownVersion{2.15.3-0-g7c8e03d}%
\let\markdownBegin\relax
\let\markdownEnd\relax
\let\markdownInput\relax
-\let\markdownOptionFinalizeCache\undefined
-\def\markdownOptionHelperScriptFileName{\jobname.markdown.lua}%
-\def\markdownOptionInputTempFileName{\jobname.markdown.in}%
-\def\markdownOptionOutputTempFileName{\jobname.markdown.out}%
-\def\markdownOptionErrorTempFileName{\jobname.markdown.err}%
-\def\markdownOptionOutputDir{.}%
-\def\markdownOptionCacheDir{\markdownOptionOutputDir/_markdown_\jobname}%
-\def\markdownOptionFrozenCacheFileName{\markdownOptionCacheDir/frozenCache.tex}
-\let\markdownOptionBlankBeforeBlockquote\undefined
-\let\markdownOptionBlankBeforeCodeFence\undefined
-\let\markdownOptionBlankBeforeHeading\undefined
-\let\markdownOptionBreakableBlockquotes\undefined
-\let\markdownOptionCitations\undefined
-\let\markdownOptionCitationNbsps\undefined
-\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
-\let\markdownOptionHybrid\undefined
-\let\markdownOptionInlineFootnotes\undefined
-\let\markdownOptionJekyllData\undefined
-\let\markdownOptionPipeTables\undefined
-\let\markdownOptionPreserveTabs\undefined
-\let\markdownOptionRelativeReferences\undefined
-\let\markdownOptionShiftHeadings\undefined
-\let\markdownOptionSlice\undefined
-\let\markdownOptionSmartEllipses\undefined
-\let\markdownOptionStartNumber\undefined
-\let\markdownOptionStripIndent\undefined
-\let\markdownOptionTableCaptions\undefined
-\let\markdownOptionTaskLists\undefined
-\let\markdownOptionTexComments\undefined
-\let\markdownOptionTightLists\undefined
-\def\markdownOptionStripPercentSigns{false}%
+\ExplSyntaxOn
+\seq_new:N \g__markdown_plain_tex_options_seq
+\prop_new:N \g__markdown_plain_tex_option_types_prop
+\prop_new:N \g__markdown_default_plain_tex_options_prop
+\tl_const:Nn \c__markdown_option_layer_plain_tex_tl { plain_tex }
+\seq_put_right:NV \g__markdown_option_layers_seq \c__markdown_option_layer_plain_tex_tl
+\cs_new:Nn
+ \__markdown_add_plain_tex_option:nnn
+ {
+ \__markdown_add_option:Vnnn
+ \c__markdown_option_layer_plain_tex_tl
+ { #1 }
+ { #2 }
+ { #3 }
+ }
+\__markdown_add_plain_tex_option:nnn
+ { frozenCache }
+ { boolean }
+ { false }
+\__markdown_add_plain_tex_option:nnn
+ { helperScriptFileName }
+ { path }
+ { \jobname.markdown.lua }
+\str_new:N
+ \g_luabridge_helper_script_filename_str
+\tl_gset:Nn
+ \g_luabridge_helper_script_filename_str
+ { \markdownOptionHelperScriptFileName }
+\__markdown_add_plain_tex_option:nnn
+ { inputTempFileName }
+ { path }
+ { \jobname.markdown.in }
+\__markdown_add_plain_tex_option:nnn
+ { outputTempFileName }
+ { path }
+ { \jobname.markdown.out }
+\str_new:N
+ \g_luabridge_standard_output_filename_str
+\tl_gset:Nn
+ \g_luabridge_standard_output_filename_str
+ { \markdownOptionOutputTempFileName }
+\__markdown_add_plain_tex_option:nnn
+ { errorTempFileName }
+ { path }
+ { \jobname.markdown.err }
+\str_new:N
+ \g_luabridge_error_output_filename_str
+\tl_gset:Nn
+ \g_luabridge_error_output_filename_str
+ { \markdownOptionErrorTempFileName }
+\__markdown_add_plain_tex_option:nnn
+ { outputDir }
+ { path }
+ { . }
+\str_new:N
+ \g_luabridge_output_dirname_str
+\tl_gset:Nn
+ \g_luabridge_output_dirname_str
+ { \markdownOptionOutputDir }
+\cs_new:Nn \__markdown_plain_tex_define_option_commands:
+ {
+ \seq_map_inline:Nn
+ \g__markdown_option_layers_seq
+ {
+ \seq_map_inline:cn
+ { g__markdown_ ##1 _options_seq }
+ {
+ \__markdown_plain_tex_define_option_command:n
+ { ####1 }
+ }
+ }
+ }
+\cs_new:Nn \__markdown_plain_tex_define_option_command:n
+ {
+ \__markdown_get_default_option_value:nN
+ { #1 }
+ \l_tmpa_tl
+ \__markdown_set_option_value:nV
+ { #1 }
+ \l_tmpa_tl
+ }
+\cs_new:Nn
+ \__markdown_set_option_value:nn
+ {
+ \__markdown_define_option:n
+ { #1 }
+ \__markdown_get_option_type:nN
+ { #1 }
+ \l_tmpa_tl
+ \str_if_eq:NNTF
+ \c__markdown_option_type_counter_tl
+ \l_tmpa_tl
+ {
+ \__markdown_option_tl_to_csname:nN
+ { #1 }
+ \l_tmpa_tl
+ \int_gset:cn
+ { \l_tmpa_tl }
+ { #2 }
+ }
+ {
+ \__markdown_option_tl_to_csname:nN
+ { #1 }
+ \l_tmpa_tl
+ \cs_set:cpn
+ { \l_tmpa_tl }
+ { #2 }
+ }
+ }
+\cs_generate_variant:Nn
+ \__markdown_set_option_value:nn
+ { nV }
+\cs_new:Nn
+ \__markdown_define_option:n
+ {
+ \__markdown_option_tl_to_csname:nN
+ { #1 }
+ \l_tmpa_tl
+ \cs_if_free:cT
+ { \l_tmpa_tl }
+ {
+ \__markdown_get_option_type:nN
+ { #1 }
+ \l_tmpb_tl
+ \str_if_eq:NNT
+ \c__markdown_option_type_counter_tl
+ \l_tmpb_tl
+ {
+ \__markdown_option_tl_to_csname:nN
+ { #1 }
+ \l_tmpa_tl
+ \int_new:c
+ { \l_tmpa_tl }
+ }
+ }
+ }
+\__markdown_plain_tex_define_option_commands:
+\seq_put_right:Nn
+ \g__markdown_plain_tex_options_seq
+ { stripPercentSigns }
+\prop_put:Nnn
+ \g__markdown_plain_tex_option_types_prop
+ { stripPercentSigns }
+ { boolean }
+\prop_put:Nnx
+ \g__markdown_default_plain_tex_options_prop
+ { stripPercentSigns }
+ { false }
+\ExplSyntaxOff
\ExplSyntaxOn
\seq_new:N \g__markdown_renderers_seq
\prop_new:N \g__markdown_renderer_arities_prop
@@ -1449,84 +1511,57 @@
{ markdown/jekyllData }
{ }
\ExplSyntaxOff
-\def\markdownRendererAttributeIdentifierPrototype#1{}%
-\def\markdownRendererAttributeClassNamePrototype#1{}%
-\def\markdownRendererAttributeKeyValuePrototype#1#2{}%
-\def\markdownRendererDocumentBeginPrototype{}%
-\def\markdownRendererDocumentEndPrototype{}%
-\def\markdownRendererInterblockSeparatorPrototype{}%
-\def\markdownRendererLineBreakPrototype{}%
-\def\markdownRendererEllipsisPrototype{}%
-\def\markdownRendererHeaderAttributeContextBeginPrototype{}%
-\def\markdownRendererHeaderAttributeContextEndPrototype{}%
-\def\markdownRendererNbspPrototype{}%
-\def\markdownRendererLeftBracePrototype{}%
-\def\markdownRendererRightBracePrototype{}%
-\def\markdownRendererDollarSignPrototype{}%
-\def\markdownRendererPercentSignPrototype{}%
-\def\markdownRendererAmpersandPrototype{}%
-\def\markdownRendererUnderscorePrototype{}%
-\def\markdownRendererHashPrototype{}%
-\def\markdownRendererCircumflexPrototype{}%
-\def\markdownRendererBackslashPrototype{}%
-\def\markdownRendererTildePrototype{}%
-\def\markdownRendererPipePrototype{}%
-\def\markdownRendererCodeSpanPrototype#1{}%
-\def\markdownRendererLinkPrototype#1#2#3#4{}%
-\def\markdownRendererImagePrototype#1#2#3#4{}%
-\def\markdownRendererContentBlockPrototype#1#2#3#4{}%
-\def\markdownRendererContentBlockOnlineImagePrototype#1#2#3#4{}%
-\def\markdownRendererContentBlockCodePrototype#1#2#3#4#5{}%
-\def\markdownRendererUlBeginPrototype{}%
-\def\markdownRendererUlBeginTightPrototype{}%
-\def\markdownRendererUlItemPrototype{}%
-\def\markdownRendererUlItemEndPrototype{}%
-\def\markdownRendererUlEndPrototype{}%
-\def\markdownRendererUlEndTightPrototype{}%
-\def\markdownRendererOlBeginPrototype{}%
-\def\markdownRendererOlBeginTightPrototype{}%
-\def\markdownRendererOlItemPrototype{}%
-\def\markdownRendererOlItemWithNumberPrototype#1{}%
-\def\markdownRendererOlItemEndPrototype{}%
-\def\markdownRendererOlEndPrototype{}%
-\def\markdownRendererOlEndTightPrototype{}%
-\def\markdownRendererDlBeginPrototype{}%
-\def\markdownRendererDlBeginTightPrototype{}%
-\def\markdownRendererDlItemPrototype#1{}%
-\def\markdownRendererDlItemEndPrototype{}%
-\def\markdownRendererDlDefinitionBeginPrototype{}%
-\def\markdownRendererDlDefinitionEndPrototype{}%
-\def\markdownRendererDlEndPrototype{}%
-\def\markdownRendererDlEndTightPrototype{}%
-\def\markdownRendererEmphasisPrototype#1{}%
-\def\markdownRendererStrongEmphasisPrototype#1{}%
-\def\markdownRendererBlockQuoteBeginPrototype{}%
-\def\markdownRendererBlockQuoteEndPrototype{}%
-\def\markdownRendererInputVerbatimPrototype#1{}%
-\def\markdownRendererInputFencedCodePrototype#1#2{}%
-\def\markdownRendererJekyllDataBeginPrototype{}%
-\def\markdownRendererJekyllDataEndPrototype{}%
-\def\markdownRendererHeadingOnePrototype#1{}%
-\def\markdownRendererHeadingTwoPrototype#1{}%
-\def\markdownRendererHeadingThreePrototype#1{}%
-\def\markdownRendererHeadingFourPrototype#1{}%
-\def\markdownRendererHeadingFivePrototype#1{}%
-\def\markdownRendererHeadingSixPrototype#1{}%
-\def\markdownRendererHorizontalRulePrototype{}%
-\def\markdownRendererFootnotePrototype#1{}%
-\def\markdownRendererCitePrototype#1{}%
-\def\markdownRendererTextCitePrototype#1{}%
-\def\markdownRendererTablePrototype#1#2#3{}%
-\def\markdownRendererInlineHtmlCommentPrototype#1{}%
-\let\markdownRendererBlockHtmlCommentBeginPrototype=\iffalse
-\let\markdownRendererBlockHtmlCommentBegin=\iffalse
-\let\markdownRendererBlockHtmlCommentEndPrototype=\fi
-\let\markdownRendererBlockHtmlCommentEnd=\fi
-\def\markdownRendererInlineHtmlTagPrototype#1{}%
-\def\markdownRendererInputBlockHtmlElementPrototype#1{}%
-\def\markdownRendererTickedBoxPrototype{}%
-\def\markdownRendererHalfTickedBoxPrototype{}%
-\def\markdownRendererUntickedBoxPrototype{}%
+\ExplSyntaxOn
+\cs_new:Nn \__markdown_plaintex_define_renderer_prototypes:
+ {
+ \seq_map_function:NN
+ \g__markdown_renderers_seq
+ \__markdown_plaintex_define_renderer_prototype:n
+ \let\markdownRendererBlockHtmlCommentBeginPrototype=\iffalse
+ \let\markdownRendererBlockHtmlCommentBegin=\iffalse
+ \let\markdownRendererBlockHtmlCommentEndPrototype=\fi
+ \let\markdownRendererBlockHtmlCommentEnd=\fi
+ }
+\cs_new:Nn \__markdown_plaintex_define_renderer_prototype:n
+ {
+ \__markdown_renderer_prototype_tl_to_csname:nN
+ { #1 }
+ \l_tmpa_tl
+ \prop_get:NnN
+ \g__markdown_renderer_arities_prop
+ { #1 }
+ \l_tmpb_tl
+ \__markdown_plaintex_define_renderer_prototype:cV
+ { \l_tmpa_tl }
+ \l_tmpb_tl
+ }
+\cs_new:Nn \__markdown_renderer_prototype_tl_to_csname:nN
+ {
+ \tl_set:Nn
+ \l_tmpa_tl
+ { \str_upper_case:n { #1 } }
+ \tl_set:Nx
+ #2
+ {
+ markdownRenderer
+ \tl_head:f { \l_tmpa_tl }
+ \tl_tail:n { #1 }
+ Prototype
+ }
+ }
+\cs_new:Nn \__markdown_plaintex_define_renderer_prototype:Nn
+ {
+ \cs_generate_from_arg_count:NNnn
+ #1
+ \cs_set:Npn
+ { #2 }
+ { }
+ }
+\cs_generate_variant:Nn
+ \__markdown_plaintex_define_renderer_prototype:Nn
+ { cV }
+\__markdown_plaintex_define_renderer_prototypes:
+\ExplSyntaxOff
\let\markdownMakeOther\relax
\let\markdownReadAndConvert\relax
\begingroup
@@ -1535,13 +1570,42 @@
|markdownReadAndConvert{\markdownEnd}%
{|markdownEnd}}%
|endgroup
-\ifx\markdownMode\undefined
- \ifx\directlua\undefined
- \def\markdownMode{0}%
- \else
- \def\markdownMode{2}%
- \fi
-\fi
+\ExplSyntaxOn
+\cs_if_exist:NF
+ \markdownMode
+ {
+ \file_if_exist:nTF
+ { lt3luabridge.tex }
+ {
+ \cs_new:Npn
+ \markdownMode
+ { 3 }
+ }
+ {
+ \cs_if_exist:NTF
+ \directlua
+ {
+ \cs_new:Npn
+ \markdownMode
+ { 2 }
+ }
+ {
+ \cs_new:Npn
+ \markdownMode
+ { 0 }
+ }
+ }
+ }
+\int_compare:nF
+ { \markdownMode = 3 }
+ {
+ \int_new:N
+ \g_luabridge_method_int
+ \int_gset:Nn
+ \g_luabridge_method_int
+ { \markdownMode }
+ }
+\ExplSyntaxOff
\def\markdownLuaRegisterIBCallback#1{\relax}%
\def\markdownLuaUnregisterIBCallback#1{\relax}%
\ifx\markdownInfo\undefined
@@ -1557,7 +1621,6 @@
\errhelp{#2.}%
\errmessage{(l.\the\inputlineno) markdown.tex error: #1}}%
\fi
-\newcount\markdownFrozenCacheCounter
\def\markdownRendererInterblockSeparatorPrototype{\par}%
\def\markdownRendererLineBreakPrototype{\hfil\break}%
\let\markdownRendererEllipsisPrototype\dots
@@ -1638,7 +1701,7 @@
\seq_get_right:NN
\g__markdown_jekyll_data_datatypes_seq
\l_tmpa_tl
- \tl_if_eq:NNTF
+ \str_if_eq:NNTF
\l_tmpa_tl
\c__markdown_jekyll_data_sequence_tl
{
@@ -1746,10 +1809,6 @@
\ExplSyntaxOff
\ExplSyntaxOn
\tl_new:N \g__markdown_formatted_lua_options_tl
-\tl_const:Nn \c__markdown_lua_option_type_boolean { boolean }
-\tl_const:Nn \c__markdown_lua_option_type_counter { counter }
-\tl_const:Nn \c__markdown_lua_option_type_number { number }
-\tl_const:Nn \c__markdown_lua_option_type_string { string }
\cs_new:Nn \__markdown_format_lua_options:
{
\tl_gclear:N
@@ -1760,109 +1819,38 @@
}
\cs_new:Nn \__markdown_format_lua_option:n
{
- \__markdown_typecheck_lua_option:n { #1 }
- \tl_set:Nn
- \l_tmpb_tl
- { \str_upper_case:n { #1 } }
- \tl_set:Nx
- \l_tmpa_tl
- {
- markdownOption
- \tl_head:f { \l_tmpb_tl }
- \tl_tail:n { #1 }
- }
- \prop_get:NnN
- \g__markdown_lua_option_types_prop
+ \__markdown_typecheck_option:n
+ { #1 }
+ \__markdown_get_option_type:nN
{ #1 }
- \l_tmpb_tl
- \cs_if_free:cTF
- { \l_tmpa_tl }
- { }
- {
- \tl_case:NnF
- \l_tmpb_tl
- {
- \c__markdown_lua_option_type_string
- {
- \tl_gput_right:Nx
- \g__markdown_formatted_lua_options_tl
- { #1~=~" \cs:w \l_tmpa_tl \cs_end: ",~ }
- }
- \c__markdown_lua_option_type_counter
- {
- \tl_gput_right:Nx
- \g__markdown_formatted_lua_options_tl
- { #1~=~ \the \cs:w \l_tmpa_tl \cs_end: ,~ }
- }
- }
- {
- \tl_gput_right:Nx
- \g__markdown_formatted_lua_options_tl
- { #1~=~ \cs:w \l_tmpa_tl \cs_end: ,~ }
- }
- }
- }
-\msg_new:nnn
- { markdown }
- { undefined-lua-option }
- {
- Lua~option~#1~is~undefined.
- }
-\msg_new:nnn
- { markdown }
- { failed-typecheck-for-boolean-lua-option }
- {
- Lua~option~#1~has~value~#2,~
- but~a~boolean~(true~or~false)~was~expected.
- }
-\cs_new:Nn \__markdown_typecheck_lua_option:n
- {
- \tl_set:Nn
- \l_tmpb_tl
- { \str_upper_case:n { #1 } }
- \tl_set:Nx
\l_tmpa_tl
+ \bool_if:nTF
{
- markdownOption
- \tl_head:f { \l_tmpb_tl }
- \tl_tail:n { #1 }
+ \str_if_eq_p:VV
+ \l_tmpa_tl
+ \c__markdown_option_type_boolean_tl ||
+ \str_if_eq_p:VV
+ \l_tmpa_tl
+ \c__markdown_option_type_number_tl ||
+ \str_if_eq_p:VV
+ \l_tmpa_tl
+ \c__markdown_option_type_counter_tl
}
- \prop_get:NnNTF
- \g__markdown_lua_option_types_prop
- { #1 }
- \l_tmpb_tl
{
- \cs_if_free:cTF
- { \l_tmpa_tl }
- { }
- {
- \tl_case:Nn
- \l_tmpb_tl
- {
- \c__markdown_lua_option_type_boolean
- {
- \tl_case:cnF
- { \l_tmpa_tl }
- {
- \c__markdown_lua_option_value_true { }
- \c__markdown_lua_option_value_false { }
- }
- {
- \msg_error:nnxx
- { markdown }
- { failed-typecheck-for-boolean-lua-option }
- { #1 }
- { \l_tmpa_tl }
- }
- }
- }
- }
+ \__markdown_get_option_value:nN
+ { #1 }
+ \l_tmpa_tl
+ \tl_gput_right:Nx
+ \g__markdown_formatted_lua_options_tl
+ { #1~=~ \l_tmpa_tl ,~ }
}
{
- \msg_error:nnn
- { markdown }
- { undefined-lua-option }
+ \__markdown_get_option_value:nN
{ #1 }
+ \l_tmpa_tl
+ \tl_gput_right:Nx
+ \g__markdown_formatted_lua_options_tl
+ { #1~=~ " \l_tmpa_tl " ,~ }
}
}
\let\markdownPrepareLuaOptions=\__markdown_format_lua_options:
@@ -1878,39 +1866,38 @@
local convert = md.new(\markdownLuaOptions)
}%
\ExplSyntaxOn
-\tl_const:Nn \c__markdown_lua_option_value_true { true }
-\tl_const:Nn \c__markdown_lua_option_value_false { false }
-\cs_new:Nn \__markdown_if_option:nTF
+\cs_new:Nn
+ \__markdown_if_option:nTF
{
- \tl_set:Nn
- \l_tmpb_tl
- { \str_upper_case:n { #1 } }
- \tl_set:Nx
+ \__markdown_get_option_type:nN
+ { #1 }
\l_tmpa_tl
+ \str_if_eq:NNF
+ \l_tmpa_tl
+ \c__markdown_option_type_boolean_tl
{
- markdownOption
- \tl_head:f { \l_tmpb_tl }
- \tl_tail:n { #1 }
- }
- \cs_if_free:cTF
- { \l_tmpa_tl }
- {
- \prop_get:NnN
- \g__markdown_default_lua_options_prop
+ \msg_error:nnxx
+ { __markdown }
+ { expected-boolean-option }
{ #1 }
- \l_tmpb_tl
- }
- {
- \tl_set:Nf
- \l_tmpb_tl
- { \cs:w \l_tmpa_tl \cs_end: }
+ { \l_tmpa_tl }
}
- \tl_if_eq:NNTF
- \l_tmpb_tl
- \c__markdown_lua_option_value_true
+ \__markdown_get_option_value:nN
+ { #1 }
+ \l_tmpa_tl
+ \str_if_eq:NNTF
+ \l_tmpa_tl
+ \c__markdown_option_value_true_tl
{ #2 }
{ #3 }
}
+\msg_new:nnn
+ { __markdown }
+ { expected-boolean-option }
+ {
+ Option~#1~has~type~#2,~
+ but~a~boolean~was~expected.
+ }
\let\markdownIfOption=\__markdown_if_option:nTF
\ExplSyntaxOff
\csname newread\endcsname\markdownInputFileStream
@@ -1982,11 +1969,24 @@
^^M}@
^^M}@
|endgroup
+\ExplSyntaxOn
+\int_compare:nT
+ { \markdownMode = 3 }
+ {
+ \markdownInfo{Using~mode~3:~The~lt3luabridge~package}
+ \file_input:n { lt3luabridge.tex }
+ \cs_new:Npn
+ \markdownLuaExecute
+ { \luabridgeExecute }
+ }
+\ExplSyntaxOff
\ifnum\markdownMode<2\relax
\ifnum\markdownMode=0\relax
- \markdownInfo{Using mode 0: Shell escape via write18}%
+ \markdownWarning{Using mode 0: Shell escape via write18
+ (deprecated, to be removed in Markdown 3.0.0)}%
\else
- \markdownInfo{Using mode 1: Shell escape via os.execute}%
+ \markdownWarning{Using mode 1: Shell escape via os.execute
+ (deprecated, to be removed in Markdown 3.0.0)}%
\fi
\ifx\pdfshellescape\undefined
\ifx\shellescape\undefined
@@ -2053,8 +2053,10 @@
/|markdownOptionOutputTempFileName"}%
|input|markdownOptionOutputTempFileName|relax}%
|endgroup
-\else
-\markdownInfo{Using mode 2: Direct Lua access}%
+\fi
+\ifnum\markdownMode=2\relax
+ \markdownWarning{Using mode 2: Direct Lua access
+ (deprecated, to be removed in Markdown 3.0.0)}%
\begingroup
\catcode`|=0%
\catcode`\\=12%
@@ -2079,15 +2081,15 @@
|begingroup
|catcode`|%=12
|markdownIfOption{frozenCache}{%
- |ifnum|markdownFrozenCacheCounter=0|relax
+ |ifnum|markdownOptionFrozenCacheCounter=0|relax
|markdownInfo{Reading frozen cache from
"|markdownOptionFrozenCacheFileName"}%
|input|markdownOptionFrozenCacheFileName|relax
|fi
|markdownInfo{Including markdown document number
- "|the|markdownFrozenCacheCounter" from frozen cache}%
- |csname markdownFrozenCache|the|markdownFrozenCacheCounter|endcsname
- |global|advance|markdownFrozenCacheCounter by 1|relax
+ "|the|markdownOptionFrozenCacheCounter" from frozen cache}%
+ |csname markdownFrozenCache|the|markdownOptionFrozenCacheCounter|endcsname
+ |global|advance|markdownOptionFrozenCacheCounter by 1|relax
}{%
|markdownInfo{Including markdown document "#1"}%
|openin|markdownInputFileStream#1
@@ -2101,7 +2103,7 @@
assert(file:close())
print(convert(input:gsub("\r\n?", "\n") .. "\n"))}%
|markdownIfOption{finalizeCache}{%
- |global|advance|markdownFrozenCacheCounter by 1|relax
+ |global|advance|markdownOptionFrozenCacheCounter by 1|relax
}%
}%
|endgroup