summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rst_context.lua2
-rw-r--r--rst_parser.lua51
2 files changed, 45 insertions, 8 deletions
diff --git a/rst_context.lua b/rst_context.lua
index f595a27..ee943ab 100644
--- a/rst_context.lua
+++ b/rst_context.lua
@@ -393,7 +393,7 @@ end
function rst_context.literal_block (str)
local indent = P" "^1
- local stripme = indent:match(str)
+ local stripme = indent:match(str) or 0
local strip = P{
[1] = "strip",
diff --git a/rst_parser.lua b/rst_parser.lua
index 99265bd..2aa4e38 100644
--- a/rst_parser.lua
+++ b/rst_parser.lua
@@ -205,17 +205,31 @@ local parser = P{
-- Literal blocks
--------------------------------------------------------------------------------
+ literal_block = V"unquoted_literal_block"
+ + V"quoted_literal_block",
+
+--------------------------------------------------------------------------------
+-- Quoted literal blocks
+--------------------------------------------------------------------------------
+
literal_block = V"literal_block_marker"
- * Cs(V"literal_block_lines"
- * (V"blank_line"^1 * V"literal_block_lines")^0)
- * V"blank_line"^0
- / rst.literal_block,
+ * Cs(V"literal_block_lines"
+ * (V"blank_line"^1 * V"literal_block_lines")^0)
+ * V"blank_line"^0
+ / rst.literal_block,
literal_block_marker = V"double_colon" * V"eol" * V"blank_line",
- literal_block_lines = V"literal_block_first"
- * (V"literal_block_other"
- - V"blank_line")^0,
+ literal_block_lines = V"unquoted_literal_block_lines"
+ + V"quoted_literal_block_lines",
+
+ unquoted_literal_block_lines = V"literal_block_first"
+ * (V"literal_block_other"
+ - V"blank_line")^0,
+
+ quoted_literal_block_lines = V"quoted_literal_block_first"
+ * (V"quoted_literal_block_other"
+ - V"blank_line")^0,
literal_block_first = Cmt(V"space"^1, function (s, i, indent)
warn("lbk-f", #indent, "", "", i)
@@ -240,6 +254,29 @@ local parser = P{
* V"rest_of_line"
* V"eol",
+ quoted_literal_block_first = Cmt(V"adornment_char", function (s, i, indent)
+ warn("lbk-f", #indent, "", "", i)
+ if not indent or
+ indent == "" then
+ return false
+ end
+ tracklists.currentindent = indent
+ return true
+ end)
+ * V"rest_of_line"
+ * V"eol",
+
+ quoted_literal_block_other = Cmt(V"adornment_char", function (s, i, indent)
+ warn("lbk-m",
+ #indent,
+ #tracklists.currentindent,
+ #indent >= #tracklists.currentindent,
+ i)
+ return #indent >= #tracklists.currentindent
+ end)
+ * V"rest_of_line"
+ * V"eol",
+
--------------------------------------------------------------------------------
-- Lists
--------------------------------------------------------------------------------