From 09842b669cfe13b0e11fb370ee1dddcb314082db Mon Sep 17 00:00:00 2001 From: Justin Bedo Date: Fri, 4 Mar 2022 13:33:58 +1100 Subject: add verbatim block handling --- .gitignore | 1 + latexfmt.hs | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 .gitignore 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 -- cgit v1.2.3