summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/luatex/markdown/markdown.lua
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-04-05 21:58:26 +0000
committerKarl Berry <karl@freefriends.org>2022-04-05 21:58:26 +0000
commit36595a910f2b8a3a56606d6f16c2626f44b29822 (patch)
tree71faae4c79494470e4930ec6e9810d5f473788a4 /Master/texmf-dist/tex/luatex/markdown/markdown.lua
parentcc0ced9a900ccb1da557afadafdd4f500f69944a (diff)
markdown (31mar22)
git-svn-id: svn://tug.org/texlive/trunk@62928 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/luatex/markdown/markdown.lua')
-rw-r--r--Master/texmf-dist/tex/luatex/markdown/markdown.lua106
1 files changed, 62 insertions, 44 deletions
diff --git a/Master/texmf-dist/tex/luatex/markdown/markdown.lua b/Master/texmf-dist/tex/luatex/markdown/markdown.lua
index f3c46b02906..6955982c3f2 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.14.1-0-gb933d81",
+ version = "2.15.0-0-g9296cf1",
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",
@@ -89,6 +89,7 @@ defaultOptions.contentBlocks = false
defaultOptions.contentBlocksLanguageMap = "markdown-languages.json"
defaultOptions.definitionLists = false
defaultOptions.eagerCache = true
+defaultOptions.expectJekyllData = false
defaultOptions.fencedCode = false
defaultOptions.finalizeCache = false
defaultOptions.footnotes = false
@@ -3477,8 +3478,6 @@ parsers.between = function(p, starter, ender)
end
parsers.urlchar = parsers.anyescaped - parsers.newline - parsers.more
-parsers.Block = V("Block")
-
parsers.OnlineImageURL
= parsers.leader
* parsers.onlineimageurl
@@ -3608,13 +3607,13 @@ function M.reader.new(writer, options)
= create_parser("parse_blocks",
function()
return larsers.blocks
- end, false)
+ end, true)
- local parse_blocks_toplevel
- = create_parser("parse_blocks_toplevel",
+ local parse_blocks_nested
+ = create_parser("parse_blocks_nested",
function()
- return larsers.blocks_toplevel
- end, true)
+ return larsers.blocks_nested
+ end, false)
local parse_inlines
= create_parser("parse_inlines",
@@ -3703,7 +3702,7 @@ function M.reader.new(writer, options)
return writer.defer_call(function()
local found = rawnotes[normalize_tag(ref)]
if found then
- return writer.note(parse_blocks_toplevel(found))
+ return writer.note(parse_blocks_nested(found))
else
return {"[", parse_inlines("^" .. ref), "]"}
end
@@ -4001,7 +4000,7 @@ larsers.PipeTable = Ct(larsers.table_row * parsers.newline
* parsers.contentblock_tail
/ writer.contentblock
- larsers.DisplayHtml = (parsers.htmlcomment / parse_blocks)
+ larsers.DisplayHtml = (parsers.htmlcomment / parse_blocks_nested)
/ writer.block_html_comment
+ parsers.emptyelt_block / writer.block_html_element
+ parsers.openelt_exact("hr") / writer.block_html_element
@@ -4019,21 +4018,40 @@ larsers.PipeTable = Ct(larsers.table_row * parsers.newline
expandtabs(code))
end
- larsers.JekyllData = P("---")
+ larsers.JekyllData = Cmt( C((parsers.line - P("---") - P("..."))^0)
+ , function(s, i, text)
+ local data
+ local ran_ok, error = 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 parse_blocks_nested(s)
+ end, nil)
+ else
+ return false
+ end
+ end
+ )
+
+ larsers.UnexpectedJekyllData
+ = P("---")
* parsers.blankline / 0
* #(-parsers.blankline) -- if followed by blank, it's an hrule
- * C((parsers.line - P("---") - P("..."))^0)
+ * larsers.JekyllData
* (P("---") + P("..."))
- / function(text)
- local tinyyaml = require("markdown-tinyyaml")
- data = tinyyaml.parse(text,{timestamps=false})
- return writer.jekyllData(data, function(s)
- return parse_blocks(s)
- end, nil)
- end
+
+ larsers.ExpectedJekyllData
+ = ( P("---")
+ * parsers.blankline / 0
+ * #(-parsers.blankline) -- if followed by blank, it's an hrule
+ )^-1
+ * larsers.JekyllData
+ * (P("---") + P("..."))^-1
larsers.Blockquote = Cs(larsers.blockquote_body^1)
- / parse_blocks_toplevel / writer.blockquote
+ / parse_blocks_nested / writer.blockquote
larsers.HorizontalRule = ( parsers.lineof(parsers.asterisk)
+ parsers.lineof(parsers.dash)
@@ -4043,15 +4061,6 @@ larsers.PipeTable = Ct(larsers.table_row * parsers.newline
larsers.Reference = parsers.define_reference_parser / register_link
larsers.Paragraph = parsers.nonindentspace * Ct(parsers.Inline^1)
- * parsers.newline
- * ( parsers.blankline^1
- + #parsers.hash
- + #(parsers.leader * parsers.more * parsers.space^-1)
- )
- / writer.paragraph
-
- larsers.ToplevelParagraph
- = parsers.nonindentspace * Ct(parsers.Inline^1)
* ( parsers.newline
* ( parsers.blankline^1
+ #parsers.hash
@@ -4092,7 +4101,7 @@ larsers.PipeTable = Ct(larsers.table_row * parsers.newline
larsers.TightListItem = function(starter)
return -larsers.HorizontalRule
* (Cs(starter / "" * larsers.tickbox^-1 * larsers.ListBlock * larsers.NestedList^-1)
- / parse_blocks)
+ / parse_blocks_nested)
* -(parsers.blanklines * parsers.indent)
end
@@ -4101,7 +4110,7 @@ larsers.PipeTable = Ct(larsers.table_row * parsers.newline
* Cs( starter / "" * larsers.tickbox^-1 * larsers.ListBlock * Cc("\n")
* (larsers.NestedList + larsers.ListContinuationBlock^0)
* (parsers.blanklines / "\n\n")
- ) / parse_blocks
+ ) / parse_blocks_nested
end
larsers.BulletList = ( Ct(larsers.TightListItem(parsers.bullet)^1) * Cc(true)
@@ -4138,12 +4147,12 @@ larsers.PipeTable = Ct(larsers.table_row * parsers.newline
larsers.DefinitionListItemLoose = C(parsers.line) * parsers.skipblanklines
* Ct((parsers.defstart
* parsers.indented_blocks(parsers.dlchunk)
- / parse_blocks_toplevel)^1)
+ / parse_blocks_nested)^1)
* Cc(false) / definition_list_item
larsers.DefinitionListItemTight = C(parsers.line)
* Ct((parsers.defstart * parsers.dlchunk
- / parse_blocks)^1)
+ / parse_blocks_nested)^1)
* Cc(true) / definition_list_item
larsers.DefinitionList = ( Ct(larsers.DefinitionListItemLoose^1) * Cc(false)
@@ -4218,17 +4227,22 @@ larsers.PipeTable = Ct(larsers.table_row * parsers.newline
local syntax =
{ "Blocks",
- Blocks = larsers.Blank^0 * parsers.Block^-1
- * (larsers.Blank^0 / writer.interblocksep
- * parsers.Block)^0
- * larsers.Blank^0 * parsers.eof,
+ Blocks = ( V("ExpectedJekyllData")
+ * (V("Blank")^0 / writer.interblocksep)
+ )^-1
+ * V("Blank")^0
+ * V("Block")^-1
+ * (V("Blank")^0 / writer.interblocksep
+ * V("Block"))^0
+ * V("Blank")^0 * parsers.eof,
Blank = larsers.Blank,
- JekyllData = larsers.JekyllData,
+ UnexpectedJekyllData = larsers.UnexpectedJekyllData,
+ ExpectedJekyllData = larsers.ExpectedJekyllData,
Block = V("ContentBlock")
- + V("JekyllData")
+ + V("UnexpectedJekyllData")
+ V("Blockquote")
+ V("PipeTable")
+ V("Verbatim")
@@ -4357,7 +4371,11 @@ larsers.PipeTable = Ct(larsers.table_row * parsers.newline
end
if not options.jekyllData then
- syntax.JekyllData = parsers.fail
+ syntax.UnexpectedJekyllData = parsers.fail
+ end
+
+ if not options.jekyllData or not options.expectJekyllData then
+ syntax.ExpectedJekyllData = parsers.fail
end
if options.preserveTabs then
@@ -4376,9 +4394,9 @@ larsers.PipeTable = Ct(larsers.table_row * parsers.newline
syntax.AutoLinkRelativeReference = parsers.fail
end
- local blocks_toplevel_t = util.table_copy(syntax)
- blocks_toplevel_t.Paragraph = larsers.ToplevelParagraph
- larsers.blocks_toplevel = Ct(blocks_toplevel_t)
+ local blocks_nested_t = util.table_copy(syntax)
+ blocks_nested_t.ExpectedJekyllData = parsers.fail
+ larsers.blocks_nested = Ct(blocks_nested_t)
larsers.blocks = Ct(syntax)
@@ -4418,7 +4436,7 @@ larsers.PipeTable = Ct(larsers.table_row * parsers.newline
local salt = table.concat(opt_string, ",") .. "," .. metadata.version
local output
local function convert(input)
- local document = parse_blocks_toplevel(input)
+ local document = parse_blocks(input)
return util.rope_to_string(writer.document(document))
end
if options.eagerCache or options.finalizeCache then