packages feed

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 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.