haskintex 0.1.0.0 → 0.1.0.1
raw patch · 2 files changed
+30/−9 lines, 2 files
Files
- Main.hs +29/−8
- haskintex.cabal +1/−1
Main.hs view
@@ -31,6 +31,7 @@ | WriteHaskell Bool Text -- False for Hidden, True for Visible | EvalHaskell Bool Text -- False for Command, True for Environment | Sequence [Syntax]+ deriving Show -- Show instance for debugging. -- Parsing @@ -42,8 +43,8 @@ _ <- string "\\begin{writehaskell}" b <- choice [ string "[hidden]" >> return False , string "[visible]" >> return True- , return v ]- h <- manyTill anyChar $ try $ string "\\end{writehaskell}"+ , return v ] -- When no option is given, take the default.+ h <- manyTill anyChar $ string "\\end{writehaskell}" return $ WriteHaskell b $ pack h p_evalhaskell :: Parser Syntax@@ -52,23 +53,43 @@ p_evalhaskellenv :: Parser Syntax p_evalhaskellenv = do _ <- string "\\begin{evalhaskell}"- h <- manyTill anyChar $ try $ string "\\end{evalhaskell}"+ h <- manyTill anyChar $ string "\\end{evalhaskell}" return $ EvalHaskell True $ pack h p_evalhaskellcomm :: Parser Syntax p_evalhaskellcomm = do- _ <- string "\\evalhaskell{"- h <- manyTill anyChar $ char '}'+ _ <- string "\\evalhaskell{"+ h <- p_haskell 0 return $ EvalHaskell False $ pack h +p_haskell :: Int -> Parser String+p_haskell n = choice [+ do _ <- char '{'+ ('{':) <$> p_haskell (n+1)+ , do _ <- char '}'+ if n == 0+ then return []+ else ('}':) <$> p_haskell (n-1)+ , do _ <- char '\"'+ liftA2 (++) (('\"':) <$> p_string) (p_haskell n)+ , liftA2 (:) anyChar (p_haskell n)+ ]++p_string :: Parser String+p_string = choice [+ liftA2 (++) (char '\\' >> char '\"' >> return "\\\"") p_string+ , liftA2 (:) (char '\"') (return [])+ , liftA2 (:) anyChar p_string+ ] + p_writelatex :: Parser Syntax p_writelatex = (WriteLaTeX . pack) <$> many1 (p_other >>= \b -> if b then anyChar else fail "stop write latex") where p_other =- choice [ string "\\begin{writehaskell}" >> return False- , string "\\begin{evalhaskell}" >> return False- , string "\\evalhaskell" >> return False+ choice [ string "\\begin{writehaskell}" >> return False -- starts p_writehaskell+ , string "\\begin{evalhaskell}" >> return False -- starts p_evalhaskellenv+ , string "\\evalhaskell" >> return False -- starts p_evalhaskellcomm , return True ]
haskintex.cabal view
@@ -1,5 +1,5 @@ name: haskintex-version: 0.1.0.0+version: 0.1.0.1 synopsis: Haskell Evaluation inside of LaTeX code. description: The /haskintex/ program is a tool that reads a LaTeX file and evaluates Haskell expressions contained