packages feed

texmath 0.10.1 → 0.10.1.1

raw patch · 16 files changed

+154/−10 lines, 16 files

Files

changelog view
@@ -1,3 +1,10 @@+texmath (0.10.1.1)++  * Handle multicharacter operators better in Eqn, TeX, OMML (#109).++  * OMML reader: unwrap `<w:...>` tags immediately under `<m:oMath>`+    (#111, Jesse Rosenthal).+ texmath (0.10.1)    * Expose Text.TeXMath.TeX (TeX rendering functions) (#108).
src/Text/TeXMath/Readers/OMML.hs view
@@ -58,8 +58,18 @@   let expList = mapMaybe elemToOMML (elChildren element)   return $ map (\l -> if length l == 1 then (head l) else EGrouped l) expList elemToOMML element  | isElem "m" "oMath" element =-  Just $ concat $ mapMaybe (elemToExps) (elChildren element)+  Just $ concat $ mapMaybe elemToExps $ unwrapWTags $ elChildren element elemToOMML _ = Nothing++-- oMath can contain w:hyperlink, w:sdt, etc. I can't find a complete+-- documentation of this, so we just unwrap any w:tag immediately+-- beneath oMath. Note that this shouldn't affect the "w" tags in+-- elemToOMathRunElem(s) because, those are underneath an "m:r" tag.+unwrapWTags :: [Element] -> [Element]+unwrapWTags elements = concatMap unwrapChild elements+  where unwrapChild element = case qPrefix $ elName element of+                                Just "w" -> elChildren element+                                _        -> [element]  isElem :: String -> String -> Element -> Bool isElem prefix name element =
src/Text/TeXMath/Readers/TeX.hs view
@@ -623,9 +623,14 @@ mathopWith name ty = try $ do   ctrlseq name   e <- expr1-  case e of+  let e' = case e of+               EGrouped [x] -> x+               _            -> e+  case e' of      ESymbol _ x   -> return $ ESymbol ty x      EIdentifier x -> return $ ESymbol ty x+     EText TextNormal x -> return $ ESymbol ty x+     EText sty x -> return $ EStyled sty [ESymbol ty x]      x | ty == Op  -> case expToOperatorName x of                            Just y -> return $ EMathOperator y                            _      -> return x
src/Text/TeXMath/Writers/Eqn.hs view
@@ -67,7 +67,7 @@ writeExp (ESymbol Ord [c])  -- do not render "invisible operators"   | c `elem` ['\x2061'..'\x2064'] = "" -- see 3.2.5.5 of mathml spec writeExp (EIdentifier s) = writeExp (ESymbol Ord s)-writeExp (ESymbol _ s) =+writeExp (ESymbol t s) =   case s of     "\8805" -> ">="     "\8804" -> "<="@@ -127,9 +127,22 @@     "\958" -> "xi"     "\926" -> "XI"     "\950" -> "zeta"-    _ | all isAscii s -> s-      |otherwise -> "\\[" ++ intercalate " " (map toUchar s) ++ "]"-  where toUchar c = printf "u%04x" (ord c)+    _      -> let s' = if all isAscii s+                          then s+                          else "\\[" ++ unwords (map toUchar s) ++ "]"+                  toUchar c = printf "u%04x" (ord c)+              in  if length s > 1 && (t == Rel || t == Bin || t == Op)+                     then "roman{\"" +++                          (if t == Rel || t == Bin+                              then " "+                              else "") +++                          s' +++                          (if t == Rel || t == Bin || t == Op+                              then " "+                              else "") +++                          "\"}"+                     else s'+ writeExp (ESpace d) =   case d of       _ | d > 0 && d < (2 % 9) -> "^"
src/Text/TeXMath/Writers/OMML.hs view
@@ -25,6 +25,7 @@ import Text.XML.Light import Text.TeXMath.Types import Data.Generics (everywhere, mkT)+import Data.Char (isSymbol, isPunctuation)  -- | Transforms an expression tree to an OMML XML Tree writeOMML :: DisplayType -> [Exp] -> Element@@ -191,7 +192,18 @@     EIdentifier x    -> [str props x]    EMathOperator x  -> [makeText TextNormal x]  -- TODO revisit, use props?-   ESymbol _ x      -> [str props x]+   ESymbol _ [c]+    | isSymbol c || isPunctuation c+                    -> [str props [c]]+   ESymbol ty xs+    | ty `elem` [Op, Bin, Rel]+                    -> [mnode "box"+                        [ mnode "boxPr"+                          [ mnodeA "opEmu" "1" () ]+                        , mnode "e"+                          [str props xs]+                        ]]+   ESymbol _ xs     -> [str props xs]    ESpace n      | n > 0 && n <= 0.17    -> [str props "\x2009"]      | n > 0.17 && n <= 0.23 -> [str props "\x2005"]
src/Text/TeXMath/Writers/TeX.hs view
@@ -24,6 +24,7 @@ import Text.TeXMath.Unicode.ToTeX (getTeXMath) import Text.TeXMath.Unicode.ToUnicode (fromUnicode) import qualified Text.TeXMath.Shared as S+import Data.Char (toLower) import Data.Generics (everywhere, mkT) import Control.Applicative ((<$>), Applicative) import Control.Monad (when, unless, foldM_)@@ -155,8 +156,12 @@ writeExp (ESymbol Ord [c])  -- do not render "invisible operators"   | c `elem` ['\x2061'..'\x2064'] = return () -- see 3.2.5.5 of mathml spec writeExp (ESymbol t s) = do+  s' <- getTeXMathM s   when (t == Bin || t == Rel) $ tell [Space]-  tell =<< getTeXMathM s+  if length s > 1 && (t == Bin || t == Rel || t == Op)+     then tell [ControlSeq ("\\math" ++ map toLower (show t)),+                 Grouped [ControlSeq "\\text", Grouped s']]+     else tell s'   when (t == Bin || t == Rel) $ tell [Space] writeExp (ESpace width) = do   env <- asks mathEnv
+ tests/readers/omml/issue112.native view
@@ -0,0 +1,1 @@+[ESub (EIdentifier "A") (ENumber "2")]
+ tests/readers/tex/issue109.native view
@@ -0,0 +1,1 @@+[EIdentifier "a",ESymbol Rel ">",EIdentifier "b",ESymbol Rel "or",EIdentifier "a",ESymbol Rel ">",EIdentifier "c"]
+ tests/src/issue109.tex view
@@ -0,0 +1,1 @@+a > b \mathrel{\text{or}} a > c
+ tests/src/issue112.omml view
@@ -0,0 +1,39 @@+<?xml version="1.0" encoding="UTF-8"?>+<m:oMath>+  <w:hyperlink r:id="rId6" w:history="1">+    <m:sSub>+      <m:sSubPr>+        <m:ctrlPr>+          <w:rPr>+            <w:rStyle w:val="aa"/>+            <w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/>+            <w:sz w:val="24"/>+            <w:szCs w:val="24"/>+          </w:rPr>+        </m:ctrlPr>+      </m:sSubPr>+      <m:e>+        <m:r>+          <w:rPr>+            <w:rStyle w:val="aa"/>+            <w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/>+            <w:sz w:val="24"/>+            <w:szCs w:val="24"/>+          </w:rPr>+          <m:t>A</m:t>+        </m:r>+      </m:e>+      <m:sub>+        <m:r>+          <w:rPr>+            <w:rStyle w:val="aa"/>+            <w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/>+            <w:sz w:val="24"/>+            <w:szCs w:val="24"/>+          </w:rPr>+          <m:t>2</m:t>+        </m:r>+      </m:sub>+    </m:sSub>+  </w:hyperlink>+</m:oMath>
tests/test-texmath.hs view
@@ -45,7 +45,7 @@ main = do   args <- getArgs   let roundTrip = "--round-trip" `elem` args-  let regen = "--regenerate-tests" `elem` args+  let regen = "--regenerate-tests" `elem` args || "--accept" `elem` args   setLocaleEncoding utf8   setCurrentDirectory "tests"   statuses <- if roundTrip
+ tests/writers/issue109.eqn view
@@ -0,0 +1,1 @@+a > b roman{" or "} a > c
+ tests/writers/issue109.mml view
@@ -0,0 +1,12 @@+<?xml version='1.0' ?>+<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">+  <mrow>+    <mi>a</mi>+    <mo>&gt;</mo>+    <mi>b</mi>+    <mo>or</mo>+    <mi>a</mi>+    <mo>&gt;</mo>+    <mi>c</mi>+  </mrow>+</math>
+ tests/writers/issue109.omml view
@@ -0,0 +1,36 @@+<?xml version='1.0' ?>+<m:oMathPara>+  <m:oMathParaPr>+    <m:jc m:val="center" />+  </m:oMathParaPr>+  <m:oMath>+    <m:r>+      <m:t>a</m:t>+    </m:r>+    <m:r>+      <m:t>&gt;</m:t>+    </m:r>+    <m:r>+      <m:t>b</m:t>+    </m:r>+    <m:box>+      <m:boxPr>+        <m:opEmu m:val="1" />+      </m:boxPr>+      <m:e>+        <m:r>+          <m:t>or</m:t>+        </m:r>+      </m:e>+    </m:box>+    <m:r>+      <m:t>a</m:t>+    </m:r>+    <m:r>+      <m:t>&gt;</m:t>+    </m:r>+    <m:r>+      <m:t>c</m:t>+    </m:r>+  </m:oMath>+</m:oMathPara>
+ tests/writers/issue109.tex view
@@ -0,0 +1,1 @@+a > b \mathrel{\text{or}} a > c
texmath.cabal view
@@ -1,5 +1,5 @@ Name:                texmath-Version:             0.10.1+Version:             0.10.1.1 Cabal-Version:       >= 1.10 Build-type:          Simple Synopsis:            Conversion between formats used to represent mathematics.