diff options
author | Karl Berry <karl@freefriends.org> | 2022-06-29 20:10:26 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-06-29 20:10:26 +0000 |
commit | eea3fd6730ed6c06905319be992f9b583dfd3e6f (patch) | |
tree | 1fff20a4e2109373c7562e3fe9d28e8839c05f0f /Master/texmf-dist/tex/generic/markdown | |
parent | e107916fe454b6ab807d132b971adfc2022dd4b2 (diff) |
markdown (29jun22)
git-svn-id: svn://tug.org/texlive/trunk@63757 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/markdown')
-rw-r--r-- | Master/texmf-dist/tex/generic/markdown/markdown.tex | 1154 |
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 |