diff options
-rw-r--r-- | rst_context.lua | 36 | ||||
-rw-r--r-- | rst_helpers.lua | 7 |
2 files changed, 24 insertions, 19 deletions
diff --git a/rst_context.lua b/rst_context.lua index 12c6817..e5737e0 100644 --- a/rst_context.lua +++ b/rst_context.lua @@ -39,8 +39,13 @@ do end end -local rst_context = {} +local err = function(str) + if str then + io.write("\n*[rstctx] Error: " .. str .. "\n\n") + end +end +local rst_context = {} rst_context.collected_references = {} rst_context.collected_adornments = {} @@ -118,7 +123,6 @@ function rst_context.strong_emphasis (str) end function rst_context.literal (str) - print(str) str = str:gsub([[\]], [[\\]]) -- evade escaping of backslashes return [[\\type{]] .. str .. [[}]] --return [[\\starttyping ]] .. str .. [[\\stoptyping]] @@ -470,14 +474,8 @@ function rst_context.paragraph (data) local str if not data then return "" - --elseif type(data) == "table" then - --str = #data > 1 and helpers.string.wrapat(inline_parser:match(table.concat(data, " ")), 65) or data[1] elseif type(data) == "table" then - str = table.concat(data, " ") - str = inline_parser:match(str) - str = helpers.string.wrapat(str) - print(str) - --str = #data > 1 and helpers.string.wrapat(inline_parser:match(table.concat(data, " ")), 65) or data[1] + str = #data > 1 and helpers.string.wrapat(inline_parser:match(table.concat(data, " ")), 65) or data[1] else str = data end @@ -1169,9 +1167,9 @@ function optional_setups.references () % #1 target name, #2 link text \def\RSTchoosegoto#1#2{% - \rawdoifinsetelse{#1}{\RSTexternalreferences} - {\from[#1]} - {\goto{#2}[#1]} + \rawdoifinsetelse{#1}{\RSTexternalreferences}% + {\from[#1]}% + {\goto{#2}[#1]}% } ]] @@ -1277,12 +1275,12 @@ rst_context.directives.image = function(name, data) \def\RSTsubstitution%s{%% \placefigure[here]{%s}{\externalfigure[%s]%s} } -]], name, properties.caption, name, properties.setup) +]], name, inline_parser:match(properties.caption), name, properties.setup) else -- image won't be referenced but used instantly img = img .. string.format([[ \placefigure[here]{%s}{\externalfigure[%s]%s} -]], properties.caption, data, properties.setup) +]], inline_parser:match(properties.caption), data, properties.setup) end return img end @@ -1375,7 +1373,7 @@ rst_context.directives.ctx = function(name, data) \startbuffer[%s] %s \stopbuffer -\def\RSTsubstitution%s{ +\def\RSTsubstitution%s{%% \getbuffer[%s] } ]], name, data, name, name) @@ -1416,7 +1414,11 @@ function optional_setups.substitutions () for name, content in next, rs do local directive, data = content.directive, content.data name, data = name:gsub("%s", ""), string.strip(data) - substitutions = substitutions .. directives[directive](name, data) + if directives[directive] then + substitutions = substitutions .. directives[directive](name, data) + else + err(directive .. " does not exist.") + end end return substitutions end @@ -1573,7 +1575,7 @@ function optional_setups.caution () \def\startRSTcaution{% \startparagraph -\lettrine[Lines=2,Raise=.5,Findent=\RSTbendskip,Nindent=0pt]{\symbol[dbend]}{}% +\dontleavehmode\lettrine[Lines=2,Raise=.5,Findent=\RSTbendskip,Nindent=0pt]{\symbol[dbend]}{}% } \let\stopRSTcaution\stopparagraph diff --git a/rst_helpers.lua b/rst_helpers.lua index 92f41a2..d70e247 100644 --- a/rst_helpers.lua +++ b/rst_helpers.lua @@ -594,19 +594,22 @@ do whitespace = S" \t\v" + P"\n" / function() linelength = 0 end, nowhitespace = 1 - V"whitespace", ignore = P[[\\type{]] * (1 - P"}")^0 * P"}", + -- the initial whitespace of the “other” pattern must not be + -- enforced (“^1”) as it will break the exceptions (“ignore” + -- pattern)! In general it is better to have the wrapper ignore some + -- valid breaks than to not have it matching some valid strings at + -- all. other = Cmt(V"whitespace"^0 * (V"ignore" + (1 - V"whitespace")^1), function(s,i,w) linelength = linelength + ulen(w) return true end), wrapme = Cmt(V"whitespace"^1 * (1 - V"whitespace" - V"ignore")^1, function(s,i,w) local lw = ulen(w) - print(w) if linelength + lw > width then linelength = lw return true end return false - --end) / function (word) return "\n" .. match(V"whitespace"^1 * C((1 - V"whitespace")^1), word) end, end) / function (word) return "\n" .. word:match("[^%s]+") end, } |