52 lines
1.1 KiB
Lua
52 lines
1.1 KiB
Lua
|
|
|
|
|
|
-- remove any lines with the hide_line directive.
|
|
function CodeBlock(el)
|
|
if el.classes:includes('cell-code') then
|
|
el.text = filter_lines(el.text, function(line)
|
|
return not line:match("#| ?hide_line%s*$")
|
|
end)
|
|
return el
|
|
end
|
|
end
|
|
|
|
-- apply filter_stream directive to cells
|
|
function Div(el)
|
|
if el.classes:includes("cell") then
|
|
local filters = el.attributes["filter_stream"]
|
|
if filters then
|
|
-- process cell-code
|
|
return pandoc.walk_block(el, {
|
|
CodeBlock = function(el)
|
|
-- CodeBlock that isn't `cell-code` is output
|
|
if not el.classes:includes("cell-code") then
|
|
for filter in filters:gmatch("[^%s,]+") do
|
|
el.text = filter_lines(el.text, function(line)
|
|
return not line:find(filter, 1, true)
|
|
end)
|
|
end
|
|
return el
|
|
end
|
|
end
|
|
})
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
function filter_lines(text, filter)
|
|
local lines = pandoc.List()
|
|
local code = text .. "\n"
|
|
for line in code:gmatch("([^\r\n]*)[\r\n]") do
|
|
if filter(line) then
|
|
lines:insert(line)
|
|
end
|
|
end
|
|
return table.concat(lines, "\n")
|
|
end
|
|
|
|
|