remove haskell filter
This commit is contained in:
@@ -1,6 +0,0 @@
|
||||
clear-package-db
|
||||
global-package-db
|
||||
package-db /Users/congyu/.cabal/store/ghc-9.4.8/package.db
|
||||
package-id base-4.17.2.1
|
||||
package-id pndc-typs-1.23.1-53806a08
|
||||
package-id text-2.0.2
|
||||
@@ -1,6 +0,0 @@
|
||||
clear-package-db
|
||||
global-package-db
|
||||
package-db /Users/congyu/.cabal/store/ghc-9.6.7/package.db
|
||||
package-id base-4.18.3.0
|
||||
package-id pndc-typs-1.23.1-7d4eff68
|
||||
package-id text-2.0.2
|
||||
7
.vscode/settings.json
vendored
7
.vscode/settings.json
vendored
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"haskell.toolchain": {
|
||||
"hls": "2.10.0.0",
|
||||
"ghc": "9.6.7"
|
||||
}
|
||||
"Lua.diagnostics.globals": [
|
||||
"pandoc"
|
||||
]
|
||||
}
|
||||
20
filter.hs
20
filter.hs
@@ -1,20 +0,0 @@
|
||||
#!/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
|
||||
2
input.md
2
input.md
@@ -1,7 +1,7 @@
|
||||
|
||||
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.
|
||||
|
||||
:::{include="filter.hs , filter.lua , ,"}
|
||||
:::{include="README.md , filter.lua , ,"}
|
||||
:::
|
||||
|
||||
|
||||
|
||||
5
makefile
5
makefile
@@ -1,12 +1,7 @@
|
||||
|
||||
.PHONY: filter showAST nofilter
|
||||
|
||||
nofilter:
|
||||
pandoc -fmarkdown -thtml input.md > output.html
|
||||
|
||||
hs:
|
||||
pandoc -fmarkdown -thtml input.md --filter ./filter.hs > output.html
|
||||
|
||||
lua:
|
||||
pandoc -fmarkdown -thtml input.md --lua-filter ./filter.lua > output.html
|
||||
|
||||
|
||||
29
output.html
29
output.html
@@ -6,28 +6,19 @@ 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
|
||||
<div data-include="README.md , filter.lua , ,">
|
||||
# Piecewise Readable Filter
|
||||
|
||||
file2Block :: FilePath -> IO [Block]
|
||||
file2Block f = do
|
||||
contents <- TIO.readFile f
|
||||
return [Plain [Str contents]]
|
||||
This is a pandoc filter manipulating
|
||||
[fenced_divs](https://pandoc.org/MANUAL.html#extension-fenced_divs) in
|
||||
pandoc markdown.
|
||||
|
||||
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
|
||||
Inspired by [this
|
||||
joke](https://www.zhihu.com/question/586807834/answer/2973535981).
|
||||
|
||||
useful refs:
|
||||
- https://pandoc.org/lua-filters.html
|
||||
|
||||
main :: IO ()
|
||||
main = toJSONFilter doInclude
|
||||
local function words(s)
|
||||
local res = {}
|
||||
for part in s:gmatch("[^,]+") do -- split by commas
|
||||
|
||||
Reference in New Issue
Block a user