mirror of
https://github.com/greg7mdp/parallel-hashmap.git
synced 2026-08-29 08:34:39 +08:00
rename again!
This commit is contained in:
Vendored
+65
@@ -0,0 +1,65 @@
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
import Text.Read
|
||||
import Control.Monad.State
|
||||
import Control.Monad
|
||||
import Text.Pandoc
|
||||
import Data.Monoid
|
||||
import Control.Applicative
|
||||
|
||||
import Text.Pandoc.JSON
|
||||
import Text.Pandoc.Walk
|
||||
|
||||
slice :: Int -> Int -> [a] -> [a]
|
||||
slice from to xs = take (to - from + 1) (drop from xs)
|
||||
|
||||
doSlice :: Block -> IO Block
|
||||
doSlice cb@(CodeBlock (id, classes, namevals) contents) = do
|
||||
res <- return $ do
|
||||
upper <- readMaybe =<< lookup "upper" namevals
|
||||
lower <- readMaybe =<< lookup "lower" namevals
|
||||
file <- lookup "slice" namevals
|
||||
return (upper, lower, file)
|
||||
|
||||
case res of
|
||||
Nothing -> return cb
|
||||
Just (upper, lower, f) -> do
|
||||
contents <- readFile f
|
||||
let lns = unlines $ slice lower upper (lines contents)
|
||||
return (CodeBlock (id, classes, namevals) lns)
|
||||
doSlice x = return x
|
||||
|
||||
doInclude :: Block -> IO Block
|
||||
doInclude cb@(CodeBlock (id, classes, namevals) contents) =
|
||||
case lookup "include" namevals of
|
||||
Just f -> return . (CodeBlock (id, classes, namevals)) =<< readFile f
|
||||
Nothing -> return cb
|
||||
doInclude x = return x
|
||||
|
||||
doHtml :: Block -> IO Block
|
||||
doHtml cb@(CodeBlock (id, classes, namevals) contents) =
|
||||
case lookup "literal" namevals of
|
||||
Just f -> return . (RawBlock "html") =<< readFile f
|
||||
Nothing -> return cb
|
||||
doHtml x = return x
|
||||
|
||||
injectLatexMacros :: Maybe Format -> Pandoc -> IO Pandoc
|
||||
injectLatexMacros (Just fmt) p = do
|
||||
macros <- readFile "latex_macros"
|
||||
let block =
|
||||
case fmt of
|
||||
Format "html" ->
|
||||
Div ("",[],[("style","display:none")]) . (:[])
|
||||
. Para . (:[]) . Math DisplayMath $ macros
|
||||
Format "latex" -> RawBlock "latex" macros
|
||||
Format "epub" -> RawBlock "latex" macros
|
||||
_ -> RawBlock "latex" macros
|
||||
return (Pandoc nullMeta [block] <> p)
|
||||
injectLatexMacros _ _ = return mempty
|
||||
|
||||
main :: IO ()
|
||||
main = toJSONFilter
|
||||
((\fmt -> injectLatexMacros fmt
|
||||
>=> walkM doInclude
|
||||
>=> walkM doSlice
|
||||
>=> walkM doHtml) :: Maybe Format -> Pandoc -> IO Pandoc)
|
||||
Reference in New Issue
Block a user