83 lines
2.4 KiB
HTML
83 lines
2.4 KiB
HTML
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce porta
|
|
mattis neque, quis molestie nunc faucibus vitae. Phasellus vel commodo
|
|
dolor, at faucibus arcu. Curabitur sit amet magna a neque euismod
|
|
feugiat non et diam. Aliquam sit amet libero enim. Integer dignissim
|
|
ullamcorper felis, ac ultrices turpis congue vel. Nulla id tempus orci.
|
|
Curabitur ac vulputate tellus. Integer fermentum tempor facilisis. Duis
|
|
egestas luctus tristique. Maecenas vitae arcu sit amet justo feugiat
|
|
imperdiet. Nunc luctus erat sed ligula convallis hendrerit.</p>
|
|
<div data-include="filter.hs , filter.lua , ,">
|
|
#!/usr/bin/env runhaskell
|
|
-- filter.hs
|
|
import Text.Pandoc.JSON
|
|
import qualified Data.Text.IO as TIO
|
|
import qualified Data.Text as T
|
|
|
|
file2Block :: FilePath -> IO [Block]
|
|
file2Block f = do
|
|
contents <- TIO.readFile f
|
|
return [Plain [Str contents]]
|
|
|
|
doInclude :: Block -> IO Block
|
|
doInclude cb@(Div (id, classes, namevals) contents) =
|
|
case lookup (T.pack "include") namevals of
|
|
Just f -> Div (id, classes, namevals) <$> file2Block
|
|
(T.unpack f)
|
|
Nothing -> return cb
|
|
doInclude x = return x
|
|
|
|
main :: IO ()
|
|
main = toJSONFilter doInclude
|
|
local function words(s)
|
|
local res = {}
|
|
for part in s:gmatch("[^,]+") do -- split by commas
|
|
local trimmed = part:match("^%s*(.-)%s*$") -- remove
|
|
leading/trailing spaces
|
|
if trimmed ~= "" then
|
|
table.insert(res, trimmed)
|
|
end
|
|
end
|
|
return res
|
|
end
|
|
|
|
local function label2Block(labels)
|
|
local contents = ""
|
|
for _,l in ipairs(words(labels)) do
|
|
-- use file for now.
|
|
local fh = io.open(l, "r")
|
|
if not fh then
|
|
io.stderr:write("Cannot open file: " .. l .. "\n")
|
|
return { pandoc.Plain { pandoc.Str("[Error: cannot read file
|
|
" .. l .. "]") } }
|
|
end
|
|
contents = contents .. fh:read("*a")
|
|
fh:close()
|
|
end
|
|
return { pandoc.Plain { pandoc.Str(contents) } }
|
|
end
|
|
|
|
function Div(e)
|
|
local include = e.attributes["include"]
|
|
if include then
|
|
local blocks = label2Block(include)
|
|
-- Replace the Div contents
|
|
return pandoc.Div(blocks, e.attr)
|
|
end
|
|
return nil -- no change
|
|
end
|
|
|
|
</div>
|
|
<div class="Theorem">
|
|
<p>test thm1</p>
|
|
</div>
|
|
<div id="thm2" class="Theorem">
|
|
<p>test thm2</p>
|
|
</div>
|
|
<div id="thm3" class="Theorem">
|
|
<p>test thm3</p>
|
|
</div>
|
|
<div id="special" class="sidebar">
|
|
<p>Here is a paragraph.</p>
|
|
<p>And another.</p>
|
|
</div>
|