diff options
Diffstat (limited to 'Master/texmf-dist/tex/luatex/markdown/markdown.lua')
-rw-r--r-- | Master/texmf-dist/tex/luatex/markdown/markdown.lua | 106 |
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 |