texmath 0.12.8.10 → 0.12.8.11
raw patch · 6 files changed
+69/−24 lines, 6 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- changelog +6/−0
- src/Text/TeXMath/Readers/MathML.hs +10/−10
- src/Text/TeXMath/Readers/OMML.hs +11/−12
- src/Text/TeXMath/Readers/TeX.hs +11/−1
- test/regression/241.test +30/−0
- texmath.cabal +1/−1
changelog view
@@ -1,3 +1,9 @@+texmath (0.12.8.11)++ * TeX reader: Ignore `@{..}` and `!{..}` in array alignment specifiers (#241).++ * TeX reader: ignore `\color` instead of crashing (#225).+ texmath (0.12.8.10) * TeX reader: allow `\lVert .. \vVert` to create an EDelimited (#238).
src/Text/TeXMath/Readers/MathML.hs view
@@ -52,7 +52,7 @@ import Data.List (transpose) import Control.Applicative ((<|>)) import qualified Data.Text as T-import Control.Monad (filterM, guard)+import Control.Monad (filterM, mzero) import Control.Monad.Reader (ReaderT, runReaderT, asks, local) import Data.Either (rights) @@ -449,14 +449,14 @@ -- Other semantics :: Element -> MML Exp-semantics e = do- guard (not $ null cs)- first <- safeExpr (head cs)- if isEmpty first- then fromMaybe empty . getFirst . mconcat <$> mapM annotation (tail cs)- else return first- where- cs = elChildren e+semantics e =+ case elChildren e of+ [] -> mzero+ (c:cs) -> do+ first <- safeExpr c+ if isEmpty first+ then fromMaybe empty . getFirst . mconcat <$> mapM annotation cs+ else return first annotation :: Element -> MML (First Exp) annotation e = do@@ -509,7 +509,7 @@ align <- maybe a toAlignment <$> (findAttrQ "columnalign" e) case name e of "mtr" -> mapM (tableCell align) (elChildren e)- "mlabeledtr" -> mapM (tableCell align) (tail $ elChildren e)+ "mlabeledtr" -> mapM (tableCell align) (drop 1 $ elChildren e) _ -> throwError $ "Invalid Element: Only expecting mtr elements " <> err e tableCell :: Alignment -> Element -> MML (Alignment, [Exp])
src/Text/TeXMath/Readers/OMML.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE PatternGuards #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE LambdaCase #-} {- Copyright (C) 2014 Jesse Rosenthal <jrosenthal@jhu.edu>@@ -58,7 +59,9 @@ elemToOMML :: Element -> Maybe [Exp] elemToOMML element | isElem "m" "oMathPara" element = do let expList = mapMaybe elemToOMML (elChildren element)- return $ map (\l -> if length l == 1 then (head l) else EGrouped l) expList+ return $ map (\case+ [x] -> x+ xs -> EGrouped xs) expList elemToOMML element | isElem "m" "oMath" element = Just $ concat $ mapMaybe elemToExps $ unwrapWTags $ elChildren element elemToOMML _ = Nothing@@ -238,11 +241,8 @@ elemToExps' element | isElem "m" "acc" element = do let chr = filterChildName (hasElemName "m" "accPr") element >>= filterChildName (hasElemName "m" "chr") >>=- findAttrBy (hasElemName "m" "val") >>=- Just . head- chr' = case chr of- Just c -> T.singleton c- Nothing -> "\x302" -- default to wide hat.+ findAttrBy (hasElemName "m" "val")+ chr' = maybe "\x302" T.pack chr -- default to wide hat baseExp <- filterChildName (hasElemName "m" "e") element >>= elemToBase return $ [EOver False baseExp (ESymbol Accent chr')]@@ -271,18 +271,17 @@ (elChildren element) inDelimExps = map (map Right) baseExps dPr = filterChildName (hasElemName "m" "dPr") element+ headOrSpace [] = Just ' '+ headOrSpace (c:_) = Just c begChr = dPr >>= filterChildName (hasElemName "m" "begChr") >>=- findAttrBy (hasElemName "m" "val") >>=- (\c -> if null c then (Just ' ') else (Just $ head c))+ findAttrBy (hasElemName "m" "val") >>= headOrSpace sepChr = dPr >>= filterChildName (hasElemName "m" "sepChr") >>=- findAttrBy (hasElemName "m" "val") >>=- (\c -> if null c then (Just ' ') else (Just $ head c))+ findAttrBy (hasElemName "m" "val") >>= headOrSpace endChr = dPr >>= filterChildName (hasElemName "m" "endChr") >>=- findAttrBy (hasElemName "m" "val") >>=- (\c -> if null c then (Just ' ') else (Just $ head c))+ findAttrBy (hasElemName "m" "val") >>= headOrSpace beg = maybe "(" T.singleton begChr end = maybe ")" T.singleton endChr sep = maybe "|" T.singleton sepChr
src/Text/TeXMath/Readers/TeX.hs view
@@ -202,6 +202,7 @@ choice [ text c , styled c+ , colored c , root c , xspace c , mathop c@@ -452,8 +453,10 @@ arrayAlignments :: TP [Alignment] arrayAlignments = mconcat <$>- braces (many (((:[]) . letterToAlignment <$> letter)+ braces (many (+ ((:[]) . letterToAlignment <$> letter) <|> ([] <$ char '|')+ <|> ([] <$ ((char '@' <|> char '!') <* inbraces)) <|> (do char '*' num <- T.pack <$> braces (many1 digit) cols <- arrayAlignments@@ -673,6 +676,13 @@ EGrouped xs -> f xs _ -> f [x] Nothing -> mzero++colored :: Text -> TP Exp+colored "\\color" = do+ _ <- inbraces -- skip the color+ -- in the future we might add color to the types or to the styles+ texSymbol <|> inbraces <|> texChar+colored _ = mzero -- note: sqrt can be unary, \sqrt{2}, or binary, \sqrt[3]{2} root :: Text -> TP Exp
+ test/regression/241.test view
@@ -0,0 +1,30 @@+<<< tex+\begin{array}{l@{\qquad}l}+\text{Infection/colonization episode} & \text{Waning immunity episode}\\+b^{\prime}(t) = \mu_{0}b(t) - cy(t) & b(t) = 0 +\end{array}+>>> native+[ EArray+ [ AlignLeft , AlignLeft ]+ [ [ [ EText TextNormal "Infection/colonization episode" ]+ , [ EText TextNormal "Waning immunity episode" ]+ ]+ , [ [ ESuper (EIdentifier "b") (ESymbol Ord "\8242")+ , EDelimited "(" ")" [ Right (EIdentifier "t") ]+ , ESymbol Rel "="+ , ESub (EIdentifier "\956") (ENumber "0")+ , EIdentifier "b"+ , EDelimited "(" ")" [ Right (EIdentifier "t") ]+ , ESymbol Bin "\8722"+ , EIdentifier "c"+ , EIdentifier "y"+ , EDelimited "(" ")" [ Right (EIdentifier "t") ]+ ]+ , [ EIdentifier "b"+ , EDelimited "(" ")" [ Right (EIdentifier "t") ]+ , ESymbol Rel "="+ , ENumber "0"+ ]+ ]+ ]+]
texmath.cabal view
@@ -1,5 +1,5 @@ Name: texmath-Version: 0.12.8.10+Version: 0.12.8.11 Cabal-Version: >= 1.10 Build-type: Simple Synopsis: Conversion between math formats.