texmath 0.9.1.1 → 0.9.2
raw patch · 9 files changed
+146/−11 lines, 9 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- changelog +4/−0
- src/Text/TeXMath/Readers/TeX.hs +8/−3
- src/Text/TeXMath/Readers/TeX/Macros.hs +55/−5
- tests/readers/tex/macros.native +1/−1
- tests/src/macros.tex +11/−0
- tests/writers/macros.mml +18/−0
- tests/writers/macros.omml +44/−0
- tests/writers/macros.tex +4/−1
- texmath.cabal +1/−1
changelog view
@@ -1,3 +1,7 @@+texmath (0.9.2)++ * Support `\newenvironment` and `\renewenvironment`.+ texmath (0.9.1.1) * Added program to generate cbits/{key,val}ToASCII.c from a data file.
src/Text/TeXMath/Readers/TeX.hs view
@@ -316,13 +316,18 @@ endLine = try $ do symbol "\\\\" optional inbrackets -- can contain e.g. [1.0in] for a line height, not yet supported- optional $ ctrlseq "hline"- -- we don't represent the line, but it shouldn't crash parsing return '\n' arrayLine :: TP ArrayLine arrayLine = notFollowedBy (ctrlseq "end" >> return '\n') >>- sepBy1 (unGrouped <$> manyExp (notFollowedBy endLine >> expr)) (symbol "&")+ sepBy1 (unGrouped <$>+ manyExp (try $ ignorable' *>+ notFollowedBy endLine *>+ expr <*+ ignorable')) (symbol "&")+ where ignorable' = ignorable >>+ optional (try (ctrlseq "hline" >> ignorable'))+ -- we don't represent the line, but it shouldn't crash parsing arrayAlignments :: TP [Alignment] arrayAlignments = try $ do
src/Text/TeXMath/Readers/TeX/Macros.hs view
@@ -31,6 +31,7 @@ import Data.Char (isDigit, isLetter) import Control.Monad import Text.ParserCombinators.Parsec+import Control.Applicative ((<*)) data Macro = Macro { macroDefinition :: String , macroParser :: forall st . GenParser Char st String }@@ -60,7 +61,7 @@ -- | Parses a @\\newcommand@ or @\\renewcommand@ macro definition and -- returns a 'Macro'. pMacroDefinition :: GenParser Char st Macro-pMacroDefinition = newcommand <|> declareMathOperator+pMacroDefinition = newcommand <|> declareMathOperator <|> newenvironment -- | Skip whitespace and comments. pSkipSpaceComments :: GenParser Char st ()@@ -116,7 +117,6 @@ name <- inbraces <|> ctrlseq guard (take 1 name == "\\") let name' = drop 1 name- pSkipSpaceComments numargs <- numArgs pSkipSpaceComments optarg <- if numargs > 0@@ -147,6 +147,55 @@ Nothing -> args return $ apply args' $ "{" ++ body ++ "}" +newenvironment :: GenParser Char st Macro+newenvironment = try $ do+ char '\\'+ -- we ignore differences between these so far:+ optional (string "re")+ string "newenvironment"+ optional (char '*')+ pSkipSpaceComments+ name <- inbraces <|> ctrlseq+ numargs <- numArgs+ pSkipSpaceComments+ optarg <- if numargs > 0+ then optArg <* pSkipSpaceComments+ else return Nothing+ let numargs' = case optarg of+ Just _ -> numargs - 1+ Nothing -> numargs+ opener <- inbraces <|> ctrlseq+ pSkipSpaceComments+ closer <- inbraces <|> ctrlseq+ let defn = "\\newenvironment{" ++ name ++ "}" +++ (if numargs > 0 then ("[" ++ show numargs ++ "]") else "") +++ case optarg of { Nothing -> ""; Just x -> "[" ++ x ++ "]"} +++ "%\n{" ++ opener ++ "}%\n" ++ "{" ++ closer ++ "}"+ return $ Macro defn $ try $ do+ string "\\begin"+ pSkipSpaceComments+ char '{'+ string name+ pSkipSpaceComments+ char '}'+ opt <- case optarg of+ Nothing -> return Nothing+ Just _ -> liftM (`mplus` optarg) optArg+ args <- count numargs' (pSkipSpaceComments >>+ (inbraces <|> ctrlseq <|> count 1 anyChar))+ let args' = case opt of+ Just x -> x : args+ Nothing -> args+ let ender = try $ do+ string "\\end"+ pSkipSpaceComments+ char '{'+ string name+ char '}'+ body <- manyTill anyChar ender+ return $ apply args'+ $ opener ++ body ++ closer+ -- | Parser for \DeclareMathOperator(*) command. declareMathOperator :: GenParser Char st Macro declareMathOperator = try $ do@@ -191,7 +240,7 @@ return () numArgs :: GenParser Char st Int-numArgs = option 0 $ do+numArgs = option 0 $ try $ do pSkipSpaceComments char '[' pSkipSpaceComments@@ -217,8 +266,9 @@ inbraces :: GenParser Char st String inbraces = try $ do char '{'- res <- manyTill (skipComment >> (inbraces' <|> count 1 anyChar <|> escaped "{}"))- (try $ skipComment >> char '}')+ res <- manyTill (pSkipSpaceComments >>+ (inbraces' <|> count 1 anyChar <|> escaped "{}"))+ (try $ pSkipSpaceComments >> char '}') return $ concat res inbraces' :: GenParser Char st String
tests/readers/tex/macros.native view
@@ -1,1 +1,1 @@-[ENumber "2",ENumber "5",EGrouped [EIdentifier "y",ESymbol Bin "+",ENumber "3"],EGrouped [EIdentifier "x",ESymbol Bin "+",ENumber "3"],EGrouped [EIdentifier "x",ESymbol Bin "+",EIdentifier "\945"]]+[ENumber "2",ENumber "5",EGrouped [EIdentifier "y",ESymbol Bin "+",ENumber "3"],EGrouped [EIdentifier "x",ESymbol Bin "+",ENumber "3"],EGrouped [EIdentifier "x",ESymbol Bin "+",EIdentifier "\945"],EArray [AlignCenter,AlignCenter] [[[ENumber "2"],[ENumber "3"]],[[ENumber "4"],[ENumber "5"]]]]
tests/src/macros.tex view
@@ -12,8 +12,19 @@ \renewcommand{\phi}{\aaa} \newcommand{\b}[1]{#1} +\newenvironment{ary}+{\begin{array}{cc}+\hline}+{\hline+\end{array}}+ \phi \abc \xyz[y] {3} \xyz 3 \xyz \alpha++\begin{ary}+2 & 3\\+4 & 5+\end{ary}
tests/writers/macros.mml view
@@ -18,5 +18,23 @@ <mo>+</mo> <mi>α</mi> </mrow>+ <mtable>+ <mtr>+ <mtd columnalign="center">+ <mn>2</mn>+ </mtd>+ <mtd columnalign="center">+ <mn>3</mn>+ </mtd>+ </mtr>+ <mtr>+ <mtd columnalign="center">+ <mn>4</mn>+ </mtd>+ <mtd columnalign="center">+ <mn>5</mn>+ </mtd>+ </mtr>+ </mtable> </mrow> </math>
tests/writers/macros.omml view
@@ -37,5 +37,49 @@ <m:r> <m:t>α</m:t> </m:r>+ <m:m>+ <m:mPr>+ <m:baseJc m:val="center" />+ <m:plcHide m:val="1" />+ <m:mcs>+ <m:mc>+ <m:mcPr>+ <m:mcJc m:val="center" />+ <m:count m:val="1" />+ </m:mcPr>+ </m:mc>+ <m:mc>+ <m:mcPr>+ <m:mcJc m:val="center" />+ <m:count m:val="1" />+ </m:mcPr>+ </m:mc>+ </m:mcs>+ </m:mPr>+ <m:mr>+ <m:e>+ <m:r>+ <m:t>2</m:t>+ </m:r>+ </m:e>+ <m:e>+ <m:r>+ <m:t>3</m:t>+ </m:r>+ </m:e>+ </m:mr>+ <m:mr>+ <m:e>+ <m:r>+ <m:t>4</m:t>+ </m:r>+ </m:e>+ <m:e>+ <m:r>+ <m:t>5</m:t>+ </m:r>+ </m:e>+ </m:mr>+ </m:m> </m:oMath> </m:oMathPara>
tests/writers/macros.tex view
@@ -1,1 +1,4 @@-25{y + 3}{x + 3}{x + \alpha}+25{y + 3}{x + 3}{x + \alpha}\begin{matrix}+2 & 3 \\+4 & 5 \\+\end{matrix}
texmath.cabal view
@@ -1,5 +1,5 @@ Name: texmath-Version: 0.9.1.1+Version: 0.9.2 Cabal-Version: >= 1.10 Build-type: Simple Synopsis: Conversion between formats used to represent mathematics.