aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Bedo <cu@cua0.org>2022-03-04 13:33:58 +1100
committerJustin Bedo <cu@cua0.org>2022-03-04 13:37:35 +1100
commit09842b669cfe13b0e11fb370ee1dddcb314082db (patch)
tree639e0cd78e0f216fdd30fbdde34143763aff834e
parent0e3971393955e8dea20d49cfa4719a25f7ec0e8f (diff)
add verbatim block handling
-rw-r--r--.gitignore1
-rw-r--r--latexfmt.hs10
2 files changed, 9 insertions, 2 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b2be92b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+result
diff --git a/latexfmt.hs b/latexfmt.hs
index 86c17a3..dc26a80 100644
--- a/latexfmt.hs
+++ b/latexfmt.hs
@@ -13,12 +13,16 @@ import Prelude hiding ( print
, takeWhile
)
-data Tokens = Wrd {unwrd :: T.Text} | Cmd T.Text | BSq [Tokens] | BCr [Tokens] | NL | Cmt T.Text | Nobs | IMath T.Text | Math T.Text
+data Tokens = Wrd {unwrd :: T.Text} | Cmd T.Text | BSq [Tokens] | BCr [Tokens] | NL | Cmt T.Text | Nobs | IMath T.Text | Math T.Text | Verbatim Bool T.Text
deriving Show
isCtrl x = not $ isAlpha x || isDigit x
-- tokens to strings
+toStr (Verbatim star str) = do
+ print' "\n\\begin{verbatim*}"
+ print' str
+ print' "\\end{verbatim*}"
toStr (Wrd w) = do
if T.length w >= 1 && T.head w `elem` (".,;:!?)" :: [Char])
then print' w
@@ -66,7 +70,7 @@ toStr (IMath m) = do
-- Tokeniser
ws = inClass " \t\n"
pad = takeWhile ws
-token = nl <|> pad *> (nobs <|> math <|> cmd <|> bsq <|> bcr <|> cmt <|> wrd)
+token = nl <|> pad *> (nobs <|> verbatim <|> verbatimStar <|> math <|> cmd <|> bsq <|> bcr <|> cmt <|> wrd)
nobs = string "~" *> pure Nobs
nl = string "\n" *> takeWhile (inClass " \t") *> string "\n" *> pure NL
cmd :: Parser Tokens
@@ -80,6 +84,8 @@ oldmath = Math <$> (string "$$" *> takeWhile (/= '$')) <* string "$$"
newmath = Math . T.pack <$> (string "\\[" *> manyTill' anyChar (string "\\]"))
oldimath = IMath <$> (string "$" *> takeWhile (/= '$')) <* string "$"
newimath = IMath . T.pack <$> (string "\\(" *> manyTill' anyChar (string "\\)"))
+verbatim = Verbatim False . T.pack <$> (string "\\begin{verbatim}" *> manyTill' anyChar (string "\\end{verbatim}"))
+verbatimStar = Verbatim True . T.pack <$> (string "\\begin{verbatim*}" *> manyTill' anyChar (string "\\end{verbatim*}"))
-- indented printer
type Beginning = Bool