texmath 0.11.1 → 0.11.1.1
raw patch · 4 files changed
+76/−56 lines, 4 filesdep ~base
Dependency ranges changed: base
Files
- changelog +8/−0
- src/Text/TeXMath/Readers/MathML.hs +23/−17
- src/Text/TeXMath/Readers/TeX.hs +44/−38
- texmath.cabal +1/−1
changelog view
@@ -1,3 +1,11 @@+texmath (0.11.1.1)++ * Fix building with ghc-8.6.1 by removing need for now missing+ MonadFail instances (Jonas Scholl).+ * TeX reader: Allow operators like `/` to be scaled (#120).+ * TeX reader: Improved efficiency of basicEnclosure.+ * TeX reader: Handle `\bmod` (#115).+ texmath (0.11.1) * OMML writer: Use m:acc for accents in OMML (#119). This fixes
src/Text/TeXMath/Readers/MathML.hs view
@@ -149,8 +149,11 @@ op :: Element -> MML (IR Exp) op e = do- Just inferredPosition <- (<|>) <$> (getFormType <$> findAttrQ "form" e)+ mInferredPosition <- (<|>) <$> (getFormType <$> findAttrQ "form" e) <*> asks position+ inferredPosition <- case mInferredPosition of+ Just inferredPosition -> pure inferredPosition+ Nothing -> throwError "Did not find an inferred position" opString <- getString e let dummy = Operator opString "" inferredPosition 0 0 0 [] let opLookup = getMathMLOperator opString inferredPosition@@ -346,7 +349,7 @@ frac :: Element -> MML Exp frac e = do- [num, denom] <- mapM safeExpr =<< (checkArgs 2 e)+ (num, denom) <- mapPairM safeExpr =<< (checkArgs2 e) rawThick <- findAttrQ "linethickness" e return $ if thicknessZero rawThick@@ -358,7 +361,7 @@ kroot :: Element -> MML Exp kroot e = do- [base, index] <- mapM safeExpr =<< (checkArgs 2 e)+ (base, index) <- mapPairM safeExpr =<< (checkArgs2 e) return $ ERoot index base phantom :: Element -> MML Exp@@ -399,7 +402,7 @@ sub :: Element -> MML [IR Exp] sub e = do- [base, subs] <- (checkArgs 2 e)+ (base, subs) <- checkArgs2 e reorderScripts base subs ESub -- Handles case with strethy elements in the base of sub/sup@@ -416,28 +419,28 @@ sup :: Element -> MML [IR Exp] sup e = do- [base, sups] <- (checkArgs 2 e)+ (base, sups) <- checkArgs2 e reorderScripts base sups ESuper subsup :: Element -> MML Exp subsup e = do- [base, subs, sups] <- (checkArgs 3 e)+ (base, subs, sups) <- checkArgs3 e ESubsup <$> safeExpr base <*> (postfixExpr subs) <*> (postfixExpr sups) under :: Element -> MML Exp under e = do- [base, below] <- (checkArgs 2 e)+ (base, below) <- checkArgs2 e EUnder False <$> safeExpr base <*> postfixExpr below over :: Element -> MML Exp over e = do- [base, above] <- (checkArgs 2 e)+ (base, above) <- checkArgs2 e EOver False <$> safeExpr base <*> postfixExpr above underover :: Element -> MML Exp underover e = do- [base, below, above] <- (checkArgs 3 e)+ (base, below, above) <- checkArgs3 e EUnderover False <$> safeExpr base <*> (postfixExpr below) <*> (postfixExpr above) @@ -551,15 +554,18 @@ onlyText (CRef s : xs) = (CData CDataText (fromMaybe s $ getUnicode s) Nothing) : onlyText xs onlyText (_:xs) = onlyText xs -checkArgs :: Int -> Element -> MML [Element]-checkArgs x e = do- let cs = elChildren e- if nargs x cs- then return cs- else (throwError ("Incorrect number of arguments for " ++ err e))+checkArgs2 :: Element -> MML (Element, Element)+checkArgs2 e = case elChildren e of+ [a, b] -> return (a, b)+ _ -> throwError ("Incorrect number of arguments for " ++ err e) -nargs :: Int -> [a] -> Bool-nargs n xs = length xs == n+checkArgs3 :: Element -> MML (Element, Element, Element)+checkArgs3 e = case elChildren e of+ [a, b, c] -> return (a, b, c)+ _ -> throwError ("Incorrect number of arguments for " ++ err e)++mapPairM :: Monad m => (a -> m b) -> (a, a) -> m (b, b)+mapPairM f (a, b) = (,) <$> (f a) <*> (f b) err :: Element -> String err e = name e ++ maybe "" (\x -> " line " ++ show x) (elLine e)
src/Text/TeXMath/Readers/TeX.hs view
@@ -62,6 +62,7 @@ , environment , unicode , ensuremath+ , scaled , enclosure , texSymbol ] <* ignorable@@ -273,11 +274,14 @@ zs -> return zs enclosure :: TP Exp-enclosure = basicEnclosure <|> scaledEnclosure <|> delimited+enclosure = basicEnclosure <|> delimited --- Expensive basicEnclosure :: TP Exp-basicEnclosure = choice (map (\(s, v) -> symbol s >> return v) enclosures)+basicEnclosure = try $ do+ possibleEncl <- lexeme (anyCtrlSeq <|> count 1 (oneOf "()[]|"))+ case M.lookup possibleEncl enclosures of+ Just x -> return x+ Nothing -> mzero fence :: String -> TP String fence cmd = do@@ -304,11 +308,11 @@ closec <- right <|> return "" return $ EDelimited openc closec contents -scaledEnclosure :: TP Exp-scaledEnclosure = do+scaled :: TP Exp+scaled = do cmd <- oneOfCommands (map fst S.scalers) case S.getScalerValue cmd of- Just r -> EScaled r <$> basicEnclosure+ Just r -> EScaled r <$> (basicEnclosure <|> operator) Nothing -> mzero endLine :: TP Char@@ -742,38 +746,39 @@ symbol :: String -> TP String symbol s = lexeme $ try $ string s -enclosures :: [(String, Exp)]-enclosures = [ ("(", ESymbol Open "(")- , (")", ESymbol Close ")")- , ("[", ESymbol Open "[")- , ("]", ESymbol Close "]")- , ("\\{", ESymbol Open "{")- , ("\\}", ESymbol Close "}")- , ("\\lbrack", ESymbol Open "[")- , ("\\lbrace", ESymbol Open "{")- , ("\\rbrack", ESymbol Close "]")- , ("\\rbrace", ESymbol Close "}")- , ("\\llbracket", ESymbol Open "\x27E6")- , ("\\rrbracket", ESymbol Close "\x27E7")- , ("\\langle", ESymbol Open "\x27E8")- , ("\\rangle", ESymbol Close "\x27E9")- , ("\\lfloor", ESymbol Open "\x230A")- , ("\\rfloor", ESymbol Close "\x230B")- , ("\\lceil", ESymbol Open "\x2308")- , ("\\rceil", ESymbol Close "\x2309")- , ("|", ESymbol Open "|")- , ("|", ESymbol Close "|")- , ("\\|", ESymbol Open "\x2225")- , ("\\|", ESymbol Close "\x2225")- , ("\\lvert", ESymbol Open "\x7C")- , ("\\rvert", ESymbol Close "\x7C")- , ("\\vert", ESymbol Close "\x7C")- , ("\\lVert", ESymbol Open "\x2225")- , ("\\rVert", ESymbol Close "\x2225")- , ("\\Vert", ESymbol Close "\x2016")- , ("\\ulcorner", ESymbol Open "\x231C")- , ("\\urcorner", ESymbol Close "\x231D")- ]+enclosures :: M.Map String Exp+enclosures = M.fromList+ [ ("(", ESymbol Open "(")+ , (")", ESymbol Close ")")+ , ("[", ESymbol Open "[")+ , ("]", ESymbol Close "]")+ , ("\\{", ESymbol Open "{")+ , ("\\}", ESymbol Close "}")+ , ("\\lbrack", ESymbol Open "[")+ , ("\\lbrace", ESymbol Open "{")+ , ("\\rbrack", ESymbol Close "]")+ , ("\\rbrace", ESymbol Close "}")+ , ("\\llbracket", ESymbol Open "\x27E6")+ , ("\\rrbracket", ESymbol Close "\x27E7")+ , ("\\langle", ESymbol Open "\x27E8")+ , ("\\rangle", ESymbol Close "\x27E9")+ , ("\\lfloor", ESymbol Open "\x230A")+ , ("\\rfloor", ESymbol Close "\x230B")+ , ("\\lceil", ESymbol Open "\x2308")+ , ("\\rceil", ESymbol Close "\x2309")+ , ("|", ESymbol Close "|")+ , ("|", ESymbol Open "|")+ , ("\\|", ESymbol Open "\x2225")+ , ("\\|", ESymbol Close "\x2225")+ , ("\\lvert", ESymbol Open "\x7C")+ , ("\\rvert", ESymbol Close "\x7C")+ , ("\\vert", ESymbol Close "\x7C")+ , ("\\lVert", ESymbol Open "\x2225")+ , ("\\rVert", ESymbol Close "\x2225")+ , ("\\Vert", ESymbol Close "\x2016")+ , ("\\ulcorner", ESymbol Open "\x231C")+ , ("\\urcorner", ESymbol Close "\x231D")+ ] operators :: M.Map String Exp operators = M.fromList [@@ -1046,6 +1051,7 @@ , ("\\max",EMathOperator "max") , ("\\min",EMathOperator "min") , ("\\mod",EMathOperator "mod")+ , ("\\bmod",EMathOperator "mod") , ("\\Pr",EMathOperator "Pr") , ("\\sec",EMathOperator "sec") , ("\\sin",EMathOperator "sin")
texmath.cabal view
@@ -1,5 +1,5 @@ Name: texmath-Version: 0.11.1+Version: 0.11.1.1 Cabal-Version: >= 1.10 Build-type: Simple Synopsis: Conversion between formats used to represent mathematics.