packages feed

texmath 0.12.10.3 → 0.13.2

raw patch · 245 files changed

Files

README.md view
@@ -6,14 +6,14 @@ texmath is a Haskell library for converting between formats used to represent mathematics.  Currently it provides functions to read and write TeX math, presentation MathML, and OMML (Office Math Markup-Language, used in Microsoft Office), and to write Gnu eqn, typst, and-[pandoc]'s native format (allowing conversion, using pandoc, to-a variety of different markup formats).  The TeX reader and-writer supports basic LaTeX and AMS extensions, and it can parse-and apply LaTeX macros.  The package also includes several-utility modules which may be useful for anyone looking to-manipulate either TeX math or MathML.  For example, a copy of-the MathML operator dictionary is included.+Language, used in Microsoft Office), and to write Gnu eqn, typst,+StarMath (used by LibreOffice), and [pandoc]'s native format+(allowing conversion, using pandoc, to a variety of different+markup formats). The TeX reader and writer supports basic LaTeX+and AMS extensions, and it can parse and apply LaTeX macros. The+package also includes several utility modules which may be useful+for anyone looking to manipulate either TeX math or MathML. For+example, a copy of the MathML operator dictionary is included.  [pandoc]: http://github.com/jgm/pandoc @@ -26,14 +26,6 @@  By default, the executable will be installed in `~/.cabal/bin`. -Alternatively, texmath can be installed using-[stack](https://github.com/commercialhaskell/stack).  Install-the stack binary somewhere in your path.  Then, in the texmath-repository,--    stack setup-    stack install --flag texmath:executable- The `texmath` binary will be put in `~/.local/bin`.  Macro definitions may be included before a LaTeX formula.@@ -46,7 +38,7 @@ But it is also possible to compile a full webserver with a JSON API.  To do this, set the `server` cabal flag, e.g. -    stack install --flag texmath:server+    cabal install -fserver  To run the server on port 3000: @@ -145,7 +137,7 @@  # The test suite -To run the test suite, do `cabal test` or `stack test`.+To run the test suite, do `cabal test`.  In its standard mode, the test suite will run golden tests of the individual readers and writers.  Reader tests can be found@@ -160,12 +152,12 @@ If many tests fail as a result of changes, but the test failures are all because of improvements in the output, you can pass `--accept` to the test suite (e.g., with-`--test-arguments=--accept` on `stack test`), and the existing+`--test-option=--accept` on `cabal test`), and the existing golden files will be overwritten.  If you do this, inspect the outputs very carefully to make sure they are correct.  If you pass the `--roundtrip` option into the test suite-(e.g., using `--test-arguments=--roundtrip` with `stack test`),+(e.g., using `--test-option=--roundtrip` with `cabal test`), round-trip tests will be run instead.  Many of these will fail. In these tests, the native inputs in `test/roundtrip/*.native` will be converted to (respectively) `mml`, `omml`, or `tex`,
changelog.md view
@@ -1,3 +1,81 @@+texmath (0.13.2)++  * Require typst-symbols 0.3++  * Add starmath as output format (#289, John Pye).+    [API change] New Text.TeXMath.Writers.StarMath module, exporting+    `writeStarMath`. The function is also exported by Text.TeXMath.+    Starmath is the format used by LibreOffice. Although LibreOffice+    supports equations in MathML, it converts these to starmath (often+    badly), and the starmath version is the user-editable one. The+    starmath writer is provided in order to better support math in ODT+    generated by pandoc. An extensive review (see the tools+    subdirectory for the scripts that produce it) shows that this+    writer's starmath produces better results in LibreOffice than the+    mathml writer.++texmath (0.13.1.2)++  * Typst writer: Avoid using deprecated symbols (#287).+    This requires depending on typst-symbols 0.2.*.++texmath (0.13.1.1)++  * Typst writer: don't add extra spaces around `|` or escaped+    symbols (#286).++texmath (0.13.1)++  * MathML writer: Keep mathvariant attribute in addition to finding+    unicode substitutes (#280). Previously, renderers didn't support+    mathvariant consistently, so we omitted this attribute. Tested in+    Safari, Firefox, and Chrome.++  * OMML writer: properly handle bold/italics on identifiers (#280).+    Identifiers marked as bold need to be marked as bold-italic.+    Special exception for uppercase Greek.++  * MathML writer: fix handling of italic (#280).++  * OMML reader: handle w:ins elements in math (#278).+    Previously we skipped these, which meant that content+    would disappear.++  * TeX reader: handle space commands in `\text{..}` (#277).++  * TeX reader: Allow text operators to take an unbracketed argument (#276).++texmath (0.13.0.2)++  * Escape ; in typst output (#275).++  * Update tests for latest typst symbols.++  * Require typst-symbols 0.1.9.1.++texmath (0.13.0.1)++  * TeX reader: fix parsing of primes (#273).+    We previously misparsed `a_i'` as `a_{i'}` rather than `{a_i}'`.++  * Typst writer: fix position of primes with ESubSup.+    In typst, unlike tex, the primes must come after the base.++texmath (0.13)++  * Add cancellation of terms for most formats. (#271, #251, #269).+    This adds support for LaTeX `\cancel`, `\bcancel`, `\xcancel`,+    and their equivalents in OMML, MathML, and Typst.++    [API change]: add StrokeType and ECancel constructor on Exp.++  * MathML writer: add `mathvariant="normal"` on math operators,+    unless a different style is specifically called for (#270).++  * Don't escape `*` in typst math output (#268).++  * TeX writer: Use `\underbracket` instead of `\underset` U+23B5 (#267).+ texmath (0.12.10.3)    * MathML writer: fix rendering of EScaled (#264, Ewan Davies).
extra/texmath.hs view
@@ -62,6 +62,7 @@   , ("omml",  XMLWriter writeOMML)   , ("xhtml",   XMLWriter (\dt e -> inHtml (writeMathML dt e)))   , ("mathml",   XMLWriter writeMathML)+  , ("starmath", StringWriter writeStarMath)   , ("pandoc", PandocWriter writePandoc)]  data Options = Options {
man/texmath.1.md view
@@ -33,8 +33,8 @@     Defaults to `tex`.  `-t` *FORMAT*-:   Specify output ("to") format:  `tex`, `omml`,-    `xhtml`, `mathml`, `pandoc`, `native`.  Defaults to `mathml`.+:   Specify output ("to") format:  `tex`, `omml`, `xhtml`, `mathml`,+    `typst`, `eqn`, `starmath`, `pandoc`, `native`.  Defaults to `mathml`.  `--inline` :   Use the inline display style.
server/Main.hs view
@@ -35,7 +35,7 @@   } deriving (Show)  data Format =-  TeX | MathML | Eqn | OMML | Typst+  TeX | MathML | Eqn | OMML | Typst | StarMath   deriving (Show, Ord, Eq)  instance FromJSON Format where@@ -46,6 +46,7 @@                  "eqn" -> pure Eqn                  "typst" -> pure Typst                  "omml" -> pure OMML+                 "starmath" -> pure StarMath                  _ -> fail $ "Unknown format " <> T.unpack s    parseJSON _ = fail "Expecting string format" @@ -60,6 +61,7 @@                  "eqn" -> pure Eqn                  "typst" -> pure Typst                  "omml" -> pure OMML+                 "starmath" -> pure StarMath                  _ -> Left $ "Unknown format " <> t  -- Automatically derive code to convert to/from JSON.@@ -132,12 +134,14 @@                      MathML -> readMathML                      Eqn -> \_ -> Left "eqn reader not implemented"                      Typst -> \_ -> Left "typst reader not implemented"+                     StarMath -> \_ -> Left "StarMath reader not implemented"           writer = case to params of                      Eqn -> writeEqn dt                      Typst -> writeTypst dt                      OMML -> T.pack . ppElement . writeOMML dt                      TeX -> writeTeX                      MathML -> T.pack . ppElement . writeMathML dt+                     StarMath -> writeStarMath dt       in  handleErr $ writer <$> reader txt    handleErr (Right t) = return t
src/Text/TeXMath.hs view
@@ -62,6 +62,7 @@                       writeTeXWith,                       addLaTeXEnvironment,                       writeEqn,+                      writeStarMath,                       writeTypst,                       writeOMML,                       writeMathML,@@ -78,5 +79,6 @@ import Text.TeXMath.Writers.Pandoc import Text.TeXMath.Writers.TeX import Text.TeXMath.Writers.Eqn+import Text.TeXMath.Writers.StarMath import Text.TeXMath.Writers.Typst import Text.TeXMath.Types
src/Text/TeXMath/Readers/MathML.hs view
@@ -392,6 +392,9 @@   mbNotation <- findAttrQ "notation" e   case mbNotation of        Just "box" -> EBoxed <$> row e+       Just "updiagonalstrike" -> ECancel ForwardSlash <$> row e+       Just "downdiagonalstrike" -> ECancel BackSlash <$> row e+       Just "updiagonalstrike downdiagonalstrike" -> ECancel XSlash <$> row e        _ -> row e  action :: Element -> MML Exp
src/Text/TeXMath/Readers/OMML.hs view
@@ -95,6 +95,7 @@ data OMathRunElem = TextRun T.Text                   | LnBrk                   | Tab+                  | Inserted [OMathRunElem]                     deriving Show  data OMathRunTextStyle = NoStyle@@ -165,6 +166,7 @@   | isElem "w" "br" element = Just LnBrk   | isElem "w" "tab" element = Just Tab   | isElem "w" "sym" element = Just $ TextRun $ getSymChar element+  | isElem "w" "ins" element = Just $ Inserted $ mapMaybe elemToOMathRunElem (elChildren element)   | otherwise = Nothing  elemToOMathRunElems :: Element -> Maybe [OMathRunElem]@@ -180,6 +182,7 @@ oMathRunElemToText (TextRun s) = s oMathRunElemToText (LnBrk) = "\n" oMathRunElemToText (Tab) = "\t"+oMathRunElemToText (Inserted es) = mconcat $ map oMathRunElemToText es  oMathRunElemsToText :: [OMathRunElem] -> T.Text oMathRunElemsToText = T.concat . map oMathRunElemToText@@ -278,7 +281,18 @@ elemToExps' element | isElem "m" "borderBox" element = do   baseExp <- filterChildName (hasElemName "m" "e") element >>=              elemToBase-  return [EBoxed baseExp]+  let bbPr = filterChildName (hasElemName "m" "borderBoxPr") element+      bltr = bbPr >>= filterChildName (hasElemName "m" "strikeBLTR") >>=+                      findAttrBy (hasElemName "m" "val")+      tlbr = bbPr >>= filterChildName (hasElemName "m" "strikeTLBR") >>=+                      findAttrBy (hasElemName "m" "val")+  return $+    case (bltr, tlbr) of+      (Just "1", Just "1") -> [ECancel XSlash baseExp]+      (Just "1", _)        -> [ECancel ForwardSlash baseExp]+      (_, Just "1")        -> [ECancel BackSlash baseExp]+      _                    -> [EBoxed baseExp]+ elemToExps' element | isElem "m" "d" element =   let baseExps  = mapMaybe                   elemToBases
src/Text/TeXMath/Readers/TeX.hs view
@@ -52,28 +52,22 @@  -- The parser -expr1 :: TP Exp-expr1 = do-  e <- expr2-  -- check for primes and add them as a subscript-  -- in TeX ' is shorthand for ^{\prime}-  primes <- many (char '\'')-  let getPrimes cs = case cs of-                       "" -> ""-                       "'" -> "\x2032"-                       "''" -> "\x2033"-                       "'''" -> "\x2034"-                       "''''" -> "\x2057"-                       _ -> "\x2057" ++ getPrimes (drop 4 cs)-  ignorable-  case getPrimes primes of-    "" -> return e-    cs -> return $ case e of-                     ESub b sub -> ESubsup b sub (ESymbol Pun (T.pack cs))-                     _ -> ESuper e (ESymbol Pun (T.pack cs))+primes :: TP Exp+primes = do+  ESymbol Pun . getPrimes <$> (many1 (char '\'') <* ignorable) -expr2 :: TP Exp-expr2 = choice+getPrimes :: [Char] -> Text+getPrimes cs =+  case cs of+    "" -> ""+    "'" -> "\x2032"+    "''" -> "\x2033"+    "'''" -> "\x2034"+    "''''" -> "\x2057"+    _ -> "\x2057" <> getPrimes (drop 4 cs)++expr1 :: TP Exp+expr1 = choice           [ inbraces           , variable           , number@@ -229,6 +223,7 @@     , mathop c     , phantom c     , boxed c+    , cancel c     , binary c     , genfrac c     , substack c@@ -254,7 +249,7 @@     ctrlseq "operatorname"     -- these are slightly different but we won't worry about that here...     convertible <- (char '*' >> spaces >> return True) <|> return False-    tok' <- texSymbol <|> braces (manyExp expr2) <|> texChar+    tok' <- texSymbol <|> braces (manyExp expr1) <|> texChar     tok'' <- (EMathOperator <$> (expToOperatorName tok'))            <|> return (EStyled TextNormal [tok'])     return (tok'', convertible)@@ -612,8 +607,8 @@  subSup :: Maybe Bool -> Bool -> Exp -> TP Exp subSup limits convertible a = try $ do-  let sub1 = symbol "_" >> expr1-  let sup1 = symbol "^" >> expr1+  let sub1 = symbol "_" >> expr1  -- see #273+  let sup1 = (symbol "^" >> expr1) <|> primes   (b,c) <- try (do {m <- sub1; n <- sup1; return (m,n)})        <|> (do {n <- sup1; m <- sub1; return (m,n)})   return $ case limits of@@ -624,9 +619,8 @@  superOrSubscripted :: Maybe Bool -> Bool -> Exp -> TP Exp superOrSubscripted limits convertible a = try $ do-  c <- oneOf "^_"-  spaces-  b <- expr+  (c,b) <- ((,) <$> oneOf "^_" <*> (spaces >> expr))+          <|> (('^',) <$> primes)   case c of        '^' -> return $ case limits of                         Just True  -> EOver False a b@@ -660,14 +654,43 @@ boxed "\\boxed" = EBoxed <$> texToken boxed _ = mzero +cancel :: Text -> TP Exp+cancel c = do+  case c of+    "\\cancel"  -> ECancel ForwardSlash <$> texToken+    "\\bcancel" -> ECancel BackSlash <$> texToken+    "\\xcancel" -> ECancel XSlash <$> texToken+    _           -> mzero++textContents :: (Text -> Exp) -> TP [Exp]+textContents op = char '{' *> manyTill chunk (char '}')+ where+   chunk = (op . T.concat <$> many1 textual)+            <|> textSpaceCommand+            <|> (char '{' *> (asGroup <$> manyTill chunk (char '}')))+            <|> innermath++textSpaceCommand :: TP Exp+textSpaceCommand = try $ do+  char '\\'+  choice+   [ ESpace (2 % 9) <$ char ' '+   , ESpace ((-1) % 6) <$ char '!'+   , ESpace (1 % 6) <$ char ','+   , ESpace (2 % 9) <$ char ':'+   , ESpace (5 % 18) <$ char ';'+   , ESpace (2 % 9) <$ char '>'+   ]+ text :: Text -> TP Exp text c = do   op <- maybe mzero return $ M.lookup c textOps-  char '{'-  let chunk = ((op . T.concat) <$> many1 textual)-            <|> (char '{' *> (asGroup <$> manyTill chunk (char '}')))-            <|> innermath-  contents <- manyTill chunk (char '}')+  contents <- textContents op  -- braced+           <|> ((:[]) <$>      -- nonbraced token+                (  (op <$> textCommand)+               <|> textSpaceCommand+               <|> (op . T.singleton <$> noneOf "\n\t\r \\{}")+                ))   spaces   case contents of        []   -> return (op "")
src/Text/TeXMath/Shared.hs view
@@ -110,7 +110,6 @@ getDiacriticalCommand  :: Position -> T.Text -> Maybe T.Text getDiacriticalCommand pos symbol = do   command <- M.lookup symbol diaMap-  guard (not $ command `elem` unavailable)   let below = command `elem` under   case pos of     Under -> if below then Just command else Nothing@@ -288,11 +287,6 @@ -- Accents which go under the character under :: [T.Text] under = ["\\underbrace", "\\underline", "\\underbar", "\\underbracket"]---- We want to parse these but we can't represent them in LaTeX-unavailable :: [T.Text]-unavailable = ["\\overbracket", "\\underbracket"]-  -- | Mapping between unicode combining character and LaTeX accent command diacriticals :: [(T.Text, T.Text)]
src/Text/TeXMath/Types.hs view
@@ -24,8 +24,8 @@                            FractionType(..), TextType(..),                            Alignment(..), DisplayType(..),                            Operator(..), FormType(..), Record(..),-                           Property, Position(..), Env, defaultEnv,-                           InEDelimited)+                           Property, Position(..), StrokeType(..),+                           Env, defaultEnv, InEDelimited) where  import Data.Generics@@ -44,6 +44,9 @@                   | NoLineFrac   -- ^ No line between top and bottom                   deriving (Show, Read, Eq, Ord, Data, Typeable) +data StrokeType = ForwardSlash | BackSlash | XSlash+                  deriving (Show, Read, Eq, Ord, Data, Typeable)+ type ArrayLine = [[Exp]]  data Exp =@@ -79,6 +82,7 @@                        -- something under it.   | EPhantom Exp  -- ^ A "phantom" operator that takes space but doesn't display.   | EBoxed Exp    -- ^ A boxed expression.+  | ECancel StrokeType Exp -- ^ A cancelled expression.   | EFraction FractionType Exp Exp  -- ^ A fraction.  First argument is                        -- numerator, second denominator.   | ERoot Exp Exp  -- ^ An nth root.  First argument is index, second is base.
src/Text/TeXMath/Writers/Eqn.hs view
@@ -187,6 +187,7 @@ writeExp (ERoot i e) = "\"\" sup " <> writeExp' i <> " sqrt " <> writeExp' e writeExp (EPhantom e) = "hphantom " <> writeExp' e writeExp (EBoxed e) = writeExp e -- TODO: any way to do this?+writeExp (ECancel _ e) = writeExp e -- TODO  writeExp (EScaled _size e) = writeExp e -- TODO: any way? writeExp (EText ttype s) =   let quoted = "\"" <> s <> "\""
src/Text/TeXMath/Writers/MathML.hs view
@@ -26,8 +26,8 @@  import Text.XML.Light import Text.TeXMath.Types-import Text.TeXMath.Unicode.ToUnicode import Data.Generics (everywhere, mkT)+import Text.TeXMath.Unicode.ToUnicode (toUnicode) import Text.TeXMath.Shared (getMMLType, handleDownup,                             isUppercaseGreek, isRLSequence) import Text.TeXMath.Readers.MathML.MMLDict (getMathMLOperator)@@ -80,7 +80,7 @@ fromForm FPrefix  = "prefix"  makeScaled :: Rational -> Element -> Element-makeScaled x = withAttribute "minsize" p . withAttribute "maxsize" p +makeScaled x = withAttribute "minsize" p . withAttribute "maxsize" p                . setAttribute "stretchy" "true"   where p = T.pack $ printf "%d%%" (round (100*x) :: Int) @@ -94,7 +94,6 @@       Just (_, '.') -> T.snoc x '0'       _ -> x --- Note: Converts strings to unicode directly, as few renderers support those mathvariants. makeText :: TextType -> T.Text -> Element makeText a s = case (leadingSp, trailingSp) of                    (False, False) -> s'@@ -102,14 +101,15 @@                    (False, True)  -> mrow [s', sp]                    (True,  True)  -> mrow [sp, s', sp]   where sp = spaceWidth (1/3)-        s' = withAttribute "mathvariant" attr $ tunode "mtext" $ toUnicode a s+        s' = withAttribute "mathvariant" (getMMLType a) $+               -- use Unicode characters as few browsers support the mathvariants+               tunode "mtext" $ toUnicode a s         trailingSp = case T.unsnoc s of           Just (_, c) -> T.any (== c) " \t"           _           -> False         leadingSp  = case T.uncons s of           Just (c, _) -> T.any (== c) " \t"           _           -> False-        attr = getMMLType a  makeArray :: Maybe TextType -> [Alignment] -> [ArrayLine] -> Element makeArray tt as ls = unode "mtable" $@@ -144,11 +144,11 @@     newAttr = Attr (unqual a) (T.unpack v)     update [] = [newAttr]     update (x:xs)-        | qName (attrKey x) == a = +        | qName (attrKey x) == a =             newAttr : xs-        | otherwise = +        | otherwise =             x : update xs-            + accent :: T.Text -> Element accent = add_attr (Attr (unqual "accent") "true") .            tunode "mo"@@ -187,10 +187,7 @@  showExp :: Maybe TextType -> Exp -> Element showExp tt e =- let toUnicodeMaybe :: TextType -> T.Text -> Maybe T.Text-     toUnicodeMaybe textStyle t =-       T.pack <$> mapM (toUnicodeChar . (textStyle,)) (T.unpack t)-     -- variant node: tries to convert text to appropriate unicode+ let -- variant node: tries to convert text to appropriate unicode      -- characters depending on style      vnode :: String -> T.Text -> Element      vnode elname t@@ -201,12 +198,17 @@                 else tunode elname t            Just TextNormal -> withAttribute "mathvariant" "normal" $                                 tunode elname t-           Just textStyle ->-             case toUnicodeMaybe textStyle t of-               -- if we can't find unicode equivalents, rely on mathvariant:-               Nothing -> withAttribute "mathvariant" (getMMLType textStyle) $-                             tunode elname t-               Just t' -> tunode elname t'+           Just TextBold+             | elname == "mi" && not (isUppercaseGreek t) -- #255, #280+               -> withAttribute "mathvariant" "bold-italic" $+                     tunode elname (toUnicode TextBoldItalic t)+             | otherwise+               -> withAttribute "mathvariant" "bold" $+                     tunode elname (toUnicode TextBold t)+           Just textStyle -> withAttribute "mathvariant" (getMMLType textStyle) $+                              -- we use unicode chars because browsers don't+                              -- completely support mathvariant:+                              tunode elname (toUnicode textStyle t)   in case e of    ENumber x        -> vnode "mn" x    EGrouped [x]     -> showExp tt x@@ -217,7 +219,10 @@      [ makeStretchy FPostfix (vnode "mo" end)         | not (T.null end) ]    EIdentifier x    -> vnode "mi" x-   EMathOperator x  -> vnode "mi" x -- see #257+   EMathOperator x  -> -- see #257, #270+     case tt of+       Nothing -> withAttribute "mathvariant" "normal" $ tunode "mi" x+       _ -> vnode "mi" x    ESymbol Open x   -> makeFence FPrefix $ vnode "mo" x    ESymbol Close x  -> makeFence FPostfix $ vnode "mo" x    ESymbol Ord x@@ -238,6 +243,12 @@    EPhantom x       -> unode "mphantom" $ showExps tt [x]    EBoxed x         -> withAttribute "notation" "box" .                        unode "menclose" $ showExp tt x+   ECancel ForwardSlash x -> withAttribute "notation" "updiagonalstrike" .+                             unode "menclose" $ showExp tt x+   ECancel BackSlash x    -> withAttribute "notation" "downdiagonalstrike" .+                             unode "menclose" $ showExp tt x+   ECancel XSlash x       -> withAttribute "notation" "updiagonalstrike downdiagonalstrike" .+                             unode "menclose" $ showExp tt x    ESqrt x          -> unode "msqrt" $ showExp tt x    ERoot i x        -> unode "mroot" [showExp tt x, showExp tt i]    EScaled s x      -> makeScaled s $ showExp tt x
src/Text/TeXMath/Writers/OMML.hs view
@@ -233,6 +233,10 @@    EIdentifier x      | isUppercaseGreek x      , null props -> [str [mnodeA "sty" "p" ()] x]+     | not (isUppercaseGreek x)+     , [Element{ elName = QName "sty" _ _+              , elAttribs = [Attr (QName "val" Nothing (Just "m")) "b"] }] <- props+      -> [str [mnodeA "sty" "bi" ()] x] -- #280      | otherwise  -> [str props x]    EMathOperator x  -> [str (mnodeA "sty" "p" () : props) x]    ESymbol ty xs@@ -300,6 +304,7 @@                                             [ mnodeA "show" "off" () ]                                           , mnode "e" $ showExp props x]]    EBoxed   x       -> [mnode "borderBox" [ mnode "e" $ showExp props x]]+   ECancel st x     -> [makeCancel props st x]    EScaled _ x      -> showExp props x -- no support for scaler?    EArray as ls     -> [makeArray props as ls]    EText a s        -> [makeText a s]@@ -342,3 +347,16 @@                , mnode "sup" $ showExp props z                , mnode "e" $ showExp props w ] +makeCancel :: [Element] -> StrokeType -> Exp -> Element+makeCancel props st x = do+  let sn = case st of+             ForwardSlash -> [ mnodeA "strikeBLTR" "1" () ]+             BackSlash    -> [ mnodeA "strikeTLBR" "1" () ]+             XSlash       -> [ mnodeA "strikeBLTR" "1" () +                             , mnodeA "strikeTLBR" "1" () ]+  mnode "borderBox" [ mnode "borderBoxPr" $ +                      [ mnodeA "hideTop" "1" ()+                      , mnodeA "hideBot" "1" ()+                      , mnodeA "hideLeft" "1" ()+                      , mnodeA "hideRight" "1" () ] ++ sn+                    , mnode "e" $ showExp props x ]
src/Text/TeXMath/Writers/Pandoc.hs view
@@ -156,4 +156,5 @@ expToInlines _ (EUnderover _ _ _ _) = Nothing expToInlines _ (EPhantom _) = Nothing expToInlines _ (EBoxed _) = Nothing+expToInlines _ (ECancel _ _) = Nothing expToInlines _ (EArray _ _) = Nothing
+ src/Text/TeXMath/Writers/StarMath.hs view
@@ -0,0 +1,1598 @@+{-# LANGUAGE OverloadedStrings #-}+module Text.TeXMath.Writers.StarMath+  ( writeStarMath+  ) where++import Data.Char (isLetter)+import Data.Generics (everywhere, mkT)+import qualified Data.List as List+import qualified Data.Text as T+import qualified Text.TeXMath.Shared as S+import Text.TeXMath.Unicode.ToUnicode (toUnicodeChar)+import Text.TeXMath.Types+  ( Alignment(..)+  , DisplayType(..)+  , Exp(..)+  , FractionType(..)+  , TeXSymbolType(..)+  , TextType(..)+  )+import Text.TeXMath.Writers.TeX (writeTeX)++-- | Render TeXMath expressions as StarMath syntax.+-- Falls back to TeX output for expressions that are not yet supported.+writeStarMath :: DisplayType -> [Exp] -> T.Text+writeStarMath dt exps =+  case renderExps dt (normalizeExps (everywhere (mkT $ S.handleDownup dt) exps)) of+    Just rendered -> T.strip rendered+    Nothing       -> writeTeX exps++data AlignContext = AlignDefault | AlignLeftCtx | AlignRightCtx+  deriving (Eq)++renderExps :: DisplayType -> [Exp] -> Maybe T.Text+renderExps dt = renderExpsIn dt AlignDefault++normalizeExps :: [Exp] -> [Exp]+normalizeExps =+  normalizeBareBars+  . normalizeEvaluationBars+  . mergeAdjacentUnicodeSerifStyled+  . normalizeBareBraces+  . map normalizeExp++normalizeExp :: Exp -> Exp+normalizeExp e =+  case e of+    EGrouped xs            -> EGrouped (normalizeExps xs)+    EStyled sty xs         -> EStyled sty (normalizeExps xs)+    EFraction ft num den   -> EFraction ft (normalizeExp num) (normalizeExp den)+    ESqrt x                -> ESqrt (normalizeExp x)+    ERoot idx rad          -> ERoot (normalizeExp idx) (normalizeExp rad)+    EDelimited op cl xs    -> EDelimited op cl (map normalizeDelimitedPiece xs)+    ESub base sub          -> ESub (normalizeExp base) (normalizeExp sub)+    ESuper base sup        -> ESuper (normalizeExp base) (normalizeExp sup)+    ESubsup base sub sup   -> ESubsup (normalizeExp base) (normalizeExp sub) (normalizeExp sup)+    EOver b base over      -> EOver b (normalizeExp base) (normalizeExp over)+    EUnder b base under    -> EUnder b (normalizeExp base) (normalizeExp under)+    EUnderover b base u o  -> EUnderover b (normalizeExp base) (normalizeExp u) (normalizeExp o)+    EArray aligns rows     -> EArray aligns (map (map normalizeExps) rows)+    EPhantom x             -> EPhantom (normalizeExp x)+    _                      -> e++normalizeDelimitedPiece :: Either T.Text Exp -> Either T.Text Exp+normalizeDelimitedPiece p =+  case p of+    Left t  -> Left t+    Right e -> Right (normalizeExp e)++normalizeBareBars :: [Exp] -> [Exp]+normalizeBareBars [] = []+normalizeBareBars (x : xs)+  | Just sym <- bareBarSymbol x =+      case collectBareDelimited sym [] xs of+        Just (mid, trailingScript, rest) ->+          let delimited = EDelimited sym sym (map Right mid)+              scripted = maybe delimited ($ delimited) trailingScript+          in scripted : normalizeBareBars rest+        _ ->+          x : normalizeBareBars xs+normalizeBareBars (x:xs) = x : normalizeBareBars xs++normalizeBareBraces :: [Exp] -> [Exp]+normalizeBareBraces [] = []+normalizeBareBraces (ESymbol Open "{" : xs) =+  case collectBareBraces [] xs of+    Just (mid, rest) -> EDelimited "{" "}" (map Right mid) : normalizeBareBraces rest+    Nothing          -> ESymbol Open "{" : normalizeBareBraces xs+normalizeBareBraces (x:xs) = x : normalizeBareBraces xs++mergeAdjacentUnicodeSerifStyled :: [Exp] -> [Exp]+mergeAdjacentUnicodeSerifStyled [] = []+mergeAdjacentUnicodeSerifStyled (EStyled sty xs : EStyled sty' ys : rest)+  | sty == sty' && isUnicodeSerifStyle sty =+      mergeAdjacentUnicodeSerifStyled (EStyled sty (xs <> [ESpace 1] <> ys) : rest)+mergeAdjacentUnicodeSerifStyled (x:xs) = x : mergeAdjacentUnicodeSerifStyled xs++isUnicodeSerifStyle :: TextType -> Bool+isUnicodeSerifStyle sty =+  sty `elem`+    [ TextScript+    , TextFraktur+    , TextDoubleStruck+    , TextBoldScript+    , TextBoldFraktur+    ]++normalizeEvaluationBars :: [Exp] -> [Exp]+normalizeEvaluationBars = reverse . go []+ where+  go acc [] = acc+  go acc (cur : xs)+    | Just script <- evaluationBarScript cur+    , Just (rest, target) <- takeEvaluationTarget acc =+        go (script target : rest) xs+    | otherwise =+        go (cur : acc) xs++evaluationBarScript :: Exp -> Maybe (Exp -> Exp)+evaluationBarScript cur =+  case cur of+    ESub base sub+      | isEvaluationBarBase base ->+          Just (\target -> ESub (EDelimited "." "|" [Right target]) sub)+    ESuper base sup+      | isEvaluationBarBase base ->+          Just (\target -> ESuper (EDelimited "." "|" [Right target]) sup)+    ESubsup base sub sup+      | isEvaluationBarBase base ->+          Just (\target -> ESubsup (EDelimited "." "|" [Right target]) sub sup)+    _ -> Nothing++takeEvaluationTarget :: [Exp] -> Maybe ([Exp], Exp)+takeEvaluationTarget [] = Nothing+takeEvaluationTarget (e : rest) =+  case e of+    EDelimited{} -> Just (rest, e)+    ESymbol Close c+      | Just (rest', target) <- takeDelimitedTarget c rest ->+          Just (rest', target)+    _ -> Just (rest, e)++takeDelimitedTarget :: T.Text -> [Exp] -> Maybe ([Exp], Exp)+takeDelimitedTarget closeTxt = go 0 []+ where+  openTxt =+    case closeTxt of+      ")" -> Just "("+      "]" -> Just "["+      "}" -> Just "{"+      _   -> Nothing++  go _ _ [] = Nothing+  go depth inner (e : rest) =+    case (openTxt, e) of+      (Just open, ESymbol Close c)+        | c == closeTxt ->+            go (depth + 1) (e : inner) rest+      (Just open, ESymbol Open o)+        | o == open ->+            if depth == 0+               then Just (rest, EDelimited open closeTxt (map Right inner))+               else go (depth - 1) (e : inner) rest+      _ ->+        go depth (e : inner) rest++isEvaluationBarBase :: Exp -> Bool+isEvaluationBarBase e =+  case e of+    EScaled _ (ESymbol Open "|")  -> True+    EScaled _ (ESymbol Close "|") -> True+    _                             -> False++collectBareBraces :: [Exp] -> [Exp] -> Maybe ([Exp], [Exp])+collectBareBraces _ [] = Nothing+collectBareBraces acc (ESymbol Close "}" : xs) = Just (reverse acc, xs)+collectBareBraces acc (x:xs) = collectBareBraces (x:acc) xs++collectBareDelimited :: T.Text -> [Exp] -> [Exp]+                     -> Maybe ([Exp], Maybe (Exp -> Exp), [Exp])+collectBareDelimited _ acc [] = Nothing+collectBareDelimited sym acc (y:ys)+  | matchesBareBar sym y = Just (reverse acc, Nothing, ys)+  | Just apply <- scriptedBareBar sym y = Just (reverse acc, Just apply, ys)+  | otherwise = collectBareDelimited sym (y:acc) ys++bareBarSymbol :: Exp -> Maybe T.Text+bareBarSymbol e =+  case e of+    ESymbol _ "|" -> Just "|"+    ESymbol _ "∣" -> Just "|"+    ESymbol _ "∥" -> Just "∥"+    _             -> Nothing++matchesBareBar :: T.Text -> Exp -> Bool+matchesBareBar sym e =+  case bareBarSymbol e of+    Just sym' -> sym == sym'+    Nothing   -> False++scriptedBareBar :: T.Text -> Exp -> Maybe (Exp -> Exp)+scriptedBareBar sym e =+  case e of+    ESub base sub+      | matchesBareBar sym base -> Just (\del -> ESub del sub)+    ESuper base sup+      | matchesBareBar sym base -> Just (\del -> ESuper del sup)+    ESubsup base sub sup+      | matchesBareBar sym base -> Just (\del -> ESubsup del sub sup)+    _ -> Nothing++renderExpsIn :: DisplayType -> AlignContext -> [Exp] -> Maybe T.Text+renderExpsIn dt ctx exps = do+  rendered <- mapM (renderExpIn dt ctx) exps+  let pieces = zip exps rendered+  let merged = mergePieces pieces+  let withLhs =+        if startsWithInfixNeedingLhs exps+           then "{} " <> T.stripStart merged+           else merged+  pure $ if endsWithInfixNeedingRhs exps+            then T.stripEnd withLhs <> " {}"+            else withLhs++mergePieces :: [(Exp, T.Text)] -> T.Text+mergePieces [] = ""+mergePieces ((e0, t0) : rest) = snd $ List.foldl' step (e0, t0) rest+ where+  step (prevE, acc) (curE, curT) =+    if T.null curT+       then (prevE, acc)+       else+         (curE, appendRendered (needsSeparator prevE curE) acc curT)++appendRendered :: Bool -> T.Text -> T.Text -> T.Text+appendRendered needSep left right+  | T.null left = T.stripStart right+  | T.null right = T.stripEnd left+  | otherwise =+      let leftHadWs = endsWithAsciiSpace left+          rightHadWs = startsWithAsciiSpace right+          left' = T.dropWhileEnd isAsciiSpaceChar left+          right' = T.dropWhile isAsciiSpaceChar right+          sep = if leftHadWs || rightHadWs || needSep then " " else ""+      in left' <> sep <> right'++startsWithAsciiSpace :: T.Text -> Bool+startsWithAsciiSpace t =+  case T.uncons t of+    Just (c, _) -> isAsciiSpaceChar c+    Nothing     -> False++endsWithAsciiSpace :: T.Text -> Bool+endsWithAsciiSpace t =+  case T.unsnoc t of+    Just (_, c) -> isAsciiSpaceChar c+    Nothing     -> False++isAsciiSpaceChar :: Char -> Bool+isAsciiSpaceChar c = c == ' ' || c == '\t' || c == '\n'++needsSeparator :: Exp -> Exp -> Bool+needsSeparator prevE curE+  | isGreekIdentifierExp prevE && isIdentifierLike curE = True+  | isGreekIdentifierExp prevE && isRootLike curE        = True+  | isGreekIdentifierExp prevE && isTerminatingPunctuation curE = True+  | isWordSymbolLike prevE && isIdentifierLike curE      = True+  | isWordSymbolLike prevE && isOpenLike curE            = True+  | isWordStyledExp prevE && isIdentifierLike curE       = True+  | isAccentCommandExp prevE && isIdentifierLike curE    = True+  | isAccentCommandExp prevE && isOpenLike curE          = True+  | isAccentCommandExp prevE && isRootLike curE          = True+  | isMathOperatorExp prevE && isIdentifierLike curE     = True+  | isUnaryMinusSymbol prevE && isIdentifierLike curE    = True+  | isIdentifierLike prevE && isMathOperatorExp curE     = True+  | isIdentifierLike prevE && isRootLike curE            = True+  | isIdentifierLike prevE && isArrowScriptedExp curE    = True+  | isIdentifierLike prevE && isScriptedMathOperatorExp curE = True+  | isIdentifierLike prevE && isWordSymbolLike curE      = True+  | isLargeOpScriptedExp prevE && isIdentifierLike curE  = True+  | isLargeOpScriptedExp prevE && isFractionLike curE    = True+  | isLargeOpScriptedExp prevE && isAccentCommandExp curE = True+  | isScripted prevE && isIdentifierLike curE           = True+  | isArrowScriptedExp prevE && isIdentifierLike curE   = True+  | isScriptedMathOperatorExp prevE && isIdentifierLike curE = True+  | isDelimited prevE && isDelimited curE               = True+  | isCloseLike prevE && isIdentifierLike curE          = True+  | isCloseLike prevE && isWordSymbolLike curE          = True+  | isCloseLike prevE && isAccentCommandExp curE        = True+  | isCloseLike prevE && isArrayLike curE               = True+  | isIdentifierLike prevE && isWordStyledExp curE      = True+  | isIdentifierLike prevE && isUprightMathTextExp curE = True+  | isIdentifierLike prevE && isAccentCommandExp curE   = True+  | isIdentifierLike prevE && isWideSpace curE          = True+  | isIdentifierLike prevE && isDelimited curE          = True+  | isIdentifierLike prevE && isNonNormalTextExp curE   = True+  | isQuotedTextExp prevE && isItalicTextExp curE       = True+  | otherwise                                            = False++isGreekIdentifierExp :: Exp -> Bool+isGreekIdentifierExp e =+  case e of+    EIdentifier t -> greekName t /= Nothing+    _             -> False++isIdentifierLike :: Exp -> Bool+isIdentifierLike e =+  case e of+    EIdentifier{}   -> True+    ENumber{}       -> True+    EMathOperator{} -> True+    ESub{}          -> True+    ESuper{}        -> True+    ESubsup{}       -> True+    EStyled{}       -> True+    _               -> False++isMathOperatorExp :: Exp -> Bool+isMathOperatorExp e =+  case e of+    EMathOperator{} -> True+    _               -> False++isDelimited :: Exp -> Bool+isDelimited e =+  case e of+    EDelimited{} -> True+    _            -> False++isArrayLike :: Exp -> Bool+isArrayLike e =+  case e of+    EArray{} -> True+    _        -> False++isFractionLike :: Exp -> Bool+isFractionLike e =+  case e of+    EFraction{} -> True+    _           -> False++isWideSpace :: Exp -> Bool+isWideSpace e =+  case e of+    ESpace w -> w >= 1+    _        -> False++isWordSymbolLike :: Exp -> Bool+isWordSymbolLike e =+  case e of+    ESymbol _ "∀" -> True+    ESymbol _ "∃" -> True+    ESymbol _ "∇" -> True+    ESymbol _ "∂" -> True+    ESymbol _ "¬" -> True+    ESymbol _ "∧" -> True+    ESymbol _ "∨" -> True+    ESymbol _ "and" -> True+    ESymbol _ "or" -> True+    _             -> False++isOpenLike :: Exp -> Bool+isOpenLike e =+  case e of+    ESymbol Open _ -> True+    _              -> False++isRootLike :: Exp -> Bool+isRootLike e =+  case e of+    ESqrt{} -> True+    ERoot{} -> True+    _       -> False++isWordStyledExp :: Exp -> Bool+isWordStyledExp e =+  case e of+    EStyled TextNormal [x]     -> isWordStyledExp x+    EStyled TextItalic _       -> True+    EStyled TextBold _         -> True+    EStyled TextScript _       -> True+    EStyled TextFraktur _      -> True+    EStyled TextDoubleStruck _ -> True+    _                          -> False++isUprightMathTextExp :: Exp -> Bool+isUprightMathTextExp e =+  case e of+    EStyled TextNormal [EIdentifier _] -> True+    _                                  -> False++isItalicTextExp :: Exp -> Bool+isItalicTextExp e =+  case e of+    EText TextItalic _ -> True+    _                  -> False++isQuotedTextExp :: Exp -> Bool+isQuotedTextExp e =+  case e of+    EText TextNormal _ -> True+    _                  -> False++isNonNormalTextExp :: Exp -> Bool+isNonNormalTextExp e =+  case e of+    EText sty _ -> sty /= TextNormal+    _           -> False++isAccentCommandExp :: Exp -> Bool+isAccentCommandExp e =+  case e of+    EOver _ _ over -> accentName over /= Nothing+    _              -> False++isTerminatingPunctuation :: Exp -> Bool+isTerminatingPunctuation e =+  case e of+    ESymbol _ "." -> True+    ESymbol _ "," -> True+    ESymbol _ ";" -> True+    ESymbol _ ":" -> True+    _             -> False++isCloseLike :: Exp -> Bool+isCloseLike e =+  case e of+    ESymbol Close _ -> True+    EDelimited{}    -> True+    _               -> False++isScripted :: Exp -> Bool+isScripted e =+  case e of+    ESub{}    -> True+    ESuper{}  -> True+    ESubsup{} -> True+    _         -> False++isArrowScriptedExp :: Exp -> Bool+isArrowScriptedExp e =+  case e of+    EUnder _ base _       -> isArrowBase base+    EOver _ base _        -> isArrowBase base+    EUnderover _ base _ _ -> isArrowBase base+    ESub base _           -> isArrowBase base+    ESuper base _         -> isArrowBase base+    ESubsup base _ _      -> isArrowBase base+    _                     -> False++isScriptedMathOperatorExp :: Exp -> Bool+isScriptedMathOperatorExp e =+  case e of+    ESub base _           -> isMathOperatorExp base+    ESuper base _         -> isMathOperatorExp base+    ESubsup base _ _      -> isMathOperatorExp base+    EUnder _ base _       -> isMathOperatorExp base+    EOver _ base _        -> isMathOperatorExp base+    EUnderover _ base _ _ -> isMathOperatorExp base+    _                     -> False++isArrowBase :: Exp -> Bool+isArrowBase e =+  case e of+    ESymbol _ "←" -> True+    ESymbol _ "→" -> True+    ESymbol _ "↔" -> True+    ESymbol _ "⇐" -> True+    ESymbol _ "⇒" -> True+    ESymbol _ "⇔" -> True+    ESymbol _ "↦" -> True+    _             -> False++isUnaryMinusSymbol :: Exp -> Bool+isUnaryMinusSymbol e =+  case e of+    ESymbol t "-" -> t /= Bin+    ESymbol t "−" -> t /= Bin+    _             -> False++isLargeOpScriptedExp :: Exp -> Bool+isLargeOpScriptedExp e =+  case e of+    EUnder _ base _       -> largeOpName base /= Nothing+    EOver _ base _        -> largeOpName base /= Nothing+    EUnderover _ base _ _ -> largeOpName base /= Nothing+    ESub base _      -> largeOpName base /= Nothing+    ESuper base _    -> largeOpName base /= Nothing+    ESubsup base _ _ -> largeOpName base /= Nothing+    _                -> False++startsWithInfixNeedingLhs :: [Exp] -> Bool+startsWithInfixNeedingLhs exps =+  case exps of+    (e : _) -> needsNeutralLhs e+    _                 -> False++endsWithInfixNeedingRhs :: [Exp] -> Bool+endsWithInfixNeedingRhs exps =+  case reverse exps of+    (e : _) -> needsNeutralRhs e+    _       -> False++needsNeutralLhs :: Exp -> Bool+needsNeutralLhs = isInfixLikeExp++needsNeutralRhs :: Exp -> Bool+needsNeutralRhs = isInfixLikeExp++needsNeutralScriptOperands :: Exp -> Bool+needsNeutralScriptOperands e =+  isInfixLikeExp e && not (isAtomicScriptOperator e)++isAtomicScriptOperator :: Exp -> Bool+isAtomicScriptOperator e =+  case e of+    ESymbol _ "∘" -> True+    _             -> False++isInfixLikeExp :: Exp -> Bool+isInfixLikeExp e =+  case e of+    ESymbol t s+      | t == Bin -> True+      | t == Rel -> True+      | otherwise -> s `elem`+          [ "×", "⋅", "·", "∘"+          , "∈", "∉", "∋"+          , "∩", "∪"+          , "⊂", "⊆", "⊃", "⊇"+          , "≤", "≥", "≠", "≈", "≡", "∝"+          , "∥", "⊥"+          , "±", "∓"+          , "/", "←", "→", "↔", "⇐", "⇒", "⇔", "↦"+          ]+    _ -> False++renderExpIn :: DisplayType -> AlignContext -> Exp -> Maybe T.Text+renderExpIn dt ctx e =+  case e of+    ENumber t       -> Just t+    EIdentifier t   -> Just (renderIdentifier t)+    EMathOperator t -> Just (renderMathOperator t)+    ESymbol t s     -> Just (renderSymbol t s)+    EText sty t     -> Just (renderTextAtom sty t)+    ESpace w        -> Just (renderSpace w)+    EGrouped xs     -> ("{" <>) . (<> "}") <$> renderExpsIn dt ctx xs+    EStyled sty xs  -> renderStyled dt ctx sty xs++    EFraction frac num den -> do+      num' <- renderExpIn dt AlignDefault num+      den' <- renderExpIn dt AlignDefault den+      let num'' = maybeCenterFractionArg ctx num'+      let den'' = maybeCenterFractionArg ctx den'+      pure $ case frac of+        NoLineFrac -> "binom" <> asDelimitedArg num'' <> asDelimitedArg den''+        InlineFrac -> renderInlineFraction num'' den''+        NormalFrac+          | dt == DisplayInline -> renderInlineFraction num'' den''+        _          -> "{" <> num'' <> " over " <> den'' <> "}"++    ESqrt x -> ("sqrt {" <>) . (<> "}") <$> renderExpIn dt ctx x+    ERoot idx rad -> do+      idx' <- renderExpIn dt ctx idx+      rad' <- renderExpIn dt ctx rad+      pure $ "nroot {" <> idx' <> "} {" <> rad' <> "}"++    EScaled _ (ESymbol Open "|") ->+      Just "mline"+    EScaled _ (ESymbol Close "|") ->+      Just "mline"+    EScaled _ x ->+      renderExpIn dt ctx x++    EDelimited op cl xs -> do+      body <- renderDelimitedBody dt ctx xs+      let op' = delimToken DelimLeft op+      let cl' = delimToken DelimRight cl+      pure $ "left " <> op' <> " " <> body <> " right " <> cl'++    ESub base sub -> do+      base' <- renderExpIn dt ctx base+      sub'  <- renderScriptArg dt ctx sub+      pure $ renderScriptBase base base' <> "_" <> sub'++    ESuper base sup -> do+      baseRendered <- renderExpIn dt ctx base+      case renderPrimeSuffix sup of+        Just primes ->+          pure $ renderScriptBase base baseRendered <> primes+        Nothing -> do+          supRendered <- renderScriptArg dt ctx sup+          pure $ renderScriptBase base baseRendered <> "^" <> supRendered++    ESubsup base sub sup -> do+      baseRendered <- renderExpIn dt ctx base+      subRendered <- renderScriptArg dt ctx sub+      case renderPrimeSuffix sup of+        Just primes ->+          pure $ renderScriptBase base baseRendered <> "_" <> subRendered <> primes+        Nothing -> do+          supRendered <- renderScriptArg dt ctx sup+          pure $ renderScriptBase base baseRendered <> "_" <> subRendered <> "^" <> supRendered++    EOver _ base over+      | Just arrow <- arrowScriptOpName base -> do+          if isEmptyScriptArg over+             then pure arrow+             else do+               over' <- renderScriptArg dt ctx over+               pure $ arrow <> " csup " <> centerScriptArg over'+      | Just op <- centeredScriptOpName base -> do+          over' <- renderScriptArg dt ctx over+          pure $ "{" <> op <> "} csup " <> centerScriptArg over'+      | Just brace <- braceAnnotationName over -> do+          base' <- renderExpIn dt ctx base+          pure $ renderScriptBase base base' <> " " <> brace+      | isBraceAnnotatedExp base -> do+          base' <- renderExpIn dt ctx base+          over' <- renderBraceLabel dt ctx over+          pure $ base' <> " " <> over'+      | Just accent <- accentName over -> do+          base' <- renderExpIn dt ctx base+          pure $ accent <> " " <> renderAccentArg base base'+      | Just op <- limitOpName base -> do+          over' <- renderLimitArg dt ctx over+          pure $ op <> " to " <> over' <> " "+      | otherwise -> Nothing++    EUnder _ base under ->+      case arrowScriptOpName base of+        Just arrow ->+          if isEmptyScriptArg under+             then pure arrow+             else do+               under' <- renderScriptArg dt ctx under+               pure $ arrow <> " csub " <> centerScriptArg under'+        Nothing ->+          case underlineMarkerName under of+            Just marker -> do+              base' <- renderExpIn dt ctx base+              pure $ marker <> " " <> renderAccentArg base base'+            Nothing ->+              case braceAnnotationName under of+                Just brace -> do+                  base' <- renderExpIn dt ctx base+                  pure $ renderScriptBase base base' <> " " <> brace+                Nothing ->+                  if isBraceAnnotatedExp base+                     then do+                       base' <- renderExpIn dt ctx base+                       under' <- renderBraceLabel dt ctx under+                       pure $ base' <> " " <> under'+                     else+                       case centeredScriptOpName base of+                         Just op -> do+                           under' <- renderScriptArg dt ctx under+                           pure $ "{" <> op <> "} csub " <> centerScriptArg under'+                         Nothing ->+                           case limitOpName base of+                             Just op -> do+                               under' <- renderLimitArg dt ctx under+                               pure $ op <> " from " <> under' <> " "+                             Nothing -> do+                               base' <- renderExpIn dt ctx base+                               under' <- renderScriptArg dt ctx under+                               pure $ renderScriptBase base base' <> "_" <> under'+    EUnderover _ base under over ->+      case arrowScriptOpName base of+        Just arrow ->+          case (isEmptyScriptArg under, isEmptyScriptArg over) of+            (True, True) -> pure arrow+            (False, True) -> do+              under' <- renderScriptArg dt ctx under+              pure $ arrow <> " csub " <> centerScriptArg under'+            (True, False) -> do+              over' <- renderScriptArg dt ctx over+              pure $ arrow <> " csup " <> centerScriptArg over'+            (False, False) -> do+              under' <- renderScriptArg dt ctx under+              over' <- renderScriptArg dt ctx over+              pure $ arrow <> " csub " <> centerScriptArg under'+                  <> " csup " <> centerScriptArg over'+        Nothing ->+          case centeredScriptOpName base of+            Just op -> do+              under' <- renderScriptArg dt ctx under+              over' <- renderScriptArg dt ctx over+              pure $ "{" <> op <> "} csub " <> centerScriptArg under'+                  <> " csup " <> centerScriptArg over'+            Nothing ->+              case limitOpName base of+                Just op -> do+                  under' <- renderLimitArg dt ctx under+                  over'  <- renderLimitArg dt ctx over+                  pure $ op <> " from " <> under' <> " to " <> over' <> " "+                Nothing -> do+                  base' <- renderExpIn dt ctx base+                  under' <- renderScriptArg dt ctx under+                  over' <- renderScriptArg dt ctx over+                  pure $ renderScriptBase base base' <> "_" <> under' <> "^" <> over'+    EArray aligns rows -> renderMatrix dt aligns rows+    EPhantom x         -> do+      x' <- renderExpIn dt ctx x+      pure $ "phantom " <> renderPhantomArg x x'+    _                  -> Nothing++renderDelimitedBody :: DisplayType -> AlignContext -> [Either T.Text Exp] -> Maybe T.Text+renderDelimitedBody dt ctx xs = do+  chunks <- mapM (renderDelimitedChunk dt ctx) xs+  pure $ T.strip (mergeDelimitedChunks chunks)++data DelimitedChunk = DelimRaw T.Text | DelimExp Exp T.Text++renderDelimitedChunk :: DisplayType -> AlignContext -> Either T.Text Exp -> Maybe DelimitedChunk+renderDelimitedChunk dt ctx p =+  case p of+    Left t  -> Just $ DelimRaw (" " <> delimToken DelimMiddle t <> " ")+    Right x -> DelimExp x <$> renderExpIn dt ctx x++mergeDelimitedChunks :: [DelimitedChunk] -> T.Text+mergeDelimitedChunks [] = ""+mergeDelimitedChunks (c0:cs) = snd $ List.foldl' step (chunkExp c0, chunkText c0) cs+ where+  step (prevExp, acc) cur+    | T.null curText = (prevExp, acc)+    | otherwise =+        case cur of+          DelimRaw _ -> (Nothing, appendRendered False acc curText)+          DelimExp curExp _ ->+            let needSep = case prevExp of+                            Just pe -> needsSeparator pe curExp+                            Nothing -> False+            in (Just curExp, appendRendered needSep acc curText)+   where+    curText = chunkText cur++  chunkText c =+    case c of+      DelimRaw t   -> t+      DelimExp _ t -> t++  chunkExp c =+    case c of+      DelimRaw _   -> Nothing+      DelimExp e _ -> Just e++renderMatrix :: DisplayType -> [Alignment] -> [[[Exp]]] -> Maybe T.Text+renderMatrix dt aligns rows = do+  rows' <- mapM (renderMatrixRow dt aligns) rows+  pure $ "matrix { " <> T.intercalate " ## " rows' <> " }"++renderMatrixRow :: DisplayType -> [Alignment] -> [[Exp]] -> Maybe T.Text+renderMatrixRow dt aligns cells = do+  let explicitCenter = any (/= AlignCenter) aligns+  let columnCount = max (length aligns) (length cells)+  let paddedCells = take columnCount (cells ++ repeat [])+  cells' <- sequence+    [ renderMatrixCellWithAlign dt explicitCenter (columnAlign aligns i) c+    | (i, c) <- zip [(0 :: Int) ..] paddedCells+    ]+  pure $ T.intercalate " # " cells'++renderMatrixCell :: DisplayType -> AlignContext -> [Exp] -> Maybe T.Text+renderMatrixCell _ _ [] = Just "{}"+renderMatrixCell dt ctx xs = do+  rendered <- renderExpsIn dt ctx xs+  let stripped = T.strip rendered+  pure $ if T.null stripped then "{}" else stripped++renderMatrixCellWithAlign :: DisplayType -> Bool -> Alignment -> [Exp] -> Maybe T.Text+renderMatrixCellWithAlign dt explicitCenter align xs = do+  cell <- renderMatrixCell dt (alignmentContext align) xs+  pure $ case align of+    AlignLeft  -> "alignl " <> cell+    AlignRight -> "alignr " <> cell+    AlignCenter | explicitCenter -> "alignc " <> cell+    _                            -> cell++columnAlign :: [Alignment] -> Int -> Alignment+columnAlign aligns i =+  case drop i aligns of+    (a : _) -> a+    []      -> AlignCenter++renderStyled :: DisplayType -> AlignContext -> TextType -> [Exp] -> Maybe T.Text+renderStyled dt ctx sty xs = do+  body <- renderExpsIn dt ctx xs+  pure $ case sty of+    _+      | Just unicodeBody <- renderUnicodeSerifStyled sty xs ->+          "nitalic " <> styleArg unicodeBody+    TextNormal+      | Just ident <- singleUprightIdentifier xs ->+          "nitalic " <> renderTextNormalIdentifier ident+      | not (hasStructuralScript xs)+      , Just txt <- styledText xs -> quoteText txt+      | Just txt <- renderTextNormalStyled dt xs+      , shouldForceUprightTextNormal xs -> "nitalic{" <> txt <> "}"+      | Just txt <- renderTextNormalStyled dt xs -> txt+    TextItalic       -> "ital " <> styleArg body+    TextBold+      | shouldForceUprightBold xs -> "bold nitalic " <> styleArg body+      | otherwise -> "bold " <> styleArg body+    TextBoldItalic   -> "bold " <> styleArg ("ital " <> styleArg body)+    TextMonospace    -> "font fixed nitalic " <> styleArg body+    TextSansSerif    -> "font sans nitalic " <> styleArg body+    TextSansSerifBold -> "bold " <> styleArg ("font sans nitalic " <> styleArg body)+    TextSansSerifBoldItalic -> "bold " <> styleArg ("font sans ital " <> styleArg body)+    TextSansSerifItalic -> "font sans ital " <> styleArg body+    TextScript       -> "ital " <> styleArg body+    TextFraktur      -> "bold " <> styleArg body+    TextDoubleStruck -> "bold nitalic " <> styleArg body+    _                -> body+ where+  styleArg t+    | T.null t       = "{}"+    | T.length t == 1 = t+    | otherwise      = "{" <> t <> "}"++renderUnicodeSerifStyled :: TextType -> [Exp] -> Maybe T.Text+renderUnicodeSerifStyled sty xs =+  case sty of+    TextScript       -> styledUnicodeText sty xs+    TextFraktur      -> styledUnicodeText sty xs+    TextDoubleStruck -> styledUnicodeText sty xs+    TextBoldScript   -> styledUnicodeText sty xs+    TextBoldFraktur  -> styledUnicodeText sty xs+    _                -> Nothing++styledUnicodeText :: TextType -> [Exp] -> Maybe T.Text+styledUnicodeText sty = fmap T.concat . mapM (styledUnicodeExp sty)++styledUnicodeExp :: TextType -> Exp -> Maybe T.Text+styledUnicodeExp sty e =+  case e of+    EIdentifier t        -> mapStyledUnicode sty t+    ENumber t            -> mapStyledUnicode sty t+    EGrouped xs          -> styledUnicodeText sty xs+    EStyled TextNormal xs -> styledUnicodeText sty xs+    ESpace w+      | w <= 0          -> Just ""+      | w >= 2          -> Just "  "+      | otherwise       -> Just " "+    _                   -> Nothing++mapStyledUnicode :: TextType -> T.Text -> Maybe T.Text+mapStyledUnicode sty t = T.pack <$> mapM (\c -> toUnicodeChar (sty, c)) (T.unpack t)++hasStructuralScript :: [Exp] -> Bool+hasStructuralScript = any go+ where+  go e =+    case e of+      ESub{}                 -> True+      ESuper{}               -> True+      ESubsup{}              -> True+      EGrouped xs            -> hasStructuralScript xs+      EStyled TextNormal xs  -> hasStructuralScript xs+      _                      -> False++styledText :: [Exp] -> Maybe T.Text+styledText = fmap T.concat . mapM styledTextExp++styledTextExp :: Exp -> Maybe T.Text+styledTextExp e =+  case e of+    ENumber t         -> Just t+    EIdentifier t     -> Just t+    EText _ t         -> Just t+    ESpace w+      | w <= 0        -> Just ""+      | w >= 2        -> Just "  "+      | otherwise     -> Just " "+    EGrouped xs       -> styledText xs+    EStyled TextNormal xs -> styledText xs+    ESub base sub     -> do+      base' <- styledTextExp base+      sub'  <- styledTextNonNumericExp sub+      pure $ base' <> "_" <> sub'+    ESuper base sup   -> do+      base' <- styledTextExp base+      sup'  <- styledTextNonNumericExp sup+      pure $ base' <> "^" <> sup'+    ESubsup base sub sup -> do+      base' <- styledTextExp base+      sub'  <- styledTextNonNumericExp sub+      sup'  <- styledTextNonNumericExp sup+      pure $ base' <> "_" <> sub' <> "^" <> sup'+    ESymbol _ s+      | isPlainTextSymbol s -> Just s+    _ -> Nothing++styledTextNonNumericExp :: Exp -> Maybe T.Text+styledTextNonNumericExp e = do+  txt <- styledTextExp e+  if T.any isAsciiDigit txt+     then Nothing+     else Just txt++isAsciiDigit :: Char -> Bool+isAsciiDigit c = c >= '0' && c <= '9'++isPlainTextSymbol :: T.Text -> Bool+isPlainTextSymbol s =+  s `elem`+    [ "_", ",", ".", ":", ";", "-", "−", "/", "(", ")", "[", "]"+    , "+", "=", "'", "′"+    ]++renderTextNormalStyled :: DisplayType -> [Exp] -> Maybe T.Text+renderTextNormalStyled dt xs = do+  let xs' = quoteStarMathKeywordRuns xs+  rendered <- mapM (renderTextNormalExp dt) xs'+  pure $ mergePieces (zip xs' rendered)++quoteStarMathKeywordRuns :: [Exp] -> [Exp]+quoteStarMathKeywordRuns [] = []+quoteStarMathKeywordRuns xs@(x : rest)+  | Just _ <- asciiIdentifierWord x =+      let (word, wordExps, rest') = takeIdentifierWordRun xs+      in if isStarMathReservedWord word+            then EText TextNormal word : quoteStarMathKeywordRuns rest'+            else wordExps <> quoteStarMathKeywordRuns rest'+  | otherwise = x : quoteStarMathKeywordRuns rest++takeIdentifierWordRun :: [Exp] -> (T.Text, [Exp], [Exp])+takeIdentifierWordRun = go [] []+ where+  go pieces exps (e : rest)+    | Just piece <- asciiIdentifierWord e = go (piece : pieces) (e : exps) rest+  go pieces exps rest = (T.concat (reverse pieces), reverse exps, rest)++asciiIdentifierWord :: Exp -> Maybe T.Text+asciiIdentifierWord e =+  case e of+    EIdentifier t+      | not (T.null t) && T.all isAsciiAlpha t -> Just t+    _ -> Nothing++renderTextNormalExp :: DisplayType -> Exp -> Maybe T.Text+renderTextNormalExp dt e =+  case e of+    ENumber t       -> Just t+    EIdentifier t   -> Just (renderIdentifier t)+    EText sty t     -> Just (renderTextAtom sty t)+    ESpace w        -> Just (renderSpace w)+    EGrouped xs     -> renderTextNormalStyled dt xs+    EStyled TextNormal xs -> renderTextNormalStyled dt xs+    EStyled TextBold xs -> do+      body <- renderExpsIn dt AlignDefault xs+      pure $ "bold nitalic " <> styleArg body+    EStyled sty xs  -> renderStyled dt AlignDefault sty xs+    ESub base sub   -> do+      base' <- renderTextNormalExp dt base+      sub'  <- renderTextNormalExp dt sub+      pure $ base' <> "_" <> sub'+    ESuper base sup -> do+      base' <- renderTextNormalExp dt base+      sup'  <- renderTextNormalExp dt sup+      pure $ base' <> "^" <> sup'+    ESubsup base sub sup -> do+      base' <- renderTextNormalExp dt base+      sub'  <- renderTextNormalExp dt sub+      sup'  <- renderTextNormalExp dt sup+      pure $ base' <> "_" <> sub' <> "^" <> sup'+    ESymbol t s     -> Just (T.strip (renderSymbol t s))+    _               -> Nothing++shouldForceUprightTextNormal :: [Exp] -> Bool+shouldForceUprightTextNormal = all isUprightTextNormalExp++shouldForceUprightBold :: [Exp] -> Bool+shouldForceUprightBold = all isUprightBoldExp++isUprightBoldExp :: Exp -> Bool+isUprightBoldExp e =+  case e of+    ENumber{}            -> True+    EIdentifier t        -> T.all isAsciiAlphaNum t+    EText{}              -> True+    ESpace{}             -> True+    ESymbol _ s          -> isPlainTextSymbol s+    EGrouped xs          -> shouldForceUprightBold xs+    EStyled TextNormal xs -> shouldForceUprightBold xs+    ESub base sub        -> isUprightBoldExp base && isUprightBoldExp sub+    ESuper base sup      -> isUprightBoldExp base && isUprightBoldExp sup+    ESubsup base sub sup -> isUprightBoldExp base+                         && isUprightBoldExp sub+                         && isUprightBoldExp sup+    _                    -> False++isUprightTextNormalExp :: Exp -> Bool+isUprightTextNormalExp e =+  case e of+    ENumber{}              -> True+    EIdentifier{}          -> True+    EText{}                -> True+    ESpace{}               -> True+    ESymbol _ s            -> isPlainTextSymbol s+    EGrouped xs            -> shouldForceUprightTextNormal xs+    EStyled TextNormal xs  -> shouldForceUprightTextNormal xs+    ESub base sub          -> isUprightTextNormalExp base && isUprightTextNormalExp sub+    ESuper base sup        -> isUprightTextNormalExp base && isUprightTextNormalExp sup+    ESubsup base sub sup   -> isUprightTextNormalExp base+                           && isUprightTextNormalExp sub+                           && isUprightTextNormalExp sup+    _                      -> False++isAsciiAlpha :: Char -> Bool+isAsciiAlpha c =+  (c >= 'A' && c <= 'Z') ||+  (c >= 'a' && c <= 'z')++isAsciiAlphaNum :: Char -> Bool+isAsciiAlphaNum c =+  isAsciiAlpha c ||+  (c >= '0' && c <= '9')++styleArg :: T.Text -> T.Text+styleArg t+  | T.null t        = "{}"+  | T.length t == 1 = t+  | otherwise       = "{" <> t <> "}"++singleUprightIdentifier :: [Exp] -> Maybe T.Text+singleUprightIdentifier xs =+  case xs of+    [EIdentifier t] -> Just t+    _               -> Nothing++alignmentContext :: Alignment -> AlignContext+alignmentContext a =+  case a of+    AlignLeft  -> AlignLeftCtx+    AlignRight -> AlignRightCtx+    _          -> AlignDefault++maybeCenterFractionArg :: AlignContext -> T.Text -> T.Text+maybeCenterFractionArg ctx t+  | ctx == AlignLeftCtx || ctx == AlignRightCtx = "{alignc " <> asArg t <> "}"+  | otherwise = t+ where+  asArg x =+    let s = T.strip x+    in if T.null s+          then "{}"+          else if T.length s == 1+                  then s+          else if T.head s == '{' && T.last s == '}'+                          then s+                          else "{" <> s <> "}"++asDelimitedArg :: T.Text -> T.Text+asDelimitedArg t =+  let s = T.strip t+  in if T.null s+        then "{}"+        else if T.head s == '{' && T.last s == '}'+                then s+                else "{" <> s <> "}"++renderInlineFraction :: T.Text -> T.Text -> T.Text+renderInlineFraction num den =+  "size*0.7 {" <> num <> " over " <> den <> "}"++renderSpace :: Rational -> T.Text+renderSpace w+  | w <= 0    = ""+  | w >= 2    = "~~ "+  | w >= 1    = "~ "+  | otherwise = " "++renderIdentifier :: T.Text -> T.Text+renderIdentifier ident =+  case greekName ident of+    Just name+      | shouldItalicizeGreek ident -> "%i" <> name+      | otherwise                  -> "%" <> name+    Nothing -> ident++renderTextNormalIdentifier :: T.Text -> T.Text+renderTextNormalIdentifier ident =+  case greekName ident of+    Just{}  -> renderIdentifier ident+    Nothing+      | isStarMathReservedWord ident -> quoteText ident+      | otherwise                    -> ident++isStarMathReservedWord :: T.Text -> Bool+isStarMathReservedWord t =+  t `elem`+    [ "alignc", "alignl", "alignr"+    , "and", "approx"+    , "bar", "binom", "bold", "breve"+    , "cdot", "check", "circ", "cos", "cosh", "cot", "csub", "csup"+    , "dlarrow", "dlrarrow", "dot", "dotsaxis", "dotsdown", "dotslow"+    , "dotsup", "dotsvert", "downarrow", "drarrow"+    , "emptyset", "equiv", "exists", "exp"+    , "fixed", "font", "forall", "from", "func"+    , "gg"+    , "hat"+    , "in", "infinity", "int", "intersection", "ital", "iiint"+    , "langle", "lbrace", "lceil", "ldbracket", "ldline", "left"+    , "leftarrow", "leftrightarrow", "lfloor", "lim", "liminf"+    , "limsup", "ll", "lline", "ln", "log"+    , "mapsto", "matrix", "max", "min", "minusplus", "mline"+    , "nabla", "neg", "none", "notin", "nitalic", "nroot"+    , "or", "ortho", "over", "overbrace", "overline", "owns"+    , "parallel", "phantom", "plusminus", "partial", "prod", "prop"+    , "rangle", "rbrace", "rceil", "rdbracket", "rdline", "rfloor"+    , "right", "rline"+    , "sans", "sin", "sinh", "sqrt", "subset", "subseteq", "sum"+    , "supset", "supseteq"+    , "tilde", "times", "to", "toward"+    , "underbrace", "underline", "union", "uparrow"+    , "vec"+    ]++renderMathOperator :: T.Text -> T.Text+renderMathOperator t+  | t == "min" = "func min"+  | t == "max" = "func max"+  | isBareMathOperator t = t+  | shouldQuoteMathOperator t = "func " <> quoteText t+  | otherwise                 = "func " <> t++isBareMathOperator :: T.Text -> Bool+isBareMathOperator t =+  t `elem`+    [ "min", "max", "log", "sin", "cos", "cosh", "sinh"+    , "cot", "ln", "exp"+    ]++shouldQuoteMathOperator :: T.Text -> Bool+shouldQuoteMathOperator = not . T.all isLetter++shouldItalicizeGreek :: T.Text -> Bool+shouldItalicizeGreek ident =+  case ident of+    "α" -> True+    "β" -> True+    "γ" -> True+    "δ" -> True+    "ϵ" -> True+    "ε" -> True+    "ζ" -> True+    "η" -> True+    "θ" -> True+    "ϑ" -> True+    "ι" -> True+    "κ" -> True+    "λ" -> True+    "μ" -> True+    "ν" -> True+    "ξ" -> True+    "ο" -> True+    "π" -> True+    "ϖ" -> True+    "ρ" -> True+    "ϱ" -> True+    "𝜚" -> True+    "σ" -> True+    "ς" -> True+    "𝜍" -> True+    "τ" -> True+    "υ" -> True+    "ϕ" -> True+    "φ" -> True+    "χ" -> True+    "ψ" -> True+    "ω" -> True+    _   -> False++greekName :: T.Text -> Maybe T.Text+greekName ident =+  case ident of+    "α" -> Just "alpha"+    "β" -> Just "beta"+    "γ" -> Just "gamma"+    "δ" -> Just "delta"+    "ϵ" -> Just "epsilon"+    "ε" -> Just "varepsilon"+    "ζ" -> Just "zeta"+    "η" -> Just "eta"+    "θ" -> Just "theta"+    "ϑ" -> Just "vartheta"+    "ι" -> Just "iota"+    "κ" -> Just "kappa"+    "λ" -> Just "lambda"+    "μ" -> Just "mu"+    "ν" -> Just "nu"+    "ξ" -> Just "xi"+    "ο" -> Just "omicron"+    "π" -> Just "pi"+    "ϖ" -> Just "varpi"+    "ρ" -> Just "rho"+    "ϱ" -> Just "varrho"+    "𝜚" -> Just "varrho"+    "σ" -> Just "sigma"+    "ς" -> Just "varsigma"+    "𝜍" -> Just "varsigma"+    "τ" -> Just "tau"+    "υ" -> Just "upsilon"+    "ϕ" -> Just "phi"+    "φ" -> Just "varphi"+    "χ" -> Just "chi"+    "ψ" -> Just "psi"+    "ω" -> Just "omega"+    "Γ" -> Just "GAMMA"+    "Δ" -> Just "DELTA"+    "Θ" -> Just "THETA"+    "Λ" -> Just "LAMBDA"+    "Ξ" -> Just "XI"+    "Π" -> Just "PI"+    "Σ" -> Just "SIGMA"+    "Υ" -> Just "UPSILON"+    "Φ" -> Just "PHI"+    "Ψ" -> Just "PSI"+    "Ω" -> Just "OMEGA"+    _   -> Nothing++renderScriptBase :: Exp -> T.Text -> T.Text+renderScriptBase e rendered0 =+  let rendered = T.strip rendered0+  in if isEmptyScriptBase e || T.null rendered+        then "{}"+        else if isWrapped rendered+        then rendered+        else if isAtomic e+        then rendered+        else "{" <> rendered <> "}"++renderScriptArg :: DisplayType -> AlignContext -> Exp -> Maybe T.Text+renderScriptArg dt ctx e = do+  rendered0 <-+    if needsNeutralScriptOperands e+       then renderExpsIn dt ctx [e]+       else renderExpIn dt ctx e+  let rendered = T.strip rendered0+  pure $ if (isAtomic e && not (needsNeutralScriptOperands e)) || isQuotedText rendered+            then rendered+            else "{" <> rendered <> "}"++renderPrimeSuffix :: Exp -> Maybe T.Text+renderPrimeSuffix e =+  case e of+    ESymbol Pun "'"  -> Just "'"+    ESymbol Pun "′"  -> Just "'"+    ESymbol Pun "″"  -> Just "''"+    ESymbol Pun "‴"  -> Just "'''"+    _                -> Nothing++renderLimitArg :: DisplayType -> AlignContext -> Exp -> Maybe T.Text+renderLimitArg dt ctx e =+  case e of+    EGrouped xs -> do+      rendered <- renderExpsIn dt ctx xs+      let stripped = T.strip rendered+      pure $+        if T.null stripped+           then "{}"+           else if containsRelationLike xs+                   then stripped+           else if isQuotedText stripped || isWrapped stripped || T.length stripped == 1+                   then stripped+                   else "{" <> stripped <> "}"+    _           -> T.strip <$> renderExpIn dt ctx e++containsRelationLike :: [Exp] -> Bool+containsRelationLike = any isRelationLike+ where+  isRelationLike expn =+    case expn of+      ESymbol Rel _ -> True+      ESymbol Bin _ -> True+      EGrouped ys   -> containsRelationLike ys+      _             -> False++renderAccentArg :: Exp -> T.Text -> T.Text+renderAccentArg e rendered0 =+  let rendered = T.strip rendered0+  in if isAtomic e+        then rendered+        else "{" <> rendered <> "}"++renderPhantomArg :: Exp -> T.Text -> T.Text+renderPhantomArg e rendered0 =+  let rendered = T.strip rendered0+  in if isAtomic e+        then rendered+        else if isWrapped rendered+        then rendered+        else "{" <> rendered <> "}"++centerScriptArg :: T.Text -> T.Text+centerScriptArg rendered+  | isWrapped rendered = rendered+  | otherwise          = "{" <> rendered <> "}"++isWrapped :: T.Text -> Bool+isWrapped t = T.length t >= 2 && T.head t == '{' && T.last t == '}'++isAtomic :: Exp -> Bool+isAtomic e =+  case e of+    ENumber{}       -> True+    EIdentifier{}   -> True+    EMathOperator{} -> True+    EText{}         -> True+    ESymbol{}       -> True+    _               -> False++isEmptyScriptBase :: Exp -> Bool+isEmptyScriptBase e =+  case e of+    EIdentifier t -> T.null t+    _             -> False++isEmptyScriptArg :: Exp -> Bool+isEmptyScriptArg e =+  case e of+    EGrouped []   -> True+    EIdentifier t -> T.null t+    _             -> False++isBraceAnnotatedExp :: Exp -> Bool+isBraceAnnotatedExp e =+  case e of+    EOver _ _ over  -> braceAnnotationName over /= Nothing+    EUnder _ _ under -> braceAnnotationName under /= Nothing+    _               -> False++braceAnnotationName :: Exp -> Maybe T.Text+braceAnnotationName e =+  case e of+    ESymbol TOver "\9182"  -> Just "overbrace"+    ESymbol TOver "\9140"  -> Just "overbrace"+    ESymbol TUnder "\9183" -> Just "underbrace"+    ESymbol TUnder "\9141" -> Just "underbrace"+    _                       -> Nothing++underlineMarkerName :: Exp -> Maybe T.Text+underlineMarkerName e =+  case e of+    ESymbol TUnder "_" -> Just "underline"+    _                  -> Nothing++renderBraceLabel :: DisplayType -> AlignContext -> Exp -> Maybe T.Text+renderBraceLabel dt ctx e = do+  rendered0 <- renderExpIn dt ctx e+  let rendered = T.strip rendered0+  pure $ if isQuotedText rendered || isAtomic e+            then rendered+            else "{" <> rendered <> "}"++arrowScriptOpName :: Exp -> Maybe T.Text+arrowScriptOpName e =+  case e of+    ESymbol _ "←" -> Just "leftarrow"+    ESymbol _ "→" -> Just "toward"+    ESymbol _ "↔" -> Just "leftrightarrow"+    ESymbol _ "⇐" -> Just "dlarrow"+    ESymbol _ "⇒" -> Just "drarrow"+    ESymbol _ "⇔" -> Just "dlrarrow"+    ESymbol _ "↦" -> Just "mapsto"+    ESymbol _ "↑" -> Just "uparrow"+    ESymbol _ "↓" -> Just "downarrow"+    _             -> Nothing++accentName :: Exp -> Maybe T.Text+accentName e =+  case e of+    ESymbol Accent s -> accentFromChar s+    ESymbol TOver s  -> overAccentFromChar s+    ESymbol _ s      -> accentFromChar s+    _                -> Nothing++overAccentFromChar :: T.Text -> Maybe T.Text+overAccentFromChar s =+  case s of+    "\772"  -> Just "overline"+    "\8254" -> Just "overline"+    "¯"     -> Just "overline"+    _       -> accentFromChar s++accentFromChar :: T.Text -> Maybe T.Text+accentFromChar s =+  case s of+    "\775"  -> Just "dot"+    "˙"     -> Just "dot"+    "\776"  -> Just "ddot"+    "¨"     -> Just "ddot"+    "\770"  -> Just "hat"+    "ˆ"     -> Just "hat"+    "\780"  -> Just "check"+    "ˇ"     -> Just "check"+    "\771"  -> Just "tilde"+    "˜"     -> Just "tilde"+    "\772"  -> Just "bar"+    "\8254" -> Just "bar"+    "¯"     -> Just "bar"+    "\8407" -> Just "vec"+    "→"     -> Just "vec"+    "\774"  -> Just "breve"+    "˘"     -> Just "breve"+    _       -> Nothing++data DelimSide = DelimLeft | DelimRight | DelimMiddle++delimToken :: DelimSide -> T.Text -> T.Text+delimToken side raw =+  case raw of+    ""  -> "none"+    "." -> "none"+    "(" -> "("+    ")" -> ")"+    "[" -> "["+    "]" -> "]"+    "{" -> case side of+      DelimLeft   -> "lbrace"+      DelimRight  -> "rbrace"+      DelimMiddle -> "{"+    "}" -> case side of+      DelimLeft   -> "lbrace"+      DelimRight  -> "rbrace"+      DelimMiddle -> "}"+    "|" -> case side of+      DelimLeft   -> "lline"+      DelimRight  -> "rline"+      DelimMiddle -> "mline"+    "∣" -> case side of+      DelimLeft   -> "lline"+      DelimRight  -> "rline"+      DelimMiddle -> "mline"+    "∥" -> case side of+      DelimLeft   -> "ldline"+      DelimRight  -> "rdline"+      DelimMiddle -> "mline"+    "⟨" -> "langle"+    "⟩" -> "rangle"+    "⌊" -> "lfloor"+    "⌋" -> "rfloor"+    "⌈" -> "lceil"+    "⌉" -> "rceil"+    "⟦" -> "ldbracket"+    "⟧" -> "rdbracket"+    _   -> raw++renderSymbol :: TeXSymbolType -> T.Text -> T.Text+renderSymbol t s =+  case s of+    "∫" -> "int "+    "∑" -> "sum "+    "←" -> " leftarrow "+    "→" -> " toward "+    "↔" -> " leftrightarrow "+    "⇐" -> " dlarrow "+    "⇒" -> " drarrow "+    "⇔" -> " dlrarrow "+    "↑" -> " uparrow "+    "↓" -> " downarrow "+    "↦" -> " mapsto "+    "\8230 " -> " dotslow "+    "… " -> " dotslow "+    "\8230" -> " dotslow "+    "…" -> " dotslow "+    "\8943" -> " dotsaxis "+    "⋯" -> " dotsaxis "+    "⋮" -> " dotsvert "+    "⋱" -> " dotsdown "+    "⋰" -> " dotsup "+    "∈" -> " in "+    "∉" -> " notin "+    "∋" -> " owns "+    "∩" -> " intersection "+    "∪" -> " union "+    "⊂" -> " subset "+    "⊆" -> " subseteq "+    "⊃" -> " supset "+    "⊇" -> " supseteq "+    "≤" -> " <= "+    "≥" -> " >= "+    "≠" -> " <> "+    "≈" -> " approx "+    "≡" -> " equiv "+    "\8810" -> " ll "+    "≪" -> " ll "+    "\8811" -> " gg "+    "≫" -> " gg "+    "∝" -> " prop "+    "∥" -> " parallel "+    "⊥" -> " ortho "+    "±" -> " plusminus "+    "∓" -> " minusplus "+    "×" -> " times "+    "⋅" -> " cdot "+    "·" -> " cdot "+    "∘" -> " circ "+    "/" -> " / "+    "∂" -> "partial"+    "∇" -> "nabla"+    "∀" -> "forall"+    "∃" -> "exists"+    "¬" -> "neg"+    "∧" -> "and"+    "∨" -> "or"+    "∞" -> "infinity"+    "∅" -> "emptyset"+    "+" -> " + "+    "-" | t == Bin  -> " - "+    "-"             -> "-"+    "−" | t == Bin  -> " - "+    "−"             -> "-"+    "<" -> " < "+    ">" -> " > "+    "=" -> " = "+    "," -> ", "+    ";" -> "; "+    ":" -> " : "+    "!" -> " ! "+    "'" -> "'"+    "′" -> "'"+    "″" -> "''"+    "‴" -> "'''"+    _   | isWordLiteralSymbol s -> quoteText s+        | otherwise             -> s++isWordLiteralSymbol :: T.Text -> Bool+isWordLiteralSymbol s =+  not (T.null s) && T.all isWordLiteralChar s++isWordLiteralChar :: Char -> Bool+isWordLiteralChar c =+  (c >= 'A' && c <= 'Z') ||+  (c >= 'a' && c <= 'z') ||+  c == ' ' || c == '-'++quoteText :: T.Text -> T.Text+quoteText t = "\"" <> escapeQuotes t <> "\""++escapeQuotes :: T.Text -> T.Text+escapeQuotes = T.replace "\"" "\\\""++isQuotedText :: T.Text -> Bool+isQuotedText t =+  T.length t >= 2 && T.head t == '"' && T.last t == '"'++largeOpName :: Exp -> Maybe T.Text+largeOpName e =+  case e of+    ESymbol Op "\8747" -> Just "int"+    ESymbol Op "\8751" -> Just "iiint"+    ESymbol Op "\8721" -> Just "sum"+    ESymbol Op "\8719" -> Just "prod"+    ESymbol Op "\8899" -> Just "oper ∪"+    ESymbol Op "\8898" -> Just "oper ∩"+    ESymbol Op "∫"     -> Just "int"+    ESymbol Op "∭"     -> Just "iiint"+    ESymbol Op "∑"     -> Just "sum"+    ESymbol Op "∏"     -> Just "prod"+    ESymbol Op "⋃"     -> Just "oper ∪"+    ESymbol Op "⋂"     -> Just "oper ∩"+    _                  -> Nothing++limitOpName :: Exp -> Maybe T.Text+limitOpName e =+  case largeOpName e of+    Just op -> Just op+    Nothing ->+      case e of+        EMathOperator "lim"    -> Just "lim"+        EMathOperator "liminf" -> Just "liminf"+        EMathOperator "limsup" -> Just "limsup"+        EMathOperator "min"    -> Nothing+        EMathOperator "max"    -> Nothing+        _                      -> Nothing++centeredScriptOpName :: Exp -> Maybe T.Text+centeredScriptOpName e =+  case e of+    EMathOperator "min" -> Just "func min"+    EMathOperator "max" -> Just "func max"+    EMathOperator "det" -> Just "func det"+    EMathOperator "Pr"  -> Just "func Pr"+    EMathOperator "gcd" -> Just "func gcd"+    EMathOperator "lim" -> Nothing+    EMathOperator "liminf" -> Nothing+    EMathOperator "limsup" -> Nothing+    EMathOperator t     -> Just (renderMathOperator t)+    _                   -> Nothing+renderTextAtom :: TextType -> T.Text -> T.Text+renderTextAtom sty t =+  case sty of+    TextItalic    -> "ital " <> styleArg t+    TextBold      -> "bold " <> styleArg (quoteText t)+    TextMonospace -> "font fixed " <> quoteText t+    TextSansSerif -> "font sans " <> quoteText t+    _             -> quoteText t
src/Text/TeXMath/Writers/TeX.hs view
@@ -37,7 +37,7 @@ -- tr' x = trace (show x) x  -- | Transforms an expression tree to equivalent LaTeX with the default--- packages (amsmath and amssymb)+-- packages (amsmath, amssymb, and cancel) writeTeX :: [Exp] -> T.Text writeTeX = writeTeXWith defaultEnv @@ -262,6 +262,12 @@         tell [ControlSeq "\\boxed"]         tellGroup (writeExp e)       else writeExp e+writeExp (ECancel st e) = do+  case st of+    ForwardSlash -> tell [ControlSeq "\\cancel"]+    BackSlash -> tell [ControlSeq "\\bcancel"]+    XSlash -> tell [ControlSeq "\\xcancel"]+  tellGroup (writeExp e) writeExp (EScaled size e)   | case e of          (ESymbol Open _)  -> True
src/Text/TeXMath/Writers/Typst.hs view
@@ -25,7 +25,7 @@ import qualified Data.Text as T import Text.TeXMath.Types import qualified Text.TeXMath.Shared as S-import Typst.Symbols (typstSymbols)+import qualified Typst.Symbols as TS import Data.Generics (everywhere, mkT) import Data.Text (Text) import Data.Char (isDigit, isAlpha, isAscii)@@ -43,7 +43,11 @@ writeExps = go . map writeExp  where    go (a : b : es)-    | T.take 1 b == "'" -- avoid space before a prime #239+    | Just (bstart, _) <- T.uncons b+    , Just (astart, _) <- T.uncons a+    , Just (_, aend) <- T.unsnoc a+    , bstart == '\'' -- avoid space before a prime #239+      || bstart == '|' || aend == '|' || bstart == '\\' || astart == '\\' -- #286      = a <> go (b:es)    go (a : as)      = a <> if null as@@ -74,12 +78,12 @@     needsEscape '(' = True     needsEscape ')' = True     needsEscape '_' = True-    needsEscape '*' = True     needsEscape '^' = True     needsEscape '"' = True     needsEscape '/' = True     needsEscape '\\' = True     needsEscape ',' = True -- #242+    needsEscape ';' = True -- #275     needsEscape _ = False  escInQuotes :: Text -> Text@@ -142,11 +146,12 @@ writeExp (ESuper b e1) = writeExpB b <>   case S.toPrimes e1 of     Just ps -> ps-    _ -> "^" <> writeExpS e1-writeExp (ESubsup b e1 e2) = writeExpB b <> "_" <> writeExpS e1 <>-  case S.toPrimes e2 of-    Just ps -> ps-    _ -> "^" <> writeExpS e2+    Nothing -> "^" <> writeExpS e1+writeExp (ESubsup b e1 e2) =+  writeExpB b <>+    case S.toPrimes e2 of+      Just ps -> ps <> "_" <> writeExpS e1+      Nothing -> "_" <> writeExpS e1 <> "^" <> writeExpS e2 writeExp (EOver _ (EOver _ b (ESymbol TOver "\9182")) e1) =   "overbrace(" <> writeExp b <> ", " <> writeExp e1 <> ")" writeExp (EOver _ (EOver _ b (ESymbol TOver "\9140")) e1) =@@ -226,6 +231,9 @@        TextBoldFraktur -> "bold" <> inParens ("frak" <> inParens contents)        TextSansSerifItalic -> "italic" <> inParens ("sans" <> inParens contents) writeExp (EBoxed e) = "#box(stroke: black, inset: 3pt, [$ " <> writeExp e <> " $])"+writeExp (ECancel ForwardSlash e) = "cancel(" <> writeExp e <> ")"+writeExp (ECancel BackSlash e) = "cancel(" <> writeExp e <> ", inverted: #true)"+writeExp (ECancel XSlash e) = "cancel(" <> writeExp e <> ", cross: #true)" writeExp (EPhantom e) = "#hide[" <> writeExp e <> "]" writeExp (EScaled size e) =   "#scale(x: " <> tshow (floor (100 * size) :: Int) <>@@ -302,7 +310,10 @@ typstSymbolMap :: M.Map Text Text typstSymbolMap = M.fromList $   ("\776", "dot.double") -- see #231-  : [(s,name) | (name, _, s) <- typstSymbols]+  : [(s,name) | TS.Sym { TS.symName = name+                       , TS.symText = s+                       , TS.symDeprecation = Nothing+                       } <- TS.typstSymbols]  getAccentCommand :: Text -> Maybe Text getAccentCommand ac = do
+ test/reader/mml/menclose.test view
@@ -0,0 +1,23 @@+<<< mml+<?xml version="1.0" encoding="UTF-8"?>++<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">  +  <menclose notation="box">    +    <mn>0</mn>+  </menclose>+  <menclose notation="updiagonalstrike">+    <mn>1</mn>+  </menclose>+  <menclose notation="downdiagonalstrike">+    <mn>2</mn>+  </menclose>+  <menclose notation="updiagonalstrike downdiagonalstrike">+    <mn>3</mn>+  </menclose> +</math>+>>> native+[ EBoxed (ENumber "0")+, ECancel ForwardSlash (ENumber "1")+, ECancel BackSlash (ENumber "2")+, ECancel XSlash (ENumber "3")+]
+ test/reader/omml/cancel.test view
@@ -0,0 +1,86 @@+<<< omml+<?xml version="1.0" encoding="UTF-8"?>+<m:oMathPara>+  <m:oMath>+    <m:borderBox>+      <m:borderBoxPr>+        <m:hideTop m:val="1" />+        <m:hideBot m:val="1" />+        <m:hideLeft m:val="1" />+        <m:hideRight m:val="1" />+        <m:strikeBLTR m:val="1" />+      </m:borderBoxPr>+      <m:e>+        <m:r>+          <m:t>abc</m:t>+        </m:r>+      </m:e>+    </m:borderBox>+    <m:r>+      <m:t>d+</m:t>+    </m:r>+    <m:borderBox>+      <m:borderBoxPr>+        <m:hideTop m:val="1" />+        <m:hideBot m:val="1" />+        <m:hideLeft m:val="1" />+        <m:hideRight m:val="1" />+        <m:strikeTLBR m:val="1" />+      </m:borderBoxPr>+      <m:e>+        <m:sSup>+          <m:e>+            <m:r>+              <m:t>x</m:t>+            </m:r>+          </m:e>+          <m:sup>+            <m:r>+              <m:t>2</m:t>+            </m:r>+          </m:sup>+        </m:sSup>+      </m:e>+    </m:borderBox>+    <m:r>+      <m:t>=d+</m:t>+    </m:r>+    <m:borderBox>+      <m:borderBoxPr>+        <m:hideTop m:val="1" />+        <m:hideBot m:val="1" />+        <m:hideLeft m:val="1" />+        <m:hideRight m:val="1" />+        <m:strikeBLTR m:val="1" />+        <m:strikeTLBR m:val="1" />+      </m:borderBoxPr>+      <m:e>+        <m:sSup>+          <m:e>+            <m:r>+              <m:t>x</m:t>+            </m:r>+          </m:e>+          <m:sup>+            <m:r>+              <m:t>2</m:t>+            </m:r>+          </m:sup>+        </m:sSup>+      </m:e>+    </m:borderBox>+  </m:oMath>+</m:oMathPara>++>>> native+[ ECancel+    ForwardSlash+    (EGrouped [ EIdentifier "a" , EIdentifier "b" , EIdentifier "c" ])+, EIdentifier "d"+, ESymbol Bin "+"+, ECancel BackSlash (ESuper (EIdentifier "x") (ENumber "2"))+, ESymbol Rel "="+, EIdentifier "d"+, ESymbol Bin "+"+, ECancel XSlash (ESuper (EIdentifier "x") (ENumber "2"))+]
+ test/reader/tex/cancel.test view
@@ -0,0 +1,13 @@+<<< tex+\boxed{\cancel{x} + \bcancel{y} = \xcancel{z}}++>>> native+[ EBoxed+    (EGrouped+       [ ECancel ForwardSlash (EIdentifier "x")+       , ESymbol Bin "+"+       , ECancel BackSlash (EIdentifier "y")+       , ESymbol Rel "="+       , ECancel XSlash (EIdentifier "z")+       ])+]
test/reader/tex/macros.test view
@@ -9,9 +9,9 @@ \theta% } % comment-\newcommand{\aaa}{\b{2}}+\newcommand{\aaa}{\bb{2}} \renewcommand{\phi}{\aaa}-\newcommand{\b}[1]{#1}+\newcommand{\bb}[1]{#1}  \newenvironment{ary} {\begin{array}{cc}
test/regression/245b.test view
@@ -102,9 +102,9 @@ upright("^\\backprime") x^prime.rev\ upright("^\\backdprime") x^prime.double.rev\ upright("^\\backtrprime") x^prime.triple.rev\-upright("^\\hyphenbullet") x^(⁃)\-upright("^\\ast") x^(\*)\+upright("^\\hyphenbullet") x^bullet.hyph\+upright("^\\ast") x^(*)\ upright("^\\vysmwhtcircle") x^compose\ upright("^\\vysmblkcircle") x^circle.filled.small\-upright("^\\llcorner") x^\⌞\-upright("^\\ulcorner") x^\⌜\+upright("^\\llcorner") x^corner.l.b\+upright("^\\ulcorner") x^corner.l.t\
+ test/regression/273.test view
@@ -0,0 +1,5 @@+<<< tex+a_i'+>>> native+[ ESubsup (EIdentifier "a") (EIdentifier "i") (ESymbol Pun "\8242")+]
+ test/regression/275.test view
@@ -0,0 +1,14 @@+<<< native+[ EDelimited+    "{"+    ""+    [ Right+        (EArray+           [ AlignLeft , AlignLeft ]+           [ [ [ EIdentifier "a" ] , [ ESymbol Pun ";" ] ]+           , [ [ EIdentifier "b" ] , [ EIdentifier "c" ] ]+           ])+    ]+]+>>> typst+cases(delim: "{", a & \;, b & c)
+ test/regression/276.test view
@@ -0,0 +1,9 @@+<<< tex+x = y\text.x+>>> native+[ EIdentifier "x"+, ESymbol Rel "="+, EIdentifier "y"+, EText TextNormal "."+, EIdentifier "x"+]
+ test/regression/277.test view
@@ -0,0 +1,4 @@+<<< tex+\text{\:\;}+>>> native+[ ESpace (2 % 9) , ESpace (5 % 18) ]
+ test/regression/278.test view
@@ -0,0 +1,4 @@+<<< omml+<m:oMath><m:r><w:ins w:id="2" w:author="Tron Su" w:date="2025-12-16T22:06:00Z" w16du:dateUtc="2025-12-16T14:06:00Z"><m:rPr><m:nor/></m:rPr><w:rPr><w:rFonts w:cs="Times New Roman"/><w:sz w:val="28"/></w:rPr><m:t>∆</m:t></w:ins></m:r><m:r><w:ins w:id="3" w:author="Tron Su" w:date="2025-12-16T22:06:00Z" w16du:dateUtc="2025-12-16T14:06:00Z"><w:rPr><w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/></w:rPr><m:t>F</m:t></w:ins></m:r><m:r><w:ins w:id="4" w:author="Tron Su" w:date="2025-12-16T22:06:00Z" w16du:dateUtc="2025-12-16T14:06:00Z"><m:rPr><m:sty m:val="p"/></m:rPr><w:rPr><w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/></w:rPr><m:t>/</m:t></w:ins></m:r><m:sSub><m:sSubPr><m:ctrlPr><w:ins w:id="5" w:author="Tron Su" w:date="2025-12-16T22:06:00Z" w16du:dateUtc="2025-12-16T14:06:00Z"><w:rPr><w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/></w:rPr></w:ins></m:ctrlPr></m:sSubPr><m:e><m:r><w:ins w:id="6" w:author="Tron Su" w:date="2025-12-16T22:06:00Z" w16du:dateUtc="2025-12-16T14:06:00Z"><w:rPr><w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/></w:rPr><m:t>F</m:t></w:ins></m:r></m:e><m:sub><m:r><w:ins w:id="7" w:author="Tron Su" w:date="2025-12-16T22:06:00Z" w16du:dateUtc="2025-12-16T14:06:00Z"><w:rPr><w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/></w:rPr><m:t>0</m:t></w:ins></m:r></m:sub></m:sSub></m:oMath>+>>> tex+\mathrm{\Delta}F/F_{0}
+ test/regression/280.test view
@@ -0,0 +1,13 @@+<<< tex+\boldsymbol{\Gamma + b + \alpha}+>>> mml+<?xml version='1.0' ?>+<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">+  <mrow>+    <mi mathvariant="bold">𝚪</mi>+    <mo mathvariant="bold">+</mo>+    <mi mathvariant="bold-italic">𝒃</mi>+    <mo mathvariant="bold">+</mo>+    <mi mathvariant="bold-italic">𝜶</mi>+  </mrow>+</math>
+ test/regression/280b.test view
@@ -0,0 +1,41 @@+<<< tex+\boldsymbol{\Gamma + b + \alpha}+>>> omml+<?xml version='1.0' ?>+<m:oMathPara>+  <m:oMathParaPr>+    <m:jc m:val="center" />+  </m:oMathParaPr>+  <m:oMath>+    <m:r>+      <m:rPr>+        <m:sty m:val="b" />+      </m:rPr>+      <m:t>Γ</m:t>+    </m:r>+    <m:r>+      <m:rPr>+        <m:sty m:val="b" />+      </m:rPr>+      <m:t>+</m:t>+    </m:r>+    <m:r>+      <m:rPr>+        <m:sty m:val="bi" />+      </m:rPr>+      <m:t>b</m:t>+    </m:r>+    <m:r>+      <m:rPr>+        <m:sty m:val="b" />+      </m:rPr>+      <m:t>+</m:t>+    </m:r>+    <m:r>+      <m:rPr>+        <m:sty m:val="bi" />+      </m:rPr>+      <m:t>α</m:t>+    </m:r>+  </m:oMath>+</m:oMathPara>
+ test/roundtrip/cancel.native view
@@ -0,0 +1,6 @@+[ ECancel ForwardSlash (EIdentifier "x")+, ESymbol Bin "+"+, ECancel BackSlash (EIdentifier "y")+, ESymbol Rel "="+, ECancel XSlash (EIdentifier "z")+]
test/test-texmath.hs view
@@ -37,6 +37,7 @@   mmlWriterTests <- getFiles "test/writer/mml"   ommlWriterTests <- getFiles "test/writer/omml"   eqnWriterTests <- getFiles "test/writer/eqn"+  starmathWriterTests <- getFiles "test/writer/starmath"   typstWriterTests <- getFiles "test/writer/typst"   regressionTests <- getFiles "test/regression"   roundtripTests <- getFiles "test/roundtrip"@@ -63,6 +64,7 @@              , testGroup "mml" $ map toGoldenTest mmlWriterTests              , testGroup "omml" $ map toGoldenTest ommlWriterTests              , testGroup "eqn" $ map toGoldenTest eqnWriterTests+             , testGroup "starmath" $ map toGoldenTest starmathWriterTests              , testGroup "typst" $ map toGoldenTest typstWriterTests              ],              testGroup "regression" $ map toGoldenTest regressionTests@@ -148,6 +150,8 @@           , ("tex", writeTeX)           , ("omml", T.pack . ppTopElement . writeOMML DisplayBlock)           , ("eqn", writeEqn DisplayBlock)+          , ("starmath", writeStarMath DisplayBlock)+          , ("starmath-inline", writeStarMath DisplayInline)           , ("typst", writeTypst DisplayBlock)           , ("native", T.pack . ppShow)           , ("pandoc", maybe "" (T.pack . ppShow) . writePandoc DisplayBlock)
+ test/writer/eqn/cancel.test view
@@ -0,0 +1,8 @@+<<< native+[ EBoxed (ENumber "0")+, ECancel ForwardSlash (ENumber "1")+, ECancel BackSlash (ENumber "2")+, ECancel XSlash (ENumber "3")+]+>>> eqn+0 1 2 3
test/writer/mml/00000_C0_Controls_and_Basic_Latin.test view
@@ -224,7 +224,7 @@         <mi>*</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi></mi>+        <mi mathvariant="normal"></mi>       </mtd>       <mtd columnalign="center" style="text-align: center">         <mi>0</mi>
test/writer/mml/08.test view
@@ -74,7 +74,7 @@     </msup>     <mo>,</mo>     <mrow>-      <mi>arg</mi>+      <mi mathvariant="normal">arg</mi>       <mo>&#8289;</mo>     </mrow>     <mrow>@@ -88,7 +88,7 @@     <mo>=</mo>     <mi>n</mi>     <mrow>-      <mi>arg</mi>+      <mi mathvariant="normal">arg</mi>       <mo>&#8289;</mo>     </mrow>     <mrow>
test/writer/mml/09.test view
@@ -19,7 +19,7 @@ <math display="block" xmlns="http://www.w3.org/1998/Math/MathML">   <mrow>     <munder>-      <mi>lim</mi>+      <mi mathvariant="normal">lim</mi>       <mrow>         <mi>z</mi>         <mo>→</mo>
test/writer/mml/10.test view
@@ -77,7 +77,7 @@     <mfrac>       <mrow>         <mrow>-          <mi>sin</mi>+          <mi mathvariant="normal">sin</mi>           <mo>&#8289;</mo>         </mrow>         <mrow>
test/writer/mml/20.test view
@@ -119,120 +119,120 @@ <?xml version='1.0' ?> <math display="block" xmlns="http://www.w3.org/1998/Math/MathML">   <mrow>-    <mi>𝒜</mi>-    <mi>ℬ</mi>-    <mi>𝒞</mi>-    <mi>𝒟</mi>-    <mi>ℰ</mi>-    <mi>ℱ</mi>-    <mi>𝒢</mi>-    <mi>ℋ</mi>-    <mi>ℐ</mi>-    <mi>𝒥</mi>-    <mi>𝒦</mi>-    <mi>ℒ</mi>-    <mi>ℳ</mi>-    <mi>𝒩</mi>-    <mi>𝒪</mi>-    <mi>𝒫</mi>-    <mi>𝒬</mi>-    <mi>ℛ</mi>-    <mi>𝒮</mi>-    <mi>𝒯</mi>-    <mi>𝒰</mi>-    <mi>𝒱</mi>-    <mi>𝒲</mi>-    <mi>𝒳</mi>-    <mi>𝒴</mi>-    <mi>𝒵</mi>-    <mi>𝒶</mi>-    <mi>𝒷</mi>-    <mi>𝒸</mi>-    <mi>𝒹</mi>-    <mi>ℯ</mi>-    <mi>𝒻</mi>-    <mi>ℊ</mi>-    <mi>𝒽</mi>-    <mi>𝒾</mi>-    <mi>𝒿</mi>-    <mi>𝓀</mi>-    <mi>𝓁</mi>-    <mi>𝓂</mi>-    <mi>𝓃</mi>-    <mi>ℴ</mi>-    <mi>𝓅</mi>-    <mi>𝓆</mi>-    <mi>𝓇</mi>-    <mi>𝓈</mi>-    <mi>𝓉</mi>-    <mi>𝓊</mi>-    <mi>𝓋</mi>-    <mi>𝓌</mi>-    <mi>𝓍</mi>-    <mi>𝓎</mi>-    <mi>𝓏</mi>-    <mi>𝔸</mi>-    <mi>𝔹</mi>-    <mi>ℂ</mi>-    <mi>𝔻</mi>-    <mi>𝔼</mi>-    <mi>𝔽</mi>-    <mi>𝔾</mi>-    <mi>ℍ</mi>-    <mi>𝕀</mi>-    <mi>𝕁</mi>-    <mi>𝕂</mi>-    <mi>𝕃</mi>-    <mi>𝕄</mi>-    <mi>ℕ</mi>-    <mi>𝕆</mi>-    <mi>ℙ</mi>-    <mi>ℚ</mi>-    <mi>ℝ</mi>-    <mi>𝕊</mi>-    <mi>𝕋</mi>-    <mi>𝕌</mi>-    <mi>𝕍</mi>-    <mi>𝕎</mi>-    <mi>𝕏</mi>-    <mi>𝕐</mi>-    <mi>ℤ</mi>-    <mi>𝕒</mi>-    <mi>𝕓</mi>-    <mi>𝕔</mi>-    <mi>𝕕</mi>-    <mi>𝕖</mi>-    <mi>𝕗</mi>-    <mi>𝕘</mi>-    <mi>𝕙</mi>-    <mi>𝕚</mi>-    <mi>𝕛</mi>-    <mi>𝕜</mi>-    <mi>𝕝</mi>-    <mi>𝕞</mi>-    <mi>𝕟</mi>-    <mi>𝕠</mi>-    <mi>𝕡</mi>-    <mi>𝕢</mi>-    <mi>𝕣</mi>-    <mi>𝕤</mi>-    <mi>𝕥</mi>-    <mi>𝕦</mi>-    <mi>𝕧</mi>-    <mi>𝕨</mi>-    <mi>𝕩</mi>-    <mi>𝕪</mi>-    <mi>𝕫</mi>-    <mn>𝟘</mn>-    <mn>𝟙</mn>-    <mn>𝟚</mn>-    <mn>𝟛</mn>-    <mn>𝟜</mn>-    <mn>𝟝</mn>-    <mn>𝟞</mn>-    <mn>𝟟</mn>-    <mn>𝟠</mn>-    <mn>𝟡</mn>-    <mn>𝟘</mn>+    <mi mathvariant="script">𝒜</mi>+    <mi mathvariant="script">ℬ</mi>+    <mi mathvariant="script">𝒞</mi>+    <mi mathvariant="script">𝒟</mi>+    <mi mathvariant="script">ℰ</mi>+    <mi mathvariant="script">ℱ</mi>+    <mi mathvariant="script">𝒢</mi>+    <mi mathvariant="script">ℋ</mi>+    <mi mathvariant="script">ℐ</mi>+    <mi mathvariant="script">𝒥</mi>+    <mi mathvariant="script">𝒦</mi>+    <mi mathvariant="script">ℒ</mi>+    <mi mathvariant="script">ℳ</mi>+    <mi mathvariant="script">𝒩</mi>+    <mi mathvariant="script">𝒪</mi>+    <mi mathvariant="script">𝒫</mi>+    <mi mathvariant="script">𝒬</mi>+    <mi mathvariant="script">ℛ</mi>+    <mi mathvariant="script">𝒮</mi>+    <mi mathvariant="script">𝒯</mi>+    <mi mathvariant="script">𝒰</mi>+    <mi mathvariant="script">𝒱</mi>+    <mi mathvariant="script">𝒲</mi>+    <mi mathvariant="script">𝒳</mi>+    <mi mathvariant="script">𝒴</mi>+    <mi mathvariant="script">𝒵</mi>+    <mi mathvariant="script">𝒶</mi>+    <mi mathvariant="script">𝒷</mi>+    <mi mathvariant="script">𝒸</mi>+    <mi mathvariant="script">𝒹</mi>+    <mi mathvariant="script">ℯ</mi>+    <mi mathvariant="script">𝒻</mi>+    <mi mathvariant="script">ℊ</mi>+    <mi mathvariant="script">𝒽</mi>+    <mi mathvariant="script">𝒾</mi>+    <mi mathvariant="script">𝒿</mi>+    <mi mathvariant="script">𝓀</mi>+    <mi mathvariant="script">𝓁</mi>+    <mi mathvariant="script">𝓂</mi>+    <mi mathvariant="script">𝓃</mi>+    <mi mathvariant="script">ℴ</mi>+    <mi mathvariant="script">𝓅</mi>+    <mi mathvariant="script">𝓆</mi>+    <mi mathvariant="script">𝓇</mi>+    <mi mathvariant="script">𝓈</mi>+    <mi mathvariant="script">𝓉</mi>+    <mi mathvariant="script">𝓊</mi>+    <mi mathvariant="script">𝓋</mi>+    <mi mathvariant="script">𝓌</mi>+    <mi mathvariant="script">𝓍</mi>+    <mi mathvariant="script">𝓎</mi>+    <mi mathvariant="script">𝓏</mi>+    <mi mathvariant="double-struck">𝔸</mi>+    <mi mathvariant="double-struck">𝔹</mi>+    <mi mathvariant="double-struck">ℂ</mi>+    <mi mathvariant="double-struck">𝔻</mi>+    <mi mathvariant="double-struck">𝔼</mi>+    <mi mathvariant="double-struck">𝔽</mi>+    <mi mathvariant="double-struck">𝔾</mi>+    <mi mathvariant="double-struck">ℍ</mi>+    <mi mathvariant="double-struck">𝕀</mi>+    <mi mathvariant="double-struck">𝕁</mi>+    <mi mathvariant="double-struck">𝕂</mi>+    <mi mathvariant="double-struck">𝕃</mi>+    <mi mathvariant="double-struck">𝕄</mi>+    <mi mathvariant="double-struck">ℕ</mi>+    <mi mathvariant="double-struck">𝕆</mi>+    <mi mathvariant="double-struck">ℙ</mi>+    <mi mathvariant="double-struck">ℚ</mi>+    <mi mathvariant="double-struck">ℝ</mi>+    <mi mathvariant="double-struck">𝕊</mi>+    <mi mathvariant="double-struck">𝕋</mi>+    <mi mathvariant="double-struck">𝕌</mi>+    <mi mathvariant="double-struck">𝕍</mi>+    <mi mathvariant="double-struck">𝕎</mi>+    <mi mathvariant="double-struck">𝕏</mi>+    <mi mathvariant="double-struck">𝕐</mi>+    <mi mathvariant="double-struck">ℤ</mi>+    <mi mathvariant="double-struck">𝕒</mi>+    <mi mathvariant="double-struck">𝕓</mi>+    <mi mathvariant="double-struck">𝕔</mi>+    <mi mathvariant="double-struck">𝕕</mi>+    <mi mathvariant="double-struck">𝕖</mi>+    <mi mathvariant="double-struck">𝕗</mi>+    <mi mathvariant="double-struck">𝕘</mi>+    <mi mathvariant="double-struck">𝕙</mi>+    <mi mathvariant="double-struck">𝕚</mi>+    <mi mathvariant="double-struck">𝕛</mi>+    <mi mathvariant="double-struck">𝕜</mi>+    <mi mathvariant="double-struck">𝕝</mi>+    <mi mathvariant="double-struck">𝕞</mi>+    <mi mathvariant="double-struck">𝕟</mi>+    <mi mathvariant="double-struck">𝕠</mi>+    <mi mathvariant="double-struck">𝕡</mi>+    <mi mathvariant="double-struck">𝕢</mi>+    <mi mathvariant="double-struck">𝕣</mi>+    <mi mathvariant="double-struck">𝕤</mi>+    <mi mathvariant="double-struck">𝕥</mi>+    <mi mathvariant="double-struck">𝕦</mi>+    <mi mathvariant="double-struck">𝕧</mi>+    <mi mathvariant="double-struck">𝕨</mi>+    <mi mathvariant="double-struck">𝕩</mi>+    <mi mathvariant="double-struck">𝕪</mi>+    <mi mathvariant="double-struck">𝕫</mi>+    <mn mathvariant="double-struck">𝟘</mn>+    <mn mathvariant="double-struck">𝟙</mn>+    <mn mathvariant="double-struck">𝟚</mn>+    <mn mathvariant="double-struck">𝟛</mn>+    <mn mathvariant="double-struck">𝟜</mn>+    <mn mathvariant="double-struck">𝟝</mn>+    <mn mathvariant="double-struck">𝟞</mn>+    <mn mathvariant="double-struck">𝟟</mn>+    <mn mathvariant="double-struck">𝟠</mn>+    <mn mathvariant="double-struck">𝟡</mn>+    <mn mathvariant="double-struck">𝟘</mn>   </mrow> </math>
test/writer/mml/22.test view
@@ -313,12 +313,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝐀</mi>-          <mi>𝐁</mi>-          <mi>𝐂</mi>-          <mi>𝐚</mi>-          <mi>𝐛</mi>-          <mi>𝐜</mi>+          <mi mathvariant="bold-italic">𝑨</mi>+          <mi mathvariant="bold-italic">𝑩</mi>+          <mi mathvariant="bold-italic">𝑪</mi>+          <mi mathvariant="bold-italic">𝒂</mi>+          <mi mathvariant="bold-italic">𝒃</mi>+          <mi mathvariant="bold-italic">𝒄</mi>         </mrow>       </mtd>     </mtr>@@ -328,12 +328,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝐀</mi>-          <mi>𝐁</mi>-          <mi>𝐂</mi>-          <mi>𝐚</mi>-          <mi>𝐛</mi>-          <mi>𝐜</mi>+          <mi mathvariant="bold-italic">𝑨</mi>+          <mi mathvariant="bold-italic">𝑩</mi>+          <mi mathvariant="bold-italic">𝑪</mi>+          <mi mathvariant="bold-italic">𝒂</mi>+          <mi mathvariant="bold-italic">𝒃</mi>+          <mi mathvariant="bold-italic">𝒄</mi>         </mrow>       </mtd>     </mtr>@@ -351,12 +351,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝐴</mi>-          <mi>𝐵</mi>-          <mi>𝐶</mi>-          <mi>𝑎</mi>-          <mi>𝑏</mi>-          <mi>𝑐</mi>+          <mi mathvariant="italic">𝐴</mi>+          <mi mathvariant="italic">𝐵</mi>+          <mi mathvariant="italic">𝐶</mi>+          <mi mathvariant="italic">𝑎</mi>+          <mi mathvariant="italic">𝑏</mi>+          <mi mathvariant="italic">𝑐</mi>         </mrow>       </mtd>     </mtr>@@ -374,12 +374,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝙰</mi>-          <mi>𝙱</mi>-          <mi>𝙲</mi>-          <mi>𝚊</mi>-          <mi>𝚋</mi>-          <mi>𝚌</mi>+          <mi mathvariant="monospace">𝙰</mi>+          <mi mathvariant="monospace">𝙱</mi>+          <mi mathvariant="monospace">𝙲</mi>+          <mi mathvariant="monospace">𝚊</mi>+          <mi mathvariant="monospace">𝚋</mi>+          <mi mathvariant="monospace">𝚌</mi>         </mrow>       </mtd>     </mtr>@@ -397,12 +397,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝖠</mi>-          <mi>𝖡</mi>-          <mi>𝖢</mi>-          <mi>𝖺</mi>-          <mi>𝖻</mi>-          <mi>𝖼</mi>+          <mi mathvariant="sans-serif">𝖠</mi>+          <mi mathvariant="sans-serif">𝖡</mi>+          <mi mathvariant="sans-serif">𝖢</mi>+          <mi mathvariant="sans-serif">𝖺</mi>+          <mi mathvariant="sans-serif">𝖻</mi>+          <mi mathvariant="sans-serif">𝖼</mi>         </mrow>       </mtd>     </mtr>@@ -412,12 +412,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝖠</mi>-          <mi>𝖡</mi>-          <mi>𝖢</mi>-          <mi>𝖺</mi>-          <mi>𝖻</mi>-          <mi>𝖼</mi>+          <mi mathvariant="sans-serif">𝖠</mi>+          <mi mathvariant="sans-serif">𝖡</mi>+          <mi mathvariant="sans-serif">𝖢</mi>+          <mi mathvariant="sans-serif">𝖺</mi>+          <mi mathvariant="sans-serif">𝖻</mi>+          <mi mathvariant="sans-serif">𝖼</mi>         </mrow>       </mtd>     </mtr>@@ -427,12 +427,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝔸</mi>-          <mi>𝔹</mi>-          <mi>ℂ</mi>-          <mi>𝕒</mi>-          <mi>𝕓</mi>-          <mi>𝕔</mi>+          <mi mathvariant="double-struck">𝔸</mi>+          <mi mathvariant="double-struck">𝔹</mi>+          <mi mathvariant="double-struck">ℂ</mi>+          <mi mathvariant="double-struck">𝕒</mi>+          <mi mathvariant="double-struck">𝕓</mi>+          <mi mathvariant="double-struck">𝕔</mi>         </mrow>       </mtd>     </mtr>@@ -442,12 +442,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝒜</mi>-          <mi>ℬ</mi>-          <mi>𝒞</mi>-          <mi>𝒶</mi>-          <mi>𝒷</mi>-          <mi>𝒸</mi>+          <mi mathvariant="script">𝒜</mi>+          <mi mathvariant="script">ℬ</mi>+          <mi mathvariant="script">𝒞</mi>+          <mi mathvariant="script">𝒶</mi>+          <mi mathvariant="script">𝒷</mi>+          <mi mathvariant="script">𝒸</mi>         </mrow>       </mtd>     </mtr>@@ -457,12 +457,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝒜</mi>-          <mi>ℬ</mi>-          <mi>𝒞</mi>-          <mi>𝒶</mi>-          <mi>𝒷</mi>-          <mi>𝒸</mi>+          <mi mathvariant="script">𝒜</mi>+          <mi mathvariant="script">ℬ</mi>+          <mi mathvariant="script">𝒞</mi>+          <mi mathvariant="script">𝒶</mi>+          <mi mathvariant="script">𝒷</mi>+          <mi mathvariant="script">𝒸</mi>         </mrow>       </mtd>     </mtr>@@ -472,12 +472,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝔄</mi>-          <mi>𝔅</mi>-          <mi>ℭ</mi>-          <mi>𝔞</mi>-          <mi>𝔟</mi>-          <mi>𝔠</mi>+          <mi mathvariant="fraktur">𝔄</mi>+          <mi mathvariant="fraktur">𝔅</mi>+          <mi mathvariant="fraktur">ℭ</mi>+          <mi mathvariant="fraktur">𝔞</mi>+          <mi mathvariant="fraktur">𝔟</mi>+          <mi mathvariant="fraktur">𝔠</mi>         </mrow>       </mtd>     </mtr>@@ -487,12 +487,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝑨</mi>-          <mi>𝑩</mi>-          <mi>𝑪</mi>-          <mi>𝒂</mi>-          <mi>𝒃</mi>-          <mi>𝒄</mi>+          <mi mathvariant="bold-italic">𝑨</mi>+          <mi mathvariant="bold-italic">𝑩</mi>+          <mi mathvariant="bold-italic">𝑪</mi>+          <mi mathvariant="bold-italic">𝒂</mi>+          <mi mathvariant="bold-italic">𝒃</mi>+          <mi mathvariant="bold-italic">𝒄</mi>         </mrow>       </mtd>     </mtr>@@ -502,12 +502,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝗔</mi>-          <mi>𝗕</mi>-          <mi>𝗖</mi>-          <mi>𝗮</mi>-          <mi>𝗯</mi>-          <mi>𝗰</mi>+          <mi mathvariant="bold-sans-serif">𝗔</mi>+          <mi mathvariant="bold-sans-serif">𝗕</mi>+          <mi mathvariant="bold-sans-serif">𝗖</mi>+          <mi mathvariant="bold-sans-serif">𝗮</mi>+          <mi mathvariant="bold-sans-serif">𝗯</mi>+          <mi mathvariant="bold-sans-serif">𝗰</mi>         </mrow>       </mtd>     </mtr>@@ -517,12 +517,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝘼</mi>-          <mi>𝘽</mi>-          <mi>𝘾</mi>-          <mi>𝙖</mi>-          <mi>𝙗</mi>-          <mi>𝙘</mi>+          <mi mathvariant="sans-serif-bold-italic">𝘼</mi>+          <mi mathvariant="sans-serif-bold-italic">𝘽</mi>+          <mi mathvariant="sans-serif-bold-italic">𝘾</mi>+          <mi mathvariant="sans-serif-bold-italic">𝙖</mi>+          <mi mathvariant="sans-serif-bold-italic">𝙗</mi>+          <mi mathvariant="sans-serif-bold-italic">𝙘</mi>         </mrow>       </mtd>     </mtr>@@ -532,12 +532,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝓐</mi>-          <mi>𝓑</mi>-          <mi>𝓒</mi>-          <mi>𝓪</mi>-          <mi>𝓫</mi>-          <mi>𝓬</mi>+          <mi mathvariant="bold-script">𝓐</mi>+          <mi mathvariant="bold-script">𝓑</mi>+          <mi mathvariant="bold-script">𝓒</mi>+          <mi mathvariant="bold-script">𝓪</mi>+          <mi mathvariant="bold-script">𝓫</mi>+          <mi mathvariant="bold-script">𝓬</mi>         </mrow>       </mtd>     </mtr>@@ -547,12 +547,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝕬</mi>-          <mi>𝕭</mi>-          <mi>𝕮</mi>-          <mi>𝖆</mi>-          <mi>𝖇</mi>-          <mi>𝖈</mi>+          <mi mathvariant="bold-fraktur">𝕬</mi>+          <mi mathvariant="bold-fraktur">𝕭</mi>+          <mi mathvariant="bold-fraktur">𝕮</mi>+          <mi mathvariant="bold-fraktur">𝖆</mi>+          <mi mathvariant="bold-fraktur">𝖇</mi>+          <mi mathvariant="bold-fraktur">𝖈</mi>         </mrow>       </mtd>     </mtr>@@ -562,12 +562,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝓐</mi>-          <mi>𝓑</mi>-          <mi>𝓒</mi>-          <mi>𝓪</mi>-          <mi>𝓫</mi>-          <mi>𝓬</mi>+          <mi mathvariant="bold-script">𝓐</mi>+          <mi mathvariant="bold-script">𝓑</mi>+          <mi mathvariant="bold-script">𝓒</mi>+          <mi mathvariant="bold-script">𝓪</mi>+          <mi mathvariant="bold-script">𝓫</mi>+          <mi mathvariant="bold-script">𝓬</mi>         </mrow>       </mtd>     </mtr>@@ -577,12 +577,12 @@       </mtd>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝘈</mi>-          <mi>𝘉</mi>-          <mi>𝘊</mi>-          <mi>𝘢</mi>-          <mi>𝘣</mi>-          <mi>𝘤</mi>+          <mi mathvariant="sans-serif-italic">𝘈</mi>+          <mi mathvariant="sans-serif-italic">𝘉</mi>+          <mi mathvariant="sans-serif-italic">𝘊</mi>+          <mi mathvariant="sans-serif-italic">𝘢</mi>+          <mi mathvariant="sans-serif-italic">𝘣</mi>+          <mi mathvariant="sans-serif-italic">𝘤</mi>         </mrow>       </mtd>     </mtr>
test/writer/mml/a.test view
@@ -138,7 +138,7 @@         <mtext mathvariant="normal">acE</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>∾̳</mi>+        <mi mathvariant="normal">∾̳</mi>       </mtd>     </mtr>     <mtr>
test/writer/mml/b.test view
@@ -577,7 +577,7 @@         <mtext mathvariant="normal">bne</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>=⃥</mi>+        <mi mathvariant="normal">=⃥</mi>       </mtd>     </mtr>     <mtr>@@ -585,7 +585,7 @@         <mtext mathvariant="normal">bnequiv</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≡⃥</mi>+        <mi mathvariant="normal">≡⃥</mi>       </mtd>     </mtr>     <mtr>
test/writer/mml/binomial_coefficient.test view
@@ -43,7 +43,7 @@ <?xml version='1.0' ?> <math display="block" xmlns="http://www.w3.org/1998/Math/MathML">   <mrow>-    <mi>𝐂</mi>+    <mi mathvariant="bold-italic">𝑪</mi>     <mrow>       <mo stretchy="true" form="prefix">(</mo>       <mi>n</mi>@@ -53,7 +53,7 @@     </mrow>     <mo>=</mo>     <msubsup>-      <mi>𝐂</mi>+      <mi mathvariant="bold-italic">𝑪</mi>       <mi>k</mi>       <mi>n</mi>     </msubsup>@@ -63,7 +63,7 @@       <mi>n</mi>     </msub>     <msub>-      <mi>𝐂</mi>+      <mi mathvariant="bold-italic">𝑪</mi>       <mi>k</mi>     </msub>     <mo>=</mo>
test/writer/mml/c.test view
@@ -237,7 +237,7 @@         <mtext mathvariant="normal">caps</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>∩︀</mi>+        <mi mathvariant="normal">∩︀</mi>       </mtd>     </mtr>     <mtr>@@ -1037,7 +1037,7 @@         <mtext mathvariant="normal">cups</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>∪︀</mi>+        <mi mathvariant="normal">∪︀</mi>       </mtd>     </mtr>     <mtr>
test/writer/mml/complex3.test view
@@ -7734,11 +7734,11 @@             <mo>+</mo>             <mrow>               <mrow>-                <mi>sin</mi>+                <mi mathvariant="normal">sin</mi>                 <mo>&#8289;</mo>               </mrow>               <mrow>-                <mi>cos</mi>+                <mi mathvariant="normal">cos</mi>                 <mo>&#8289;</mo>               </mrow>               <mi>θ</mi>@@ -7902,7 +7902,7 @@         <mrow>           <mrow>             <munder>-              <mi>lim</mi>+              <mi mathvariant="normal">lim</mi>               <mrow>                 <mi>n</mi>                 <mo>→</mo>@@ -9135,7 +9135,7 @@                       <mi>&#8290;</mi>                       <mrow>                         <mrow>-                          <mi>sin</mi>+                          <mi mathvariant="normal">sin</mi>                           <mo>&#8289;</mo>                         </mrow>                         <mi>y</mi>@@ -9193,7 +9193,7 @@           <mo>=</mo>           <mrow>             <mrow>-              <mi>sin</mi>+              <mi mathvariant="normal">sin</mi>               <mo>&#8289;</mo>             </mrow>             <mi>x</mi>@@ -10385,7 +10385,7 @@               <mi>&#8290;</mi>               <mrow>                 <mrow>-                  <mi>cos</mi>+                  <mi mathvariant="normal">cos</mi>                   <mo>&#8289;</mo>                 </mrow>                 <mrow>@@ -10437,7 +10437,7 @@             <mi>&#8290;</mi>             <mrow>               <mrow>-                <mi>tan</mi>+                <mi mathvariant="normal">tan</mi>                 <mo>&#8289;</mo>               </mrow>               <mrow>@@ -11336,7 +11336,7 @@                   </msub>                   <mo>=</mo>                   <mrow>-                    <mi>𝒩</mi>+                    <mi mathvariant="script">𝒩</mi>                     <mo>&#8289;</mo>                     <mrow>                       <mo stretchy="false" form="prefix">(</mo>@@ -11364,7 +11364,7 @@             <mtd columnalign="center" style="text-align: center">               <mrow>                 <mrow>-                  <mi>sin</mi>+                  <mi mathvariant="normal">sin</mi>                   <mo>&#8289;</mo>                 </mrow>                 <mi>θ</mi>@@ -11375,7 +11375,7 @@             <mtd columnalign="center" style="text-align: center">               <mrow>                 <mrow>-                  <mi>cos</mi>+                  <mi mathvariant="normal">cos</mi>                   <mo>&#8289;</mo>                 </mrow>                 <mi>γ</mi>@@ -11510,7 +11510,7 @@         <mrow>           <mrow>             <mrow>-              <mi>∇×</mi>+              <mi mathvariant="normal">∇×</mi>               <mo>&#8289;</mo>             </mrow>             <mi>F</mi>@@ -11525,7 +11525,7 @@       <mtd columnalign="center" style="text-align: center">         <mrow>           <mrow>-            <mi>∇·</mi>+            <mi mathvariant="normal">∇·</mi>             <mo>&#8289;</mo>           </mrow>           <mi>F</mi>@@ -11538,7 +11538,7 @@         <mrow>           <mrow>             <mrow>-              <mi>∇·∇</mi>+              <mi mathvariant="normal">∇·∇</mi>               <mo>&#8289;</mo>             </mrow>             <mi>F</mi>@@ -11566,7 +11566,7 @@         <mrow>           <mrow>             <mrow>-              <mi>∇×</mi>+              <mi mathvariant="normal">∇×</mi>               <mo>&#8289;</mo>             </mrow>             <mrow>@@ -11633,7 +11633,7 @@         <mrow>           <mrow>             <mrow>-              <mi>∇×</mi>+              <mi mathvariant="normal">∇×</mi>               <mo>&#8289;</mo>             </mrow>             <mrow>@@ -11695,12 +11695,12 @@       <mtd columnalign="center" style="text-align: center">         <mrow>           <mrow>-            <mi>𝐚</mi>+            <mi mathvariant="bold-italic">𝒂</mi>             <mo>+</mo>-            <mi>𝐛</mi>+            <mi mathvariant="bold-italic">𝒃</mi>           </mrow>           <mo>=</mo>-          <mi>𝐜</mi>+          <mi mathvariant="bold-italic">𝒄</mi>         </mrow>       </mtd>       <mtd columnalign="center" style="text-align: center" />@@ -11726,7 +11726,7 @@               <mo>&#8289;</mo>               <mrow>                 <mo stretchy="false" form="prefix">(</mo>-                <mi>𝐱</mi>+                <mi mathvariant="bold-italic">𝒙</mi>                 <mo stretchy="false" form="postfix">)</mo>               </mrow>             </mrow>@@ -11743,21 +11743,21 @@       <mtd columnalign="center" style="text-align: center">         <mrow>           <mrow>-            <mi>𝑇</mi>+            <mi mathvariant="italic">𝑇</mi>             <mi>&#8290;</mi>-            <mi>ℎ</mi>+            <mi mathvariant="italic">ℎ</mi>             <mi>&#8290;</mi>-            <mi>𝑒</mi>+            <mi mathvariant="italic">𝑒</mi>             <mi>&#8290;</mi>-            <mi>𝑞</mi>+            <mi mathvariant="italic">𝑞</mi>             <mi>&#8290;</mi>-            <mi>𝑢</mi>+            <mi mathvariant="italic">𝑢</mi>             <mi>&#8290;</mi>-            <mi>𝑖</mi>+            <mi mathvariant="italic">𝑖</mi>             <mi>&#8290;</mi>-            <mi>𝑐</mi>+            <mi mathvariant="italic">𝑐</mi>             <mi>&#8290;</mi>-            <mi>𝑘</mi>+            <mi mathvariant="italic">𝑘</mi>             <mi>&#8290;</mi>             <mi>b</mi>             <mi>&#8290;</mi>@@ -11785,13 +11785,13 @@             <mi>&#8290;</mi>             <mi>s</mi>             <mi>&#8290;</mi>-            <mi>𝐨</mi>+            <mi mathvariant="bold-italic">𝒐</mi>             <mi>&#8290;</mi>-            <mi>𝐯</mi>+            <mi mathvariant="bold-italic">𝒗</mi>             <mi>&#8290;</mi>-            <mi>𝐞</mi>+            <mi mathvariant="bold-italic">𝒆</mi>             <mi>&#8290;</mi>-            <mi>𝐫</mi>+            <mi mathvariant="bold-italic">𝒓</mi>             <mi>&#8290;</mi>             <mi>t</mi>             <mi>&#8290;</mi>@@ -11799,19 +11799,19 @@             <mi>&#8290;</mi>             <mi>e</mi>             <mi>&#8290;</mi>-            <mi>𝗅</mi>+            <mi mathvariant="sans-serif">𝗅</mi>             <mi>&#8290;</mi>-            <mi>𝖺</mi>+            <mi mathvariant="sans-serif">𝖺</mi>             <mi>&#8290;</mi>-            <mi>𝗓</mi>+            <mi mathvariant="sans-serif">𝗓</mi>             <mi>&#8290;</mi>-            <mi>𝗒</mi>+            <mi mathvariant="sans-serif">𝗒</mi>             <mi>&#8290;</mi>-            <mi>𝚍</mi>+            <mi mathvariant="monospace">𝚍</mi>             <mi>&#8290;</mi>-            <mi>𝚘</mi>+            <mi mathvariant="monospace">𝚘</mi>             <mi>&#8290;</mi>-            <mi>𝚐</mi>+            <mi mathvariant="monospace">𝚐</mi>           </mrow>           <mtext mathvariant="normal">.</mtext>           <mrow>@@ -12085,7 +12085,7 @@                     </mrow>                   </mrow>                   <mo>⋅</mo>-                  <mi>𝐮</mi>+                  <mi mathvariant="bold-italic">𝒖</mi>                 </mrow>               </mrow>             </mtd>@@ -12224,7 +12224,7 @@                   <mo stretchy="true" form="prefix">(</mo>                   <mrow>                     <mrow>-                      <mi>arccos</mi>+                      <mi mathvariant="normal">arccos</mi>                       <mo>&#8289;</mo>                     </mrow>                     <mrow>@@ -12277,7 +12277,7 @@                   <mo stretchy="true" form="prefix">(</mo>                   <mrow>                     <mrow>-                      <mi>arccos</mi>+                      <mi mathvariant="normal">arccos</mi>                       <mo>&#8289;</mo>                     </mrow>                     <mrow>@@ -12351,7 +12351,7 @@         <mrow>           <mrow>             <mrow>-              <mi>det</mi>+              <mi mathvariant="normal">det</mi>               <mo>&#8289;</mo>             </mrow>             <mrow>@@ -12462,7 +12462,7 @@                   <mtd columnalign="center" style="text-align: center">                     <mrow>                       <mrow>-                        <mi>cos</mi>+                        <mi mathvariant="normal">cos</mi>                         <mo>&#8289;</mo>                       </mrow>                       <mi>θ</mi>@@ -12473,7 +12473,7 @@                       <mo>−</mo>                       <mrow>                         <mrow>-                          <mi>sin</mi>+                          <mi mathvariant="normal">sin</mi>                           <mo>&#8289;</mo>                         </mrow>                         <mi>θ</mi>@@ -12485,7 +12485,7 @@                   <mtd columnalign="center" style="text-align: center">                     <mrow>                       <mrow>-                        <mi>sin</mi>+                        <mi mathvariant="normal">sin</mi>                         <mo>&#8289;</mo>                       </mrow>                       <mi>θ</mi>@@ -12494,7 +12494,7 @@                   <mtd columnalign="center" style="text-align: center">                     <mrow>                       <mrow>-                        <mi>cos</mi>+                        <mi mathvariant="normal">cos</mi>                         <mo>&#8289;</mo>                       </mrow>                       <mi>θ</mi>@@ -12512,7 +12512,7 @@                   <mtd columnalign="center" style="text-align: center">                     <mrow>                       <mrow>-                        <mi>cos</mi>+                        <mi mathvariant="normal">cos</mi>                         <mo>&#8289;</mo>                       </mrow>                       <mi>θ</mi>@@ -12521,7 +12521,7 @@                   <mtd columnalign="center" style="text-align: center">                     <mrow>                       <mrow>-                        <mi>sin</mi>+                        <mi mathvariant="normal">sin</mi>                         <mo>&#8289;</mo>                       </mrow>                       <mi>θ</mi>@@ -12534,7 +12534,7 @@                       <mo>−</mo>                       <mrow>                         <mrow>-                          <mi>sin</mi>+                          <mi mathvariant="normal">sin</mi>                           <mo>&#8289;</mo>                         </mrow>                         <mi>θ</mi>@@ -12544,7 +12544,7 @@                   <mtd columnalign="center" style="text-align: center">                     <mrow>                       <mrow>-                        <mi>cos</mi>+                        <mi mathvariant="normal">cos</mi>                         <mo>&#8289;</mo>                       </mrow>                       <mi>θ</mi>@@ -12694,7 +12694,7 @@         <mrow>           <mrow>             <mrow>-              <mi>det</mi>+              <mi mathvariant="normal">det</mi>               <mo>&#8289;</mo>             </mrow>             <mrow>@@ -12853,7 +12853,7 @@           <mo>=</mo>           <mrow>             <munder>-              <mi>max</mi>+              <mi mathvariant="normal">max</mi>               <mrow>                 <mi>x</mi>                 <mo>≠</mo>@@ -13216,7 +13216,7 @@           <mo>=</mo>           <mrow>             <munder>-              <mi>lim</mi>+              <mi mathvariant="normal">lim</mi>               <mrow>                 <mi>x</mi>                 <mo>=</mo>@@ -13265,7 +13265,7 @@           <mo>=</mo>           <mrow>             <munder>-              <mi>lim</mi>+              <mi mathvariant="normal">lim</mi>               <mrow>                 <mrow>                   <mo>∥</mo>@@ -13346,7 +13346,7 @@           <mo>=</mo>           <mrow>             <munder>-              <mi>lim</mi>+              <mi mathvariant="normal">lim</mi>               <mrow>                 <mi>n</mi>                 <mo>→</mo>@@ -13652,7 +13652,7 @@         <mrow>           <mrow>             <munder>-              <mi>lim</mi>+              <mi mathvariant="normal">lim</mi>               <mrow>                 <mi>x</mi>                 <mo>→</mo>@@ -13661,7 +13661,7 @@             </munder>             <mrow>               <mrow>-                <mi>sin</mi>+                <mi mathvariant="normal">sin</mi>                 <mo>&#8289;</mo>               </mrow>               <mrow>@@ -13875,7 +13875,7 @@               <mo stretchy="true" form="prefix">(</mo>               <mrow>                 <mrow>-                  <mi>max</mi>+                  <mi mathvariant="normal">max</mi>                   <mo>&#8289;</mo>                 </mrow>                 <mrow>@@ -14030,7 +14030,7 @@         <mrow>           <mrow>             <munder>-              <mi>lim</mi>+              <mi mathvariant="normal">lim</mi>               <mrow>                 <mi>a</mi>                 <mo>→</mo>@@ -14043,7 +14043,7 @@             <mrow>               <msub>                 <mrow>-                  <mi>log</mi>+                  <mi mathvariant="normal">log</mi>                   <mo>&#8289;</mo>                 </mrow>                 <mi>a</mi>@@ -14096,7 +14096,7 @@           <mo>=</mo>           <mrow>             <munder>-              <mi>lim</mi>+              <mi mathvariant="normal">lim</mi>               <mrow>                 <mi>a</mi>                 <mo>→</mo>@@ -14109,7 +14109,7 @@             <mrow>               <msub>                 <mrow>-                  <mi>log</mi>+                  <mi mathvariant="normal">log</mi>                   <mo>&#8289;</mo>                 </mrow>                 <mi>a</mi>@@ -14184,7 +14184,7 @@           <mo>=</mo>           <mrow>             <mrow>-              <mi>exp</mi>+              <mi mathvariant="normal">exp</mi>               <mo>&#8289;</mo>             </mrow>             <mrow>@@ -14249,12 +14249,12 @@         <mrow>           <mrow>             <mrow>-              <mi>Aut</mi>+              <mi mathvariant="normal">Aut</mi>               <mo>&#8289;</mo>             </mrow>             <mrow>               <mo stretchy="false" form="prefix">(</mo>-              <mi>𝐈</mi>+              <mi mathvariant="bold-italic">𝑰</mi>               <mo stretchy="false" form="postfix">)</mo>             </mrow>           </mrow>@@ -14365,7 +14365,7 @@           <mrow>             <mrow>               <mrow>-                <mi>tan</mi>+                <mi mathvariant="normal">tan</mi>                 <mo>&#8289;</mo>               </mrow>               <mi>θ</mi>@@ -14414,7 +14414,7 @@                   <mo>+</mo>                   <mrow>                     <mrow>-                      <mi>sin</mi>+                      <mi mathvariant="normal">sin</mi>                       <mo>&#8289;</mo>                     </mrow>                     <mi>t</mi>@@ -14427,7 +14427,7 @@               <mi>&#8290;</mi>               <mrow>                 <mrow>-                  <mi>cos</mi>+                  <mi mathvariant="normal">cos</mi>                   <mo>&#8289;</mo>                 </mrow>                 <mi>t</mi>@@ -14442,7 +14442,7 @@                   <mo>+</mo>                   <mrow>                     <mrow>-                      <mi>cos</mi>+                      <mi mathvariant="normal">cos</mi>                       <mo>&#8289;</mo>                     </mrow>                     <mi>t</mi>@@ -14455,7 +14455,7 @@               <mi>&#8290;</mi>               <mrow>                 <mrow>-                  <mi>sin</mi>+                  <mi mathvariant="normal">sin</mi>                   <mo>&#8289;</mo>                 </mrow>                 <mi>t</mi>@@ -14467,7 +14467,7 @@               <mi>&#8290;</mi>               <mrow>                 <mrow>-                  <mi>sin</mi>+                  <mi mathvariant="normal">sin</mi>                   <mo>&#8289;</mo>                 </mrow>                 <mrow>@@ -15055,7 +15055,7 @@       <mtd columnalign="center" style="text-align: center">         <mrow>           <mrow>-            <mi>mod</mi>+            <mi mathvariant="normal">mod</mi>             <mo>&#8289;</mo>           </mrow>           <mi>a</mi>@@ -15069,7 +15069,7 @@           <mrow>             <mn>5</mn>             <mrow>-              <mi>mod</mi>+              <mi mathvariant="normal">mod</mi>               <mo>&#8289;</mo>             </mrow>             <mn>3</mn>@@ -15094,7 +15094,7 @@               </mrow>             </mrow>             <mrow>-              <mi>mod</mi>+              <mi mathvariant="normal">mod</mi>               <mo>&#8289;</mo>             </mrow>             <mn>3</mn>@@ -15126,7 +15126,7 @@             <mo stretchy="true" form="prefix">(</mo>             <mrow>               <mrow>-                <mi>mod</mi>+                <mi mathvariant="normal">mod</mi>                 <mo>&#8289;</mo>               </mrow>               <mn>13</mn>@@ -15157,7 +15157,7 @@               <mn>5</mn>             </mrow>             <mrow>-              <mi>mod</mi>+              <mi mathvariant="normal">mod</mi>               <mo>&#8289;</mo>             </mrow>             <mn>7</mn>@@ -15207,7 +15207,7 @@               </mrow>             </mrow>             <mrow>-              <mi>mod</mi>+              <mi mathvariant="normal">mod</mi>               <mo>&#8289;</mo>             </mrow>             <mn>3</mn>@@ -15375,7 +15375,7 @@         <mrow>           <mrow>             <mrow>-              <mi>Pr</mi>+              <mi mathvariant="normal">Pr</mi>               <mo>&#8289;</mo>             </mrow>             <mrow>@@ -15420,7 +15420,7 @@             <mo>=</mo>             <mrow>               <mrow>-                <mi>max</mi>+                <mi mathvariant="normal">max</mi>                 <mo>&#8289;</mo>               </mrow>               <mrow>@@ -15483,7 +15483,7 @@           <mo>=</mo>           <mrow>             <munder>-              <mi>lim</mi>+              <mi mathvariant="normal">lim</mi>               <mrow>                 <mi>x</mi>                 <mover>@@ -16379,7 +16379,7 @@                 <mi>&#8290;</mi>                 <mrow>                   <mrow>-                    <mi>cos</mi>+                    <mi mathvariant="normal">cos</mi>                     <mo>&#8289;</mo>                   </mrow>                   <mi>x</mi>@@ -16404,7 +16404,7 @@                       <mrow>                         <msup>                           <mrow>-                            <mi>cos</mi>+                            <mi mathvariant="normal">cos</mi>                             <mo>&#8289;</mo>                           </mrow>                           <mn>2</mn>@@ -16419,7 +16419,7 @@                         <mn>60</mn>                         <mrow>                           <mrow>-                            <mi>cos</mi>+                            <mi mathvariant="normal">cos</mi>                             <mo>&#8289;</mo>                           </mrow>                           <mi>x</mi>@@ -16428,7 +16428,7 @@                       <mi>&#8290;</mi>                       <mrow>                         <mrow>-                          <mi>sin</mi>+                          <mi mathvariant="normal">sin</mi>                           <mo>&#8289;</mo>                         </mrow>                         <mrow>@@ -16468,7 +16468,7 @@               <mrow>                 <mrow>                   <mrow>-                    <mi>cos</mi>+                    <mi mathvariant="normal">cos</mi>                     <mo>&#8289;</mo>                   </mrow>                   <mrow>@@ -16484,7 +16484,7 @@                 <mi>&#8290;</mi>                 <mrow>                   <mrow>-                    <mi>sin</mi>+                    <mi mathvariant="normal">sin</mi>                     <mo>&#8289;</mo>                   </mrow>                   <mrow>@@ -16511,7 +16511,7 @@                   <mo>−</mo>                   <mrow>                     <mrow>-                      <mi>cos</mi>+                      <mi mathvariant="normal">cos</mi>                       <mo>&#8289;</mo>                     </mrow>                     <mrow>@@ -16549,7 +16549,7 @@                   <mo>−</mo>                   <mrow>                     <mrow>-                      <mi>cos</mi>+                      <mi mathvariant="normal">cos</mi>                       <mo>&#8289;</mo>                     </mrow>                     <mrow>@@ -16609,7 +16609,7 @@         <mrow>           <mrow>             <munder>-              <mi>max</mi>+              <mi mathvariant="normal">max</mi>               <mrow>                 <mrow>                   <mo>−</mo>@@ -16710,7 +16710,7 @@               </msup>               <mrow>                 <mrow>-                  <mi>sin</mi>+                  <mi mathvariant="normal">sin</mi>                   <mo>&#8289;</mo>                 </mrow>                 <mi>x</mi>@@ -16810,7 +16810,7 @@                 <mi>&#8290;</mi>                 <mrow>                   <mrow>-                    <mi>cos</mi>+                    <mi mathvariant="normal">cos</mi>                     <mo>&#8289;</mo>                   </mrow>                   <mi>x</mi>@@ -16835,7 +16835,7 @@                       <mrow>                         <msup>                           <mrow>-                            <mi>cos</mi>+                            <mi mathvariant="normal">cos</mi>                             <mo>&#8289;</mo>                           </mrow>                           <mn>2</mn>@@ -16850,7 +16850,7 @@                         <mn>60</mn>                         <mrow>                           <mrow>-                            <mi>cos</mi>+                            <mi mathvariant="normal">cos</mi>                             <mo>&#8289;</mo>                           </mrow>                           <mi>x</mi>@@ -16859,7 +16859,7 @@                       <mi>&#8290;</mi>                       <mrow>                         <mrow>-                          <mi>sin</mi>+                          <mi mathvariant="normal">sin</mi>                           <mo>&#8289;</mo>                         </mrow>                         <mrow>@@ -16898,7 +16898,7 @@             <msub>               <mrow />               <msup>-                <mi>𝐑</mi>+                <mi mathvariant="bold-italic">𝑹</mi>                 <mn>3</mn>               </msup>             </msub>@@ -16976,15 +16976,15 @@               <mo stretchy="true" form="prefix">(</mo>               <mrow>                 <mrow>-                  <mi>∇×</mi>+                  <mi mathvariant="normal">∇×</mi>                   <mo>&#8289;</mo>                 </mrow>-                <mi>𝐅</mi>+                <mi mathvariant="bold-italic">𝑭</mi>               </mrow>               <mo stretchy="true" form="postfix">)</mo>             </mrow>             <mo>⋅</mo>-            <mi>𝐤</mi>+            <mi mathvariant="bold-italic">𝒌</mi>           </mrow>           <mo>=</mo>           <mrow>@@ -17190,7 +17190,7 @@                   <mtd columnalign="center" style="text-align: center">                     <mrow>                       <mrow>-                        <mi>sin</mi>+                        <mi mathvariant="normal">sin</mi>                         <mo>&#8289;</mo>                       </mrow>                       <mi>θ</mi>@@ -17393,7 +17393,7 @@               <mtd columnalign="center" style="text-align: center">                 <mrow>                   <mrow>-                    <mi>sin</mi>+                    <mi mathvariant="normal">sin</mi>                     <mo>&#8289;</mo>                   </mrow>                   <mi>θ</mi>@@ -17503,7 +17503,7 @@             <mrow>               <msup>                 <mrow>-                  <mi>sin</mi>+                  <mi mathvariant="normal">sin</mi>                   <mo>&#8289;</mo>                 </mrow>                 <mn>3</mn>@@ -17518,7 +17518,7 @@             <mrow>               <mrow>                 <mrow>-                  <mi>sin</mi>+                  <mi mathvariant="normal">sin</mi>                   <mo>&#8289;</mo>                 </mrow>                 <msup>@@ -17529,14 +17529,14 @@               <mi>&#8290;</mi>               <mrow>                 <mrow>-                  <mi>sin</mi>+                  <mi mathvariant="normal">sin</mi>                   <mo>&#8289;</mo>                 </mrow>                 <mrow>                   <mo stretchy="true" form="prefix">(</mo>                   <mrow>                     <mrow>-                      <mi>sin</mi>+                      <mi mathvariant="normal">sin</mi>                       <mo>&#8289;</mo>                     </mrow>                     <msup>@@ -18343,7 +18343,7 @@               <mrow>                 <msup>                   <mrow>-                    <mi>csc</mi>+                    <mi mathvariant="normal">csc</mi>                     <mo>&#8289;</mo>                   </mrow>                   <mrow>@@ -18393,7 +18393,7 @@             <mrow>               <msup>                 <mrow>-                  <mi>tanh</mi>+                  <mi mathvariant="normal">tanh</mi>                   <mo>&#8289;</mo>                 </mrow>                 <mrow>@@ -18413,7 +18413,7 @@               <mi>&#8290;</mi>               <mrow>                 <mrow>-                  <mi>ln</mi>+                  <mi mathvariant="normal">ln</mi>                   <mo>&#8289;</mo>                 </mrow>                 <mrow>@@ -18818,12 +18818,12 @@         <mrow>           <mi>x</mi>           <mrow>-            <mi>≰⃥</mi>+            <mi mathvariant="normal">≰⃥</mi>             <mo>&#8289;</mo>           </mrow>           <mi>y</mi>           <mrow>-            <mi>≰⃥</mi>+            <mi mathvariant="normal">≰⃥</mi>             <mo>&#8289;</mo>           </mrow>           <mi>z</mi>@@ -18835,7 +18835,7 @@       <mtd columnalign="center" style="text-align: center">         <mrow>           <mover>-            <mi>lim</mi>+            <mi mathvariant="normal">lim</mi>             <mo accent="true">¯</mo>           </mover>           <mi>x</mi>@@ -18847,7 +18847,7 @@       <mtd columnalign="center" style="text-align: center">         <mrow>           <munder>-            <mi>lim</mi>+            <mi mathvariant="normal">lim</mi>             <mo accent="true">̲</mo>           </munder>           <mi>x</mi>@@ -18859,7 +18859,7 @@       <mtd columnalign="center" style="text-align: center">         <mrow>           <munder>-            <mi>lim</mi>+            <mi mathvariant="normal">lim</mi>             <mo accent="true">→</mo>           </munder>           <mi>x</mi>@@ -18871,7 +18871,7 @@       <mtd columnalign="center" style="text-align: center">         <mrow>           <munder>-            <mi>lim</mi>+            <mi mathvariant="normal">lim</mi>             <mo accent="true">←</mo>           </munder>           <mi>x</mi>@@ -19720,7 +19720,7 @@           <mfrac>             <mrow>               <mrow>-                <mi>sin</mi>+                <mi mathvariant="normal">sin</mi>                 <mo>&#8289;</mo>               </mrow>               <mi>θ</mi>@@ -19739,7 +19739,7 @@           <mfrac>             <mrow>               <mrow>-                <mi>sin</mi>+                <mi mathvariant="normal">sin</mi>                 <mo>&#8289;</mo>               </mrow>               <mi>θ</mi>@@ -19758,7 +19758,7 @@           <mfrac>             <mrow>               <mrow>-                <mi>sin</mi>+                <mi mathvariant="normal">sin</mi>                 <mo>&#8289;</mo>               </mrow>               <mi>θ</mi>@@ -19777,7 +19777,7 @@           <mfrac>             <mrow>               <mrow>-                <mi>sin</mi>+                <mi mathvariant="normal">sin</mi>                 <mo>&#8289;</mo>               </mrow>               <mi>θ</mi>@@ -19796,7 +19796,7 @@           <mfrac>             <mrow>               <mrow>-                <mi>sin</mi>+                <mi mathvariant="normal">sin</mi>                 <mo>&#8289;</mo>               </mrow>               <mi>θ</mi>@@ -19815,7 +19815,7 @@           <mfrac>             <mrow>               <mrow>-                <mi>sin</mi>+                <mi mathvariant="normal">sin</mi>                 <mo>&#8289;</mo>               </mrow>               <mi>θ</mi>@@ -19834,7 +19834,7 @@           <mfrac>             <mrow>               <mrow>-                <mi>sin</mi>+                <mi mathvariant="normal">sin</mi>                 <mo>&#8289;</mo>               </mrow>               <mi>θ</mi>@@ -19853,7 +19853,7 @@           <mfrac>             <mrow>               <mrow>-                <mi>sin</mi>+                <mi mathvariant="normal">sin</mi>                 <mo>&#8289;</mo>               </mrow>               <mi>θ</mi>@@ -19872,7 +19872,7 @@           <mfrac>             <mrow>               <mrow>-                <mi>sin</mi>+                <mi mathvariant="normal">sin</mi>                 <mo>&#8289;</mo>               </mrow>               <mi>θ</mi>@@ -19889,7 +19889,7 @@         <mfrac>           <mrow>             <mrow>-              <mi>sin</mi>+              <mi mathvariant="normal">sin</mi>               <mo>&#8289;</mo>             </mrow>             <mi>θ</mi>@@ -19904,7 +19904,7 @@         <mfrac>           <mrow>             <mrow>-              <mi>sin</mi>+              <mi mathvariant="normal">sin</mi>               <mo>&#8289;</mo>             </mrow>             <mi>θ</mi>@@ -19919,7 +19919,7 @@         <mfrac>           <mrow>             <mrow>-              <mi>sin</mi>+              <mi mathvariant="normal">sin</mi>               <mo>&#8289;</mo>             </mrow>             <mi>θ</mi>@@ -19934,7 +19934,7 @@         <mfrac>           <mrow>             <mrow>-              <mi>sin</mi>+              <mi mathvariant="normal">sin</mi>               <mo>&#8289;</mo>             </mrow>             <mi>θ</mi>@@ -19949,7 +19949,7 @@         <mfrac>           <mrow>             <mrow>-              <mi>sin</mi>+              <mi mathvariant="normal">sin</mi>               <mo>&#8289;</mo>             </mrow>             <mi>θ</mi>@@ -19964,7 +19964,7 @@         <mfrac>           <mrow>             <mrow>-              <mi>sin</mi>+              <mi mathvariant="normal">sin</mi>               <mo>&#8289;</mo>             </mrow>             <mi>θ</mi>@@ -19979,7 +19979,7 @@         <mfrac>           <mrow>             <mrow>-              <mi>sin</mi>+              <mi mathvariant="normal">sin</mi>               <mo>&#8289;</mo>             </mrow>             <mi>θ</mi>@@ -19994,7 +19994,7 @@         <mfrac>           <mrow>             <mrow>-              <mi>sin</mi>+              <mi mathvariant="normal">sin</mi>               <mo>&#8289;</mo>             </mrow>             <mi>θ</mi>@@ -20009,7 +20009,7 @@         <mfrac>           <mrow>             <mrow>-              <mi>sin</mi>+              <mi mathvariant="normal">sin</mi>               <mo>&#8289;</mo>             </mrow>             <mi>θ</mi>
test/writer/mml/emptyContent1.test view
@@ -5,6 +5,6 @@ <math display="block" xmlns="http://www.w3.org/1998/Math/MathML">   <msub>     <mn></mn>-    <mi></mi>+    <mi mathvariant="normal"></mi>   </msub> </math>
test/writer/mml/f.test view
@@ -157,7 +157,7 @@         <mtext mathvariant="normal">fjlig</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>fj</mi>+        <mi mathvariant="normal">fj</mi>       </mtd>     </mtr>     <mtr>
test/writer/mml/g.test view
@@ -317,7 +317,7 @@         <mtext mathvariant="normal">gesl</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⋛︀</mi>+        <mi mathvariant="normal">⋛︀</mi>       </mtd>     </mtr>     <mtr>@@ -717,7 +717,7 @@         <mtext mathvariant="normal">gvertneqq</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≩︀</mi>+        <mi mathvariant="normal">≩︀</mi>       </mtd>     </mtr>     <mtr>@@ -725,7 +725,7 @@         <mtext mathvariant="normal">gvnE</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≩︀</mi>+        <mi mathvariant="normal">≩︀</mi>       </mtd>     </mtr>   </mtable>
test/writer/mml/invChars.test view
@@ -13,7 +13,7 @@   <mrow>     <mn></mn>     <mrow>-      <mi></mi>+      <mi mathvariant="normal"></mi>       <mo>&#8289;</mo>     </mrow>     <mi></mi>
test/writer/mml/l.test view
@@ -548,7 +548,7 @@         <mtext mathvariant="normal">lates</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⪭︀</mi>+        <mi mathvariant="normal">⪭︀</mi>       </mtd>     </mtr>     <mtr>@@ -1116,7 +1116,7 @@         <mtext mathvariant="normal">lesg</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⋚︀</mi>+        <mi mathvariant="normal">⋚︀</mi>       </mtd>     </mtr>     <mtr>@@ -1964,7 +1964,7 @@         <mtext mathvariant="normal">lvertneqq</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≨︀</mi>+        <mi mathvariant="normal">≨︀</mi>       </mtd>     </mtr>     <mtr>@@ -1972,7 +1972,7 @@         <mtext mathvariant="normal">lvnE</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≨︀</mi>+        <mi mathvariant="normal">≨︀</mi>       </mtd>     </mtr>   </mtable>
+ test/writer/mml/menclose.test view
@@ -0,0 +1,25 @@+<<< native+[ EBoxed (ENumber "0")+, ECancel ForwardSlash (ENumber "1")+, ECancel BackSlash (ENumber "2")+, ECancel XSlash (ENumber "3")+]++>>> mml+<?xml version='1.0' ?>+<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">+  <mrow>+    <menclose notation="box">+      <mn>0</mn>+    </menclose>+    <menclose notation="updiagonalstrike">+      <mn>1</mn>+    </menclose>+    <menclose notation="downdiagonalstrike">+      <mn>2</mn>+    </menclose>+    <menclose notation="updiagonalstrike downdiagonalstrike">+      <mn>3</mn>+    </menclose>+  </mrow>+</math>
test/writer/mml/mfencedAempty.test view
@@ -10,6 +10,6 @@       <mi>x</mi>       <mi>y</mi>     </mrow>-    <mi></mi>+    <mi mathvariant="normal"></mi>   </mrow> </math>
test/writer/mml/mfracZcomp-01.test view
@@ -16,7 +16,7 @@     <mfrac>       <mrow>         <mrow>-          <mi>sin</mi>+          <mi mathvariant="normal">sin</mi>           <mo>&#8289;</mo>         </mrow>         <mi>θ</mi>
test/writer/mml/mfracZcomp-02.test view
@@ -16,7 +16,7 @@     <mfrac>       <mrow>         <mrow>-          <mi>ln</mi>+          <mi mathvariant="normal">ln</mi>           <mo>&#8289;</mo>         </mrow>         <mi>x</mi>
test/writer/mml/mfracZcomp-03.test view
@@ -16,7 +16,7 @@     <mfrac>       <mrow>         <mrow>-          <mi>tan</mi>+          <mi mathvariant="normal">tan</mi>           <mo>&#8289;</mo>         </mrow>         <mi>θ</mi>
test/writer/mml/mfracZcomp-12.test view
@@ -22,7 +22,7 @@       <mfrac>         <mrow>           <mrow>-            <mi>log</mi>+            <mi mathvariant="normal">log</mi>             <mo>&#8289;</mo>           </mrow>           <mi>x</mi>
test/writer/mml/mfracZcomp-13.test view
@@ -22,7 +22,7 @@       <mfrac>         <mrow>           <mrow>-            <mi>sin</mi>+            <mi mathvariant="normal">sin</mi>             <mo>&#8289;</mo>           </mrow>           <mi>θ</mi>
test/writer/mml/mfracZcomp-14.test view
@@ -24,7 +24,7 @@       <mfrac>         <mrow>           <mrow>-            <mi>sin</mi>+            <mi mathvariant="normal">sin</mi>             <mo>&#8289;</mo>           </mrow>           <mi>θ</mi>
test/writer/mml/mfracZcomp-15.test view
@@ -24,7 +24,7 @@       <mfrac>         <mrow>           <mrow>-            <mi>sin</mi>+            <mi mathvariant="normal">sin</mi>             <mo>&#8289;</mo>           </mrow>           <mi>θ</mi>
test/writer/mml/mfracZcomp-16.test view
@@ -22,7 +22,7 @@       <mfrac>         <mrow>           <mrow>-            <mi>sin</mi>+            <mi mathvariant="normal">sin</mi>             <mo>&#8289;</mo>           </mrow>           <mi>θ</mi>
test/writer/mml/mfracZcomp-17.test view
@@ -22,7 +22,7 @@       <mfrac>         <mrow>           <mrow>-            <mi>sin</mi>+            <mi mathvariant="normal">sin</mi>             <mo>&#8289;</mo>           </mrow>           <mi>θ</mi>
test/writer/mml/mfracZcomp-18.test view
@@ -25,7 +25,7 @@       <mfrac>         <mrow>           <mrow>-            <mi>sin</mi>+            <mi mathvariant="normal">sin</mi>             <mo>&#8289;</mo>           </mrow>           <mi>θ</mi>
test/writer/mml/mfracZcomp-19.test view
@@ -24,7 +24,7 @@       <mfrac>         <mrow>           <mrow>-            <mi>sin</mi>+            <mi mathvariant="normal">sin</mi>             <mo>&#8289;</mo>           </mrow>           <mi>θ</mi>
test/writer/mml/mfracZcomp-20.test view
@@ -26,7 +26,7 @@       <mfrac>         <mrow>           <mrow>-            <mi>sin</mi>+            <mi mathvariant="normal">sin</mi>             <mo>&#8289;</mo>           </mrow>           <mi>θ</mi>
test/writer/mml/mfracZcomp-21.test view
@@ -26,7 +26,7 @@       <mfrac>         <mrow>           <mrow>-            <mi>sin</mi>+            <mi mathvariant="normal">sin</mi>             <mo>&#8289;</mo>           </mrow>           <mi>θ</mi>
test/writer/mml/mfracZcomp-24.test view
@@ -56,7 +56,7 @@                 <mrow>                   <mrow>                     <mrow>-                      <mi>sin</mi>+                      <mi mathvariant="normal">sin</mi>                       <mo>&#8289;</mo>                     </mrow>                     <mi>θ</mi>
test/writer/mml/mfracZcomp-25.test view
@@ -56,7 +56,7 @@                 <mrow>                   <mrow>                     <mrow>-                      <mi>sin</mi>+                      <mi mathvariant="normal">sin</mi>                       <mo>&#8289;</mo>                     </mrow>                     <mi>θ</mi>
test/writer/mml/mfracZcomp-33.test view
@@ -74,7 +74,7 @@           <mi>i</mi>           <mi> </mi>           <mrow>-            <mi>cos</mi>+            <mi mathvariant="normal">cos</mi>             <mo>&#8289;</mo>           </mrow>           <mrow>
test/writer/mml/mi2.test view
@@ -5,7 +5,7 @@ <math display="block" xmlns="http://www.w3.org/1998/Math/MathML">   <mrow>     <mrow>-      <mi>sin</mi>+      <mi mathvariant="normal">sin</mi>       <mo>&#8289;</mo>     </mrow>     <mi>x</mi>
test/writer/mml/miAtoken5.test view
@@ -64,7 +64,7 @@     <mtr>       <mtd columnalign="center" style="text-align: center">         <mrow>-          <mi>𝒜</mi>+          <mi mathvariant="script">𝒜</mi>           <mo>+</mo>           <mi>A</mi>           <mo>+</mo>@@ -77,7 +77,7 @@     <mtr>       <mtd columnalign="center" style="text-align: center">         <mrow>-          <mi>𝒜</mi>+          <mi mathvariant="script">𝒜</mi>           <mo>+</mo>           <mi>A</mi>           <mo>+</mo>
test/writer/mml/miequivalents11.test view
@@ -122,7 +122,7 @@         <mrow>           <mi>𝐀</mi>           <mo>=</mo>-          <mi>𝐀</mi>+          <mi mathvariant="bold-italic">𝑨</mi>         </mrow>       </mtd>     </mtr>@@ -131,7 +131,7 @@         <mrow>           <mi>𝐴</mi>           <mo>=</mo>-          <mi>𝐴</mi>+          <mi mathvariant="italic">𝐴</mi>         </mrow>       </mtd>     </mtr>@@ -140,7 +140,7 @@         <mrow>           <mi>𝑨</mi>           <mo>=</mo>-          <mi>𝑨</mi>+          <mi mathvariant="bold-italic">𝑨</mi>         </mrow>       </mtd>     </mtr>@@ -149,7 +149,7 @@         <mrow>           <mi>𝔸</mi>           <mo>=</mo>-          <mi>𝔸</mi>+          <mi mathvariant="double-struck">𝔸</mi>           <mo>=</mo>           <mi>𝔸</mi>         </mrow>@@ -160,7 +160,7 @@         <mrow>           <mi>𝒜</mi>           <mo>=</mo>-          <mi>𝒜</mi>+          <mi mathvariant="script">𝒜</mi>           <mo>=</mo>           <mi>𝒜</mi>         </mrow>@@ -171,7 +171,7 @@         <mrow>           <mi>𝓐</mi>           <mo>=</mo>-          <mi>𝓐</mi>+          <mi mathvariant="bold-script">𝓐</mi>         </mrow>       </mtd>     </mtr>@@ -180,7 +180,7 @@         <mrow>           <mi>𝔄</mi>           <mo>=</mo>-          <mi>𝔄</mi>+          <mi mathvariant="fraktur">𝔄</mi>           <mo>=</mo>           <mi>𝔄</mi>         </mrow>@@ -191,7 +191,7 @@         <mrow>           <mi>𝕬</mi>           <mo>=</mo>-          <mi>𝕬</mi>+          <mi mathvariant="bold-fraktur">𝕬</mi>         </mrow>       </mtd>     </mtr>@@ -200,7 +200,7 @@         <mrow>           <mi>𝖠</mi>           <mo>=</mo>-          <mi>𝖠</mi>+          <mi mathvariant="sans-serif">𝖠</mi>         </mrow>       </mtd>     </mtr>@@ -209,7 +209,7 @@         <mrow>           <mi>𝗔</mi>           <mo>=</mo>-          <mi>𝗔</mi>+          <mi mathvariant="bold-sans-serif">𝗔</mi>         </mrow>       </mtd>     </mtr>@@ -218,7 +218,7 @@         <mrow>           <mi>𝘈</mi>           <mo>=</mo>-          <mi>𝘈</mi>+          <mi mathvariant="sans-serif-italic">𝘈</mi>         </mrow>       </mtd>     </mtr>@@ -227,7 +227,7 @@         <mrow>           <mi>𝘼</mi>           <mo>=</mo>-          <mi>𝘼</mi>+          <mi mathvariant="sans-serif-bold-italic">𝘼</mi>         </mrow>       </mtd>     </mtr>@@ -236,7 +236,7 @@         <mrow>           <mi>𝙰</mi>           <mo>=</mo>-          <mi>𝙰</mi>+          <mi mathvariant="monospace">𝙰</mi>         </mrow>       </mtd>     </mtr>
test/writer/mml/mimathvariant13.test view
@@ -65,46 +65,46 @@         <mi>a</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝐚</mi>+        <mi mathvariant="bold-italic">𝒂</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝑎</mi>+        <mi mathvariant="italic">𝑎</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝒂</mi>+        <mi mathvariant="bold-italic">𝒂</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝕒</mi>+        <mi mathvariant="double-struck">𝕒</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝖆</mi>+        <mi mathvariant="bold-fraktur">𝖆</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝒶</mi>+        <mi mathvariant="script">𝒶</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝓪</mi>+        <mi mathvariant="bold-script">𝓪</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝔞</mi>+        <mi mathvariant="fraktur">𝔞</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝖺</mi>+        <mi mathvariant="sans-serif">𝖺</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝗮</mi>+        <mi mathvariant="bold-sans-serif">𝗮</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝘢</mi>+        <mi mathvariant="sans-serif-italic">𝘢</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝙖</mi>+        <mi mathvariant="sans-serif-bold-italic">𝙖</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝚊</mi>+        <mi mathvariant="monospace">𝚊</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝐚𝐛</mi>+        <mi mathvariant="bold-italic">𝒂𝒃</mi>       </mtd>     </mtr>     <mtr>@@ -115,46 +115,46 @@         <mi>A</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝐀</mi>+        <mi mathvariant="bold-italic">𝑨</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝐴</mi>+        <mi mathvariant="italic">𝐴</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝑨</mi>+        <mi mathvariant="bold-italic">𝑨</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝔸</mi>+        <mi mathvariant="double-struck">𝔸</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝕬</mi>+        <mi mathvariant="bold-fraktur">𝕬</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝒜</mi>+        <mi mathvariant="script">𝒜</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝓐</mi>+        <mi mathvariant="bold-script">𝓐</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝔄</mi>+        <mi mathvariant="fraktur">𝔄</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝖠</mi>+        <mi mathvariant="sans-serif">𝖠</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝗔</mi>+        <mi mathvariant="bold-sans-serif">𝗔</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝘈</mi>+        <mi mathvariant="sans-serif-italic">𝘈</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝘼</mi>+        <mi mathvariant="sans-serif-bold-italic">𝘼</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝙰</mi>+        <mi mathvariant="monospace">𝙰</mi>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>𝛂</mi>+        <mi mathvariant="bold-italic">𝜶</mi>       </mtd>     </mtr>   </mtable>
test/writer/mml/mimathvariant14.test view
@@ -46,40 +46,40 @@     <mtr>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝔄𝔅ℭ𝔇𝔈𝔉𝔊ℌℑ𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔ℜ𝔖𝔗𝔘𝔙𝔚𝔛𝔜ℨ</mi>-          <mi>𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷</mi>+          <mi mathvariant="fraktur">𝔄𝔅ℭ𝔇𝔈𝔉𝔊ℌℑ𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔ℜ𝔖𝔗𝔘𝔙𝔚𝔛𝔜ℨ</mi>+          <mi mathvariant="fraktur">𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷</mi>         </mrow>       </mtd>     </mtr>     <mtr>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅</mi>-          <mi>𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟</mi>+          <mi mathvariant="bold-fraktur">𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅</mi>+          <mi mathvariant="bold-fraktur">𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟</mi>         </mrow>       </mtd>     </mtr>     <mtr>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ</mi>-          <mi>𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫</mi>+          <mi mathvariant="double-struck">𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ</mi>+          <mi mathvariant="double-struck">𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫</mi>         </mrow>       </mtd>     </mtr>     <mtr>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝒜ℬ𝒞𝒟ℰℱ𝒢ℋℐ𝒥𝒦ℒℳ𝒩𝒪𝒫𝒬ℛ𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵</mi>-          <mi>𝒶𝒷𝒸𝒹ℯ𝒻ℊ𝒽𝒾𝒿𝓀𝓁𝓂𝓃ℴ𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏</mi>+          <mi mathvariant="script">𝒜ℬ𝒞𝒟ℰℱ𝒢ℋℐ𝒥𝒦ℒℳ𝒩𝒪𝒫𝒬ℛ𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵</mi>+          <mi mathvariant="script">𝒶𝒷𝒸𝒹ℯ𝒻ℊ𝒽𝒾𝒿𝓀𝓁𝓂𝓃ℴ𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏</mi>         </mrow>       </mtd>     </mtr>     <mtr>       <mtd columnalign="left" style="text-align: left">         <mrow>-          <mi>𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩</mi>-          <mi>𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃</mi>+          <mi mathvariant="bold-script">𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩</mi>+          <mi mathvariant="bold-script">𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃</mi>         </mrow>       </mtd>     </mtr>
test/writer/mml/mo6.test view
@@ -19,7 +19,7 @@ <math display="block" xmlns="http://www.w3.org/1998/Math/MathML">   <mrow>     <mrow>-      <mi>there exists</mi>+      <mi mathvariant="normal">there exists</mi>       <mo>&#8289;</mo>     </mrow>     <mrow>@@ -29,7 +29,7 @@         <mn>0</mn>       </mrow>       <mrow>-        <mi>such that</mi>+        <mi mathvariant="normal">such that</mi>         <mo>&#8289;</mo>       </mrow>       <mrow>
test/writer/mml/mstyleA2.test view
@@ -9,6 +9,6 @@   <mrow>     <mn mathvariant="bold-italic">2</mn>     <mo mathvariant="bold-italic">+</mo>-    <mi>𝒙</mi>+    <mi mathvariant="bold-italic">𝒙</mi>   </mrow> </math>
test/writer/mml/n.test view
@@ -405,7 +405,7 @@         <mtext mathvariant="normal">nang</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>∠⃒</mi>+        <mi mathvariant="normal">∠⃒</mi>       </mtd>     </mtr>     <mtr>@@ -421,7 +421,7 @@         <mtext mathvariant="normal">napE</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⩰̸</mi>+        <mi mathvariant="normal">⩰̸</mi>       </mtd>     </mtr>     <mtr>@@ -429,7 +429,7 @@         <mtext mathvariant="normal">napid</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≋̸</mi>+        <mi mathvariant="normal">≋̸</mi>       </mtd>     </mtr>     <mtr>@@ -549,7 +549,7 @@         <mtext mathvariant="normal">ncongdot</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⩭̸</mi>+        <mi mathvariant="normal">⩭̸</mi>       </mtd>     </mtr>     <mtr>@@ -629,7 +629,7 @@         <mtext mathvariant="normal">nedot</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≐̸</mi>+        <mi mathvariant="normal">≐̸</mi>       </mtd>     </mtr>     <mtr>@@ -709,7 +709,7 @@         <mtext mathvariant="normal">NewLine</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi></mi>+        <mi mathvariant="normal"></mi>       </mtd>     </mtr>     <mtr>@@ -757,7 +757,7 @@         <mtext mathvariant="normal">ngE</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≧̸</mi>+        <mi mathvariant="normal">≧̸</mi>       </mtd>     </mtr>     <mtr>@@ -773,7 +773,7 @@         <mtext mathvariant="normal">ngeqq</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≧̸</mi>+        <mi mathvariant="normal">≧̸</mi>       </mtd>     </mtr>     <mtr>@@ -797,7 +797,7 @@         <mtext mathvariant="normal">nGg</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⋙̸</mi>+        <mi mathvariant="normal">⋙̸</mi>       </mtd>     </mtr>     <mtr>@@ -821,7 +821,7 @@         <mtext mathvariant="normal">nGt</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≫⃒</mi>+        <mi mathvariant="normal">≫⃒</mi>       </mtd>     </mtr>     <mtr>@@ -1029,7 +1029,7 @@         <mtext mathvariant="normal">nLl</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⋘̸</mi>+        <mi mathvariant="normal">⋘̸</mi>       </mtd>     </mtr>     <mtr>@@ -1053,7 +1053,7 @@         <mtext mathvariant="normal">nLt</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≪⃒</mi>+        <mi mathvariant="normal">≪⃒</mi>       </mtd>     </mtr>     <mtr>@@ -1213,7 +1213,7 @@         <mtext mathvariant="normal">NotGreaterFullEqual</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≧̸</mi>+        <mi mathvariant="normal">≧̸</mi>       </mtd>     </mtr>     <mtr>@@ -1277,7 +1277,7 @@         <mtext mathvariant="normal">notindot</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⋵̸</mi>+        <mi mathvariant="normal">⋵̸</mi>       </mtd>     </mtr>     <mtr>@@ -1285,7 +1285,7 @@         <mtext mathvariant="normal">notinE</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⋹̸</mi>+        <mi mathvariant="normal">⋹̸</mi>       </mtd>     </mtr>     <mtr>@@ -1645,7 +1645,7 @@         <mtext mathvariant="normal">nparsl</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⫽⃥</mi>+        <mi mathvariant="normal">⫽⃥</mi>       </mtd>     </mtr>     <mtr>@@ -1653,7 +1653,7 @@         <mtext mathvariant="normal">npart</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>∂̸</mi>+        <mi mathvariant="normal">∂̸</mi>       </mtd>     </mtr>     <mtr>@@ -1725,7 +1725,7 @@         <mtext mathvariant="normal">nrarrc</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⤳̸</mi>+        <mi mathvariant="normal">⤳̸</mi>       </mtd>     </mtr>     <mtr>@@ -1733,7 +1733,7 @@         <mtext mathvariant="normal">nrarrw</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>↝̸</mi>+        <mi mathvariant="normal">↝̸</mi>       </mtd>     </mtr>     <mtr>@@ -1901,7 +1901,7 @@         <mtext mathvariant="normal">nsubE</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⫅̸</mi>+        <mi mathvariant="normal">⫅̸</mi>       </mtd>     </mtr>     <mtr>@@ -1925,7 +1925,7 @@         <mtext mathvariant="normal">nsubseteqq</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⫅̸</mi>+        <mi mathvariant="normal">⫅̸</mi>       </mtd>     </mtr>     <mtr>@@ -1965,7 +1965,7 @@         <mtext mathvariant="normal">nsupE</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⫆̸</mi>+        <mi mathvariant="normal">⫆̸</mi>       </mtd>     </mtr>     <mtr>@@ -1989,7 +1989,7 @@         <mtext mathvariant="normal">nsupseteqq</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⫆̸</mi>+        <mi mathvariant="normal">⫆̸</mi>       </mtd>     </mtr>     <mtr>@@ -2093,7 +2093,7 @@         <mtext mathvariant="normal">nvap</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≍⃒</mi>+        <mi mathvariant="normal">≍⃒</mi>       </mtd>     </mtr>     <mtr>@@ -2133,7 +2133,7 @@         <mtext mathvariant="normal">nvge</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≥⃒</mi>+        <mi mathvariant="normal">≥⃒</mi>       </mtd>     </mtr>     <mtr>@@ -2141,7 +2141,7 @@         <mtext mathvariant="normal">nvgt</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>&gt;⃒</mi>+        <mi mathvariant="normal">&gt;⃒</mi>       </mtd>     </mtr>     <mtr>@@ -2173,7 +2173,7 @@         <mtext mathvariant="normal">nvle</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>≤⃒</mi>+        <mi mathvariant="normal">≤⃒</mi>       </mtd>     </mtr>     <mtr>@@ -2181,7 +2181,7 @@         <mtext mathvariant="normal">nvlt</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>&lt;⃒</mi>+        <mi mathvariant="normal">&lt;⃒</mi>       </mtd>     </mtr>     <mtr>@@ -2189,7 +2189,7 @@         <mtext mathvariant="normal">nvltrie</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⊴⃒</mi>+        <mi mathvariant="normal">⊴⃒</mi>       </mtd>     </mtr>     <mtr>@@ -2205,7 +2205,7 @@         <mtext mathvariant="normal">nvrtrie</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⊵⃒</mi>+        <mi mathvariant="normal">⊵⃒</mi>       </mtd>     </mtr>     <mtr>@@ -2213,7 +2213,7 @@         <mtext mathvariant="normal">nvsim</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>∼⃒</mi>+        <mi mathvariant="normal">∼⃒</mi>       </mtd>     </mtr>     <mtr>
test/writer/mml/operatorname.test view
@@ -77,7 +77,7 @@         <mtd columnalign="left" style="text-align: left">           <msub>             <mrow>-              <mi>div</mi>+              <mi mathvariant="normal">div</mi>               <mo>&#8289;</mo>             </mrow>             <mi>x</mi>@@ -85,7 +85,7 @@           <mi>u</mi>           <msup>             <mrow>-              <mi>div</mi>+              <mi mathvariant="normal">div</mi>               <mo>&#8289;</mo>             </mrow>             <mi>x</mi>@@ -93,7 +93,7 @@           <mi>u</mi>           <msubsup>             <mrow>-              <mi>div</mi>+              <mi mathvariant="normal">div</mi>               <mo>&#8289;</mo>             </mrow>             <mi>x</mi>@@ -102,7 +102,7 @@           <mi>u</mi>           <msubsup>             <mrow>-              <mi>div</mi>+              <mi mathvariant="normal">div</mi>               <mo>&#8289;</mo>             </mrow>             <mi>x</mi>@@ -117,7 +117,7 @@       <mtr>         <mtd columnalign="left" style="text-align: left">           <munder>-            <mi>⋆-lim&#39;sup</mi>+            <mi mathvariant="normal">⋆-lim&#39;sup</mi>             <mrow>               <mi>x</mi>               <mo>→</mo>@@ -126,12 +126,12 @@           </munder>           <mi>u</mi>           <mover>-            <mi>⋆-lim&#39;sup</mi>+            <mi mathvariant="normal">⋆-lim&#39;sup</mi>             <mi>w</mi>           </mover>           <mi>u</mi>           <munderover>-            <mi>⋆-lim&#39;sup</mi>+            <mi mathvariant="normal">⋆-lim&#39;sup</mi>             <mrow>               <mi>x</mi>               <mo>→</mo>@@ -141,7 +141,7 @@           </munderover>           <mi>u</mi>           <munderover>-            <mi>⋆-lim&#39;sup</mi>+            <mi mathvariant="normal">⋆-lim&#39;sup</mi>             <mrow>               <mi>x</mi>               <mo>→</mo>@@ -159,7 +159,7 @@         <mtd columnalign="left" style="text-align: left">           <msub>             <mrow>-              <mi>⋆-lim&#39;sup</mi>+              <mi mathvariant="normal">⋆-lim&#39;sup</mi>               <mo>&#8289;</mo>             </mrow>             <mrow>@@ -171,7 +171,7 @@           <mi>u</mi>           <msup>             <mrow>-              <mi>⋆-lim&#39;sup</mi>+              <mi mathvariant="normal">⋆-lim&#39;sup</mi>               <mo>&#8289;</mo>             </mrow>             <mi>w</mi>@@ -179,7 +179,7 @@           <mi>u</mi>           <msubsup>             <mrow>-              <mi>⋆-lim&#39;sup</mi>+              <mi mathvariant="normal">⋆-lim&#39;sup</mi>               <mo>&#8289;</mo>             </mrow>             <mrow>@@ -192,7 +192,7 @@           <mi>u</mi>           <msubsup>             <mrow>-              <mi>⋆-lim&#39;sup</mi>+              <mi mathvariant="normal">⋆-lim&#39;sup</mi>               <mo>&#8289;</mo>             </mrow>             <mrow>@@ -212,14 +212,14 @@         <mtd columnalign="left" style="text-align: left">           <msub>             <mrow>-              <mi>curl</mi>+              <mi mathvariant="normal">curl</mi>               <mo>&#8289;</mo>             </mrow>             <mi>x</mi>           </msub>           <mi>v</mi>           <munder>-            <mi>argmax</mi>+            <mi mathvariant="normal">argmax</mi>             <mi>K</mi>           </munder>           <mi>u</mi>
test/writer/mml/primes1.test view
@@ -62,7 +62,7 @@     <mo>+</mo>     <msup>       <mi>x</mi>-      <mi>&#39;&#39;</mi>+      <mi mathvariant="normal">&#39;&#39;</mi>     </msup>     <mo>+</mo>     <mi>x</mi>
test/writer/mml/s.test view
@@ -812,7 +812,7 @@         <mtext mathvariant="normal">smtes</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⪬︀</mi>+        <mi mathvariant="normal">⪬︀</mi>       </mtd>     </mtr>     <mtr>@@ -908,7 +908,7 @@         <mtext mathvariant="normal">sqcaps</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⊓︀</mi>+        <mi mathvariant="normal">⊓︀</mi>       </mtd>     </mtr>     <mtr>@@ -924,7 +924,7 @@         <mtext mathvariant="normal">sqcups</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⊔︀</mi>+        <mi mathvariant="normal">⊔︀</mi>       </mtd>     </mtr>     <mtr>
test/writer/mml/schwinger_dyson.test view
@@ -62,7 +62,7 @@       <mi>ψ</mi>       <mrow>         <mo stretchy="true" form="prefix">|</mo>-        <mi>𝒯</mi>+        <mi mathvariant="script">𝒯</mi>         <mrow>           <mo stretchy="true" form="prefix">{</mo>           <mfrac>@@ -93,7 +93,7 @@       <mi>ψ</mi>       <mrow>         <mo stretchy="true" form="prefix">|</mo>-        <mi>𝒯</mi>+        <mi mathvariant="script">𝒯</mi>         <mrow>           <mo stretchy="true" form="prefix">{</mo>           <mi>F</mi>
test/writer/mml/simplePres.test view
@@ -48,7 +48,7 @@         <mo>,</mo>         <mrow>           <mrow>-            <mi>sin</mi>+            <mi mathvariant="normal">sin</mi>             <mo>&#8289;</mo>           </mrow>           <mi>x</mi>
test/writer/mml/sphere_volume.test view
@@ -177,7 +177,7 @@             <mn>2</mn>           </msup>           <mrow>-            <mi>sin</mi>+            <mi mathvariant="normal">sin</mi>             <mo>&#8289;</mo>           </mrow>           <mi>θ</mi>@@ -215,7 +215,7 @@           </msubsup>           <mspace width="-0.167em" />           <mrow>-            <mi>sin</mi>+            <mi mathvariant="normal">sin</mi>             <mo>&#8289;</mo>           </mrow>           <mi>θ</mi>@@ -254,7 +254,7 @@           <mrow>             <mo stretchy="true" form="prefix">(</mo>             <mo>−</mo>-            <mi>cos</mi>+            <mi mathvariant="normal">cos</mi>             <mi>θ</mi>             <mo stretchy="true" form="postfix">)</mo>           </mrow>
test/writer/mml/stretchAccents2.test view
@@ -16,7 +16,7 @@     </mover>     <mo>=</mo>     <mover>-      <mi>𝑥𝑥𝑥</mi>+      <mi mathvariant="italic">𝑥𝑥𝑥</mi>       <mo accent="true">¯</mo>     </mover>   </mrow>
test/writer/mml/subsup.test view
@@ -81,27 +81,27 @@     </msubsup>     <mspace width="1.0em" />     <munder>-      <mi>min</mi>+      <mi mathvariant="normal">min</mi>       <mi>A</mi>     </munder>     <mspace width="1.0em" />     <munder>-      <mi>max</mi>+      <mi mathvariant="normal">max</mi>       <mi>B</mi>     </munder>     <mspace width="1.0em" />     <munder>-      <mi>det</mi>+      <mi mathvariant="normal">det</mi>       <mi>C</mi>     </munder>     <mspace width="1.0em" />     <munder>-      <mi>Pr</mi>+      <mi mathvariant="normal">Pr</mi>       <mi>A</mi>     </munder>     <mspace width="1.0em" />     <munder>-      <mi>gcd</mi>+      <mi mathvariant="normal">gcd</mi>       <mi>A</mi>     </munder>     <mspace width="1.0em" />
test/writer/mml/t.test view
@@ -101,7 +101,7 @@         <mtext mathvariant="normal">Tab</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi></mi>+        <mi mathvariant="normal"></mi>       </mtd>     </mtr>     <mtr>@@ -277,7 +277,7 @@         <mtext mathvariant="normal">ThickSpace</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>  </mi>+        <mi mathvariant="normal">  </mi>       </mtd>     </mtr>     <mtr>
test/writer/mml/v.test view
@@ -185,7 +185,7 @@         <mtext mathvariant="normal">varsubsetneq</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⊊︀</mi>+        <mi mathvariant="normal">⊊︀</mi>       </mtd>     </mtr>     <mtr>@@ -193,7 +193,7 @@         <mtext mathvariant="normal">varsubsetneqq</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⫋︀</mi>+        <mi mathvariant="normal">⫋︀</mi>       </mtd>     </mtr>     <mtr>@@ -201,7 +201,7 @@         <mtext mathvariant="normal">varsupsetneq</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⊋︀</mi>+        <mi mathvariant="normal">⊋︀</mi>       </mtd>     </mtr>     <mtr>@@ -209,7 +209,7 @@         <mtext mathvariant="normal">varsupsetneqq</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⫌︀</mi>+        <mi mathvariant="normal">⫌︀</mi>       </mtd>     </mtr>     <mtr>@@ -521,7 +521,7 @@         <mtext mathvariant="normal">vsubne</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⊊︀</mi>+        <mi mathvariant="normal">⊊︀</mi>       </mtd>     </mtr>     <mtr>@@ -529,7 +529,7 @@         <mtext mathvariant="normal">vsubnE</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⫋︀</mi>+        <mi mathvariant="normal">⫋︀</mi>       </mtd>     </mtr>     <mtr>@@ -537,7 +537,7 @@         <mtext mathvariant="normal">vsupne</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⊋︀</mi>+        <mi mathvariant="normal">⊋︀</mi>       </mtd>     </mtr>     <mtr>@@ -545,7 +545,7 @@         <mtext mathvariant="normal">vsupnE</mtext>       </mtd>       <mtd columnalign="center" style="text-align: center">-        <mi>⫌︀</mi>+        <mi mathvariant="normal">⫌︀</mi>       </mtd>     </mtr>     <mtr>
test/writer/mml/white10.test view
@@ -33,27 +33,27 @@     <mi> </mi>     <mi>H</mi>     <mrow>-      <mi> ︀</mi>+      <mi mathvariant="normal"> ︀</mi>       <mo>&#8289;</mo>     </mrow>     <mi>H</mi>     <mrow>-      <mi> ︀</mi>+      <mi mathvariant="normal"> ︀</mi>       <mo>&#8289;</mo>     </mrow>     <mi>H</mi>     <mrow>-      <mi> ︀</mi>+      <mi mathvariant="normal"> ︀</mi>       <mo>&#8289;</mo>     </mrow>     <mi>H</mi>     <mrow>-      <mi> ︀</mi>+      <mi mathvariant="normal"> ︀</mi>       <mo>&#8289;</mo>     </mrow>     <mi>H</mi>     <mrow>-      <mi></mi>+      <mi mathvariant="normal"></mi>       <mo>&#8289;</mo>     </mrow>     <mi>H</mi>
test/writer/omml/22.test view
@@ -452,37 +452,37 @@         <m:e>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>A</m:t>           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>B</m:t>           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>C</m:t>           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>a</m:t>           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>b</m:t>           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>c</m:t>           </m:r>@@ -502,37 +502,37 @@         <m:e>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>A</m:t>           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>B</m:t>           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>C</m:t>           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>a</m:t>           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>b</m:t>           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>c</m:t>           </m:r>
test/writer/omml/binomial_coefficient.test view
@@ -48,7 +48,7 @@   <m:oMath>     <m:r>       <m:rPr>-        <m:sty m:val="b" />+        <m:sty m:val="bi" />       </m:rPr>       <m:t>C</m:t>     </m:r>@@ -84,7 +84,7 @@       <m:e>         <m:r>           <m:rPr>-            <m:sty m:val="b" />+            <m:sty m:val="bi" />           </m:rPr>           <m:t>C</m:t>         </m:r>@@ -122,7 +122,7 @@       <m:e>         <m:r>           <m:rPr>-            <m:sty m:val="b" />+            <m:sty m:val="bi" />           </m:rPr>           <m:t>C</m:t>         </m:r>
+ test/writer/omml/cancel.test view
@@ -0,0 +1,113 @@+<<< native+[ ECancel+    ForwardSlash+    (EGrouped [ EIdentifier "a" , EIdentifier "b" , EIdentifier "c" ])+, EIdentifier "d"+, ESymbol Bin "+"+, ECancel BackSlash (ESuper (EIdentifier "x") (ENumber "2"))+, ESymbol Rel "="+, EIdentifier "d"+, ESymbol Bin "+"+, ECancel XSlash (ESuper (EIdentifier "x") (ENumber "2"))+]++>>> omml+<?xml version='1.0' ?>+<m:oMathPara>+  <m:oMathParaPr>+    <m:jc m:val="center" />+  </m:oMathParaPr>+  <m:oMath>+    <m:borderBox>+      <m:borderBoxPr>+        <m:hideTop m:val="1" />+        <m:hideBot m:val="1" />+        <m:hideLeft m:val="1" />+        <m:hideRight m:val="1" />+        <m:strikeBLTR m:val="1" />+      </m:borderBoxPr>+      <m:e>+        <m:r>+          <m:t>a</m:t>+        </m:r>+        <m:r>+          <m:t>b</m:t>+        </m:r>+        <m:r>+          <m:t>c</m:t>+        </m:r>+      </m:e>+    </m:borderBox>+    <m:r>+      <m:t>d</m:t>+    </m:r>+    <m:r>+      <m:rPr>+        <m:sty m:val="p" />+      </m:rPr>+      <m:t>+</m:t>+    </m:r>+    <m:borderBox>+      <m:borderBoxPr>+        <m:hideTop m:val="1" />+        <m:hideBot m:val="1" />+        <m:hideLeft m:val="1" />+        <m:hideRight m:val="1" />+        <m:strikeTLBR m:val="1" />+      </m:borderBoxPr>+      <m:e>+        <m:sSup>+          <m:e>+            <m:r>+              <m:t>x</m:t>+            </m:r>+          </m:e>+          <m:sup>+            <m:r>+              <m:t>2</m:t>+            </m:r>+          </m:sup>+        </m:sSup>+      </m:e>+    </m:borderBox>+    <m:r>+      <m:rPr>+        <m:sty m:val="p" />+      </m:rPr>+      <m:t>=</m:t>+    </m:r>+    <m:r>+      <m:t>d</m:t>+    </m:r>+    <m:r>+      <m:rPr>+        <m:sty m:val="p" />+      </m:rPr>+      <m:t>+</m:t>+    </m:r>+    <m:borderBox>+      <m:borderBoxPr>+        <m:hideTop m:val="1" />+        <m:hideBot m:val="1" />+        <m:hideLeft m:val="1" />+        <m:hideRight m:val="1" />+        <m:strikeBLTR m:val="1" />+        <m:strikeTLBR m:val="1" />+      </m:borderBoxPr>+      <m:e>+        <m:sSup>+          <m:e>+            <m:r>+              <m:t>x</m:t>+            </m:r>+          </m:e>+          <m:sup>+            <m:r>+              <m:t>2</m:t>+            </m:r>+          </m:sup>+        </m:sSup>+      </m:e>+    </m:borderBox>+  </m:oMath>+</m:oMathPara>
test/writer/omml/complex3.test view
@@ -17527,7 +17527,7 @@         <m:e>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>a</m:t>           </m:r>@@ -17539,7 +17539,7 @@           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>b</m:t>           </m:r>@@ -17551,7 +17551,7 @@           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>c</m:t>           </m:r>@@ -17603,7 +17603,7 @@           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>x</m:t>           </m:r>@@ -17851,7 +17851,7 @@           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>o</m:t>           </m:r>@@ -17863,7 +17863,7 @@           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>v</m:t>           </m:r>@@ -17875,7 +17875,7 @@           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>e</m:t>           </m:r>@@ -17887,7 +17887,7 @@           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>r</m:t>           </m:r>@@ -18759,7 +18759,7 @@                 </m:r>                 <m:r>                   <m:rPr>-                    <m:sty m:val="b" />+                    <m:sty m:val="bi" />                   </m:rPr>                   <m:t>u</m:t>                 </m:r>@@ -24005,7 +24005,7 @@           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>I</m:t>           </m:r>@@ -30415,7 +30415,7 @@                     <m:e>                       <m:r>                         <m:rPr>-                          <m:sty m:val="b" />+                          <m:sty m:val="bi" />                         </m:rPr>                         <m:t>R</m:t>                       </m:r>@@ -30620,7 +30620,7 @@               </m:r>               <m:r>                 <m:rPr>-                  <m:sty m:val="b" />+                  <m:sty m:val="bi" />                 </m:rPr>                 <m:t>F</m:t>               </m:r>@@ -30634,7 +30634,7 @@           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>k</m:t>           </m:r>
test/writer/omml/miequivalents11.test view
@@ -153,7 +153,7 @@           </m:r>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>A</m:t>           </m:r>
test/writer/omml/mimathvariant13.test view
@@ -177,7 +177,7 @@         <m:e>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>a</m:t>           </m:r>@@ -291,7 +291,7 @@         <m:e>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>ab</m:t>           </m:r>@@ -311,7 +311,7 @@         <m:e>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>A</m:t>           </m:r>@@ -425,7 +425,7 @@         <m:e>           <m:r>             <m:rPr>-              <m:sty m:val="b" />+              <m:sty m:val="bi" />             </m:rPr>             <m:t>α</m:t>           </m:r>
+ test/writer/starmath/001_dot_text_subscript.test view
@@ -0,0 +1,4 @@+<<< tex+\dot{Q}_{\text{dem}}(t)=\dot{Q}_{\text{eb}}(t)+\dot{Q}_{\text{dis}}(t)+\dot{Q}_{\text{boil}}(t),+>>> starmath+{dot Q}_"dem"(t) = {dot Q}_"eb"(t) + {dot Q}_"dis"(t) + {dot Q}_"boil"(t),
+ test/writer/starmath/002_common_accents.test view
@@ -0,0 +1,4 @@+<<< tex+\ddot{x}+\hat{x}+\tilde{x}+\vec{x}+\bar{x}+>>> starmath+ddot x + hat x + tilde x + vec x + bar x
+ test/writer/starmath/003_fraction.test view
@@ -0,0 +1,4 @@+<<< tex+\frac{a+b}{c}+>>> starmath+{{a + b} over c}
+ test/writer/starmath/004_square_root.test view
@@ -0,0 +1,4 @@+<<< tex+\sqrt{x+1}+>>> starmath+sqrt {{x + 1}}
+ test/writer/starmath/005_nth_root.test view
@@ -0,0 +1,4 @@+<<< tex+\sqrt[3]{x}+>>> starmath+nroot {3} {x}
+ test/writer/starmath/006_subscript_and_superscript.test view
@@ -0,0 +1,4 @@+<<< tex+x_i^2+>>> starmath+x_i^2
+ test/writer/starmath/007_superscript_with_grouped_base.test view
@@ -0,0 +1,4 @@+<<< tex+(a+b)^2+>>> starmath+(a + b)^2
+ test/writer/starmath/008_delimited_fraction.test view
@@ -0,0 +1,4 @@+<<< tex+\left(\frac{a}{b}\right)+>>> starmath+left ( {a over b} right )
+ test/writer/starmath/009_delimited_braces.test view
@@ -0,0 +1,4 @@+<<< tex+\left\{\frac{a}{b}\right\}+>>> starmath+left lbrace {a over b} right rbrace
+ test/writer/starmath/01.test view
@@ -0,0 +1,22 @@+<<< native+[ EIdentifier "x"+, ESymbol Rel "="+, EFraction+    NormalFrac+    (EGrouped+       [ ESymbol Ord "\8722"+       , EIdentifier "b"+       , ESymbol Bin "\177"+       , ESqrt+           (EGrouped+              [ ESuper (EIdentifier "b") (ENumber "2")+              , ESymbol Bin "\8722"+              , ENumber "4"+              , EIdentifier "a"+              , EIdentifier "c"+              ])+       ])+    (EGrouped [ ENumber "2" , EIdentifier "a" ])+]+>>> starmath+x = {{- b plusminus sqrt {{b^2 - 4ac}}} over {2a}}
+ test/writer/starmath/010_absolute_value_bars_normalize_to_delimiters.test view
@@ -0,0 +1,4 @@+<<< tex+|r_i| \le \varepsilon_{\mathrm{free}}+>>> starmath+left lline r_i right rline <= %ivarepsilon_"free"
+ test/writer/starmath/011_double_bars_normalize_to_norm_delimiters.test view
@@ -0,0 +1,4 @@+<<< tex+\|\mathbf{A}\mathbf{n} - \mathbf{b}\|+>>> starmath+left ldline bold nitalic A bold nitalic n - bold nitalic b right rdline
+ test/writer/starmath/012_one_sided_delimiter_uses_none.test view
@@ -0,0 +1,4 @@+<<< tex+\left. x \right|+>>> starmath+left none x right rline
+ test/writer/starmath/013_middle_delimiter_uses_mline.test view
@@ -0,0 +1,4 @@+<<< tex+\left( x \middle| y \right)+>>> starmath+left ( x mline y right )
+ test/writer/starmath/014_operator_mapping_cdot.test view
@@ -0,0 +1,4 @@+<<< tex+a\cdot b+>>> starmath+a cdot b
+ test/writer/starmath/015_binomial_nolinefrac.test view
@@ -0,0 +1,4 @@+<<< tex+\binom{n}{k}+>>> starmath+left ( binom{n}{k} right )
+ test/writer/starmath/016_integral_without_limits.test view
@@ -0,0 +1,4 @@+<<< tex+\int x\,dx+>>> starmath+int x dx
+ test/writer/starmath/017_integral_with_lower_and_upper_limits.test view
@@ -0,0 +1,4 @@+<<< tex+\int_0^1 x\,dx+>>> starmath+int_0^1 x dx
+ test/writer/starmath/018_integral_with_infinite_upper_limit.test view
@@ -0,0 +1,4 @@+<<< tex+\int_{0}^{\infty} e^{-x}\,dx+>>> starmath+int_0^infinity e^{{- x}} dx
+ test/writer/starmath/019_sum_with_lower_and_upper_limits.test view
@@ -0,0 +1,4 @@+<<< tex+\sum_{i=1}^{n} i+>>> starmath+sum from i = 1 to n i
+ test/writer/starmath/02.test view
@@ -0,0 +1,25 @@+<<< native+[ ENumber "2"+, ESymbol Rel "="+, EDelimited+    "("+    ")"+    [ Right+        (EFraction+           NormalFrac+           (EGrouped+              [ EDelimited+                  "("+                  ")"+                  [ Right (ENumber "3")+                  , Right (ESymbol Bin "\8722")+                  , Right (EIdentifier "x")+                  ]+              , ESymbol Bin "\215"+              , ENumber "2"+              ])+           (EGrouped [ ENumber "3" , ESymbol Bin "\8722" , EIdentifier "x" ]))+    ]+]+>>> starmath+2 = left ( {{left ( 3 - x right ) times 2} over {3 - x}} right )
+ test/writer/starmath/020_sum_with_symbolic_term.test view
@@ -0,0 +1,4 @@+<<< tex+\sum_{k=1}^{n} a_k+>>> starmath+sum from k = 1 to n a_k
+ test/writer/starmath/021_greek_letter_mapping.test view
@@ -0,0 +1,4 @@+<<< tex+\alpha + \beta + \Gamma + \Omega+>>> starmath+%ialpha + %ibeta + %GAMMA + %OMEGA
+ test/writer/starmath/022_greek_variant_mapping.test view
@@ -0,0 +1,4 @@+<<< tex+\phi + \varphi + \epsilon + \varepsilon + \vartheta+>>> starmath+%iphi + %ivarphi + %iepsilon + %ivarepsilon + %ivartheta
+ test/writer/starmath/023_arrow_mapping.test view
@@ -0,0 +1,4 @@+<<< tex+x \to y, x \leftarrow y, x \Rightarrow y, x \Leftrightarrow y+>>> starmath+x toward y, x leftarrow y, x drarrow y, x dlrarrow y
+ test/writer/starmath/024_set_and_relation_symbol_mapping.test view
@@ -0,0 +1,4 @@+<<< tex+A \subseteq B, A \cup B, x \in A, x \notin B+>>> starmath+A subseteq B, A union B, x in A, x notin B
+ test/writer/starmath/025_logic_and_calculus_symbol_mapping.test view
@@ -0,0 +1,4 @@+<<< tex+\forall x \exists y, \nabla f = 0, \partial_t u+>>> starmath+forall x exists y, nabla f = 0, partial_t u
+ test/writer/starmath/026_greek_identifier_spacing_in_products.test view
@@ -0,0 +1,4 @@+<<< tex+E_{k+1}=E_{k+\frac12}-\frac{\dot{Q}_{\text{dis},k}\Delta t}{\eta_{\text{dis}}},+>>> starmath+E_{{k + 1}} = E_{{k + {1 over 2}}} - {{{dot Q}_{{"dis", k}} %DELTA t} over %ieta_"dis"},
+ test/writer/starmath/027_math_operators_rendered_as_functions.test view
@@ -0,0 +1,4 @@+<<< tex+E_{k+1}\leftarrow\min\!\left(E^{\text{cap}}_{\text{s}},\max(0,E_{k+1})\right).+>>> starmath+E_{{k + 1}} leftarrow func min left ( E_"s"^"cap", func max(0, E_{{k + 1}}) right ).
+ test/writer/starmath/028_nested_function_with_left_delimiter_spacing.test view
@@ -0,0 +1,4 @@+<<< tex+P_{\text{ch}, k}=\max\!\left(0,\min\!\left(P'_{\text{pv}, k},\,P^{\text{cap}}_{\text{ch}},\,P_{\text{ch,head}, k}\right)\right).+>>> starmath+P_{{"ch", k}} = func max left ( 0, func min left ( P_{{"pv", k}}', P_"ch"^"cap", P_{{"ch,head", k}} right ) right ).
+ test/writer/starmath/029_quad_spacing_command.test view
@@ -0,0 +1,4 @@+<<< tex+a,\quad b+>>> starmath+a, ~ b
+ test/writer/starmath/03.test view
@@ -0,0 +1,13 @@+<<< native+[ EIdentifier "a"+, ESuper (EIdentifier "x") (ENumber "2")+, ESymbol Bin "+"+, EIdentifier "b"+, EIdentifier "x"+, ESymbol Bin "+"+, EIdentifier "c"+, ESymbol Rel "="+, ENumber "0"+]+>>> starmath+ax^2 + bx + c = 0
+ test/writer/starmath/030_qquad_spacing_command.test view
@@ -0,0 +1,4 @@+<<< tex+a,\qquad b+>>> starmath+a, ~~ b
+ test/writer/starmath/031_greek_token_separator_before_scripted_identifier.test view
@@ -0,0 +1,4 @@+<<< tex+f_{\text{eff}}=(1-\lambda)f_{\text{m}}+\lambda f_{\text{l}}.+>>> starmath+f_"eff" = (1 - %ilambda) f_"m" + %ilambda f_"l".
+ test/writer/starmath/032_mathrm_text_in_subscripts_stays_quoted.test view
@@ -0,0 +1,4 @@+<<< tex+n_{\mathrm{Fe,metal}} = n_{\mathrm{Fe_bcc}} + n_{\mathrm{Fe_fcc}}+>>> starmath+n_"Fe,metal" = n_{nitalic{Fe_b cc}} + n_{nitalic{Fe_f cc}}
+ test/writer/starmath/033_escaped_underscore_in_mathrm_stays_literal.test view
@@ -0,0 +1,4 @@+<<< tex+n_{\mathrm{wus}} = n_{\mathrm{Wus\_FeO}} + n_{\mathrm{Wus\_FeO1p5}}+>>> starmath+n_"wus" = n_"Wus_FeO" + n_"Wus_FeO1p5"
+ test/writer/starmath/034_numeric_chemistry_subscripts_in_mathrm_stay_structural.test view
@@ -0,0 +1,4 @@+<<< tex+\frac{n_{\mathrm{H_2O}}}{n_{\mathrm{H_2}}}\qquad \text{or} \qquad \frac{p_{\mathrm{H_2O}}}{p_{\mathrm{H_2}}}+>>> starmath+{n_{nitalic{H_2 O}} over n_{nitalic{H_2}}}~~ "or"~~ {p_{nitalic{H_2 O}} over p_{nitalic{H_2}}}
+ test/writer/starmath/035_circ_operator_maps_to_starmath_command.test view
@@ -0,0 +1,4 @@+<<< tex+\mu_i^\circ(T, P^\circ)+>>> starmath+%imu_i^circ(T, P^circ)
+ test/writer/starmath/036_min_with_bold_limit_variable_uses_operator_limits.test view
@@ -0,0 +1,4 @@+<<< tex+\min_{\mathbf{n}}\; G(\mathbf{n})+>>> starmath+{func min} csub {bold nitalic n} G(bold nitalic n)
+ test/writer/starmath/037_identifier_before_function_gets_separator.test view
@@ -0,0 +1,4 @@+<<< tex+\mu_i(T,P,\mathbf{n}) = \mu_i^\circ(T,P^\circ) + RT\ln\left(\frac{y_i P}{P^\circ}\right)+>>> starmath+%imu_i(T, P, bold nitalic n) = %imu_i^circ(T, P^circ) + RT ln left ( {{y_i P} over P^circ} right )
+ test/writer/starmath/038_greek_identifier_before_punctuation_gets_separator.test view
@@ -0,0 +1,4 @@+<<< tex+\xi.+>>> starmath+%ixi .
+ test/writer/starmath/039_greek_identifier_before_punctuation_in_larger_expression.test view
@@ -0,0 +1,4 @@+<<< tex+(\mathbf{H}+\lambda\mathbf{I})\Delta\mathbf{z} = -\nabla\phi.+>>> starmath+(bold nitalic H + %ilambda bold nitalic I) %DELTA bold nitalic z = -nabla %iphi .
+ test/writer/starmath/04.test view
@@ -0,0 +1,20 @@+<<< native+[ ESub (EIdentifier "S") (EText TextNormal "new")+, ESymbol Rel "="+, ESub (EIdentifier "S") (EText TextNormal "old")+, ESymbol Bin "\8722"+, EFraction+    NormalFrac+    (ESuper+       (EDelimited+          "("+          ")"+          [ Right (ENumber "5")+          , Right (ESymbol Bin "\8722")+          , Right (EIdentifier "T")+          ])+       (ENumber "2"))+    (ENumber "2")+]+>>> starmath+S_"new" = S_"old" - {{left ( 5 - T right )}^2 over 2}
+ test/writer/starmath/040_bare_recognized_math_operators_omit_func_and_keep_spacing.test view
@@ -0,0 +1,4 @@+<<< tex+\min x\log x\operatorname{log} x\sin x\cos x\max x\cosh x\sinh x\cot x\ln x\exp x+>>> starmath+func min x log x log x sin x cos x func max x cosh x sinh x cot x ln x exp x
+ test/writer/starmath/041_ordinary_function_with_subscript_keeps_ordinary_script_syntax.test view
@@ -0,0 +1,4 @@+<<< tex+\Delta\log_{10}K_j = \log_{10}K_{j,\mathrm{FPROPS}} - \log_{10}K_{j,\mathrm{ref}},\qquad j=1,\dots,r.+>>> starmath+%DELTA log_10 K_j = log_10 K_{{j, "FPROPS"}} - log_10 K_{{j, "ref"}}, ~~ j = 1, dotslow , r.
+ test/writer/starmath/042_adjacent_bold_terms_get_separator.test view
@@ -0,0 +1,4 @@+<<< tex+\mathcal{L}(\mathbf{n},\boldsymbol\lambda,\mathbf{s}) = G(\mathbf{n}) + \boldsymbol\lambda^T(\mathbf{A}\mathbf{n}-\mathbf{b}) - \mathbf{s}^T\mathbf{n}.+>>> starmath+nitalic ℒ(bold nitalic n, bold {%ilambda}, bold nitalic s) = G(bold nitalic n) + {bold {%ilambda}}^T(bold nitalic A bold nitalic n - bold nitalic b) - {bold nitalic s}^T bold nitalic n.
+ test/writer/starmath/043_mathcal_styled_token_before_left_delimiter.test view
@@ -0,0 +1,4 @@+<<< tex+\min\ \mathcal{J}\left(P^{\text{cap}}_{\text{pv}},N_{\text{u}},P^{\text{cap}}_{\text{eb}}\right)+>>> starmath+func min nitalic 𝒥 left ( P_"pv"^"cap", N_"u", P_"eb"^"cap" right )
+ test/writer/starmath/044_leading_binary_operator_gets_neutral_lhs.test view
@@ -0,0 +1,4 @@+<<< tex+\times\Delta t+>>> starmath+{} times %DELTA t
+ test/writer/starmath/045_standalone_binary_operator_gets_neutral_operands.test view
@@ -0,0 +1,4 @@+<<< tex+\times+>>> starmath+{} times {}
+ test/writer/starmath/046_trailing_binary_operator_gets_neutral_rhs.test view
@@ -0,0 +1,4 @@+<<< tex+a\times+>>> starmath+a times {}
+ test/writer/starmath/047_standalone_relation_gets_neutral_operands.test view
@@ -0,0 +1,4 @@+<<< tex+\leq+>>> starmath+{} <= {}
+ test/writer/starmath/048_standalone_arrow_gets_neutral_operands.test view
@@ -0,0 +1,4 @@+<<< tex+\rightarrow+>>> starmath+{} toward {}
+ test/writer/starmath/049_subscript_only_fragment_gets_neutral_base.test view
@@ -0,0 +1,4 @@+<<< tex+_2+>>> starmath+{}_2
+ test/writer/starmath/05.test view
@@ -0,0 +1,33 @@+<<< native+[ ESubsup (ESymbol Op "\8747") (EIdentifier "a") (EIdentifier "x")+, ESpace ((-1) % 6)+, ESpace ((-1) % 6)+, ESpace ((-1) % 6)+, ESubsup (ESymbol Op "\8747") (EIdentifier "a") (EIdentifier "s")+, EIdentifier "f"+, ESymbol Open "("+, EIdentifier "y"+, ESymbol Close ")"+, ESpace (1 % 6)+, EIdentifier "d"+, EIdentifier "y"+, ESpace (1 % 6)+, EIdentifier "d"+, EIdentifier "s"+, ESymbol Rel "="+, ESubsup (ESymbol Op "\8747") (EIdentifier "a") (EIdentifier "x")+, EIdentifier "f"+, ESymbol Open "("+, EIdentifier "y"+, ESymbol Close ")"+, ESymbol Open "("+, EIdentifier "x"+, ESymbol Bin "\8722"+, EIdentifier "y"+, ESymbol Close ")"+, ESpace (1 % 6)+, EIdentifier "d"+, EIdentifier "y"+]+>>> starmath+int_a^x int_a^s f(y) dy ds = int_a^x f(y)(x - y) dy
+ test/writer/starmath/050_superscript_only_fragment_gets_neutral_base.test view
@@ -0,0 +1,4 @@+<<< tex+^++>>> starmath+{}^{{} + {}}
+ test/writer/starmath/051_grouped_subscript_only_fragment_gets_neutral_base.test view
@@ -0,0 +1,4 @@+<<< tex+_{j,\mathrm{ref}}+>>> starmath+{}_{{j, "ref"}}
+ test/writer/starmath/052_matrix_environment.test view
@@ -0,0 +1,4 @@+<<< tex+\begin{matrix}a&b\\c&d\end{matrix}+>>> starmath+matrix { a # b ## c # d }
+ test/writer/starmath/053_pmatrix_environment.test view
@@ -0,0 +1,4 @@+<<< tex+\begin{pmatrix}a&b\\c&d\end{pmatrix}+>>> starmath+left ( matrix { a # b ## c # d } right )
+ test/writer/starmath/054_bmatrix_environment.test view
@@ -0,0 +1,4 @@+<<< tex+\begin{bmatrix}a&b\\c&d\end{bmatrix}+>>> starmath+left [ matrix { a # b ## c # d } right ]
+ test/writer/starmath/055_vmatrix_environment.test view
@@ -0,0 +1,4 @@+<<< tex+\begin{vmatrix}a&b\\c&d\end{vmatrix}+>>> starmath+left lline matrix { a # b ## c # d } right rline
+ test/writer/starmath/056_vmatrix_environment.test view
@@ -0,0 +1,4 @@+<<< tex+\begin{Vmatrix}a&b\\c&d\end{Vmatrix}+>>> starmath+left ldline matrix { a # b ## c # d } right rdline
+ test/writer/starmath/057_array_with_left_right_alignment.test view
@@ -0,0 +1,4 @@+<<< tex+\begin{array}{lr}a&bbb\\ccc&d\end{array}+>>> starmath+matrix { alignl a # alignr bbb ## alignl ccc # alignr d }
+ test/writer/starmath/058_aligned_array_keeps_fractions_centered.test view
@@ -0,0 +1,4 @@+<<< tex+\begin{array}{l}\frac{AAA}{B}\end{array}+>>> starmath+matrix { alignl {{alignc {AAA}} over {alignc B}} }
+ test/writer/starmath/059_cases_environment.test view
@@ -0,0 +1,4 @@+<<< tex+\begin{cases}a, & x>0\\ b, & x\le 0\end{cases}+>>> starmath+left lbrace matrix { alignl a, # alignl x > 0 ## alignl b, # alignl x <= 0 } right none
+ test/writer/starmath/06.test view
@@ -0,0 +1,35 @@+<<< native+[ EUnderover+    True+    (ESymbol Op "\8721")+    (EGrouped [ EIdentifier "m" , ESymbol Rel "=" , ENumber "1" ])+    (ESymbol Ord "\8734")+, EUnderover+    True+    (ESymbol Op "\8721")+    (EGrouped [ EIdentifier "n" , ESymbol Rel "=" , ENumber "1" ])+    (ESymbol Ord "\8734")+, EFraction+    NormalFrac+    (EGrouped+       [ ESuper (EIdentifier "m") (ENumber "2")+       , ESpace (1 % 6)+       , EIdentifier "n"+       ])+    (EGrouped+       [ ESuper (ENumber "3") (EIdentifier "m")+       , EDelimited+           "("+           ")"+           [ Right (EIdentifier "m")+           , Right (ESpace (1 % 6))+           , Right (ESuper (ENumber "3") (EIdentifier "n"))+           , Right (ESymbol Bin "+")+           , Right (EIdentifier "n")+           , Right (ESpace (1 % 6))+           , Right (ESuper (ENumber "3") (EIdentifier "m"))+           ]+       ])+]+>>> starmath+sum from m = 1 to infinity sum from n = 1 to infinity {{m^2 n} over {3^m left ( m 3^n + n 3^m right )}}
+ test/writer/starmath/060_cases_with_negative_log_fraction.test view
@@ -0,0 +1,4 @@+<<< tex+t_{\text{pb,disc}}=\begin{cases}\dfrac{C_{\text{tot}}}{B}, & r=0,\\\dfrac{-\ln\!\left(1-rC_{\text{tot}}/B\right)}{\ln(1+r)}, & r>0\text{ and }1-rC_{\text{tot}}/B>0,\\\infty, & \text{otherwise}.\end{cases}+>>> starmath+t_"pb,disc" = left lbrace matrix { alignl {{alignc {C_"tot"}} over {alignc B}}, # alignl r = 0, ## alignl {{alignc {- ln left ( 1 - rC_"tot" / B right )}} over {alignc {ln(1 + r)}}}, # alignl r > 0" and "1 - rC_"tot" / B > 0, ## alignl infinity, # alignl "otherwise". } right none
+ test/writer/starmath/061_phantom_alignment.test view
@@ -0,0 +1,7 @@+<<< tex+\begin{gathered}+x + y = 2x + y - x \\+\phantom{x+y} = 3x + y - 2x+\end{gathered}+>>> starmath+matrix { x + y = 2x + y - x ## phantom {x + y} = 3x + y - 2x }
+ test/writer/starmath/062_fallback_to_tex_for_under_over_constructs.test view
@@ -0,0 +1,4 @@+<<< tex+\underbrace{x+y}_{z}+\overbrace{x+y}^{z}+>>> starmath+{x + y} underbrace z + {x + y} overbrace z
+ test/writer/starmath/063_demorgans_law.test view
@@ -0,0 +1,5 @@+<<< tex+\neg(p\wedge q)\iff(\neg p)\vee(\neg q)+  \overline{\bigcup_{i=1}^{n} A_{i}}=\bigcap_{i=1}^{n} \overline{A_{i}}+>>> starmath+neg (p and q) dlrarrow (neg p) or (neg q) overline {{oper ∪ from i = 1 to n A_i}} = oper ∩ from i = 1 to n overline {A_i}
+ test/writer/starmath/063_extensible_arrows_use_centered_scripts.test view
@@ -0,0 +1,10 @@+<<< native+[ EIdentifier "X"+, EOver False (ESymbol Op "\8660") (EIdentifier "h")+, EIdentifier "Y"+, EUnderover+    False (ESymbol Op "\8658") (EIdentifier "k") (EGrouped [])+, EIdentifier "Z"+]+>>> starmath+X dlrarrow csup {h} Y drarrow csub {k} Z
+ test/writer/starmath/064_centered_array_omits_explicit_alignc.test view
@@ -0,0 +1,13 @@+<<< native+[ EArray+    [ AlignCenter , AlignCenter ]+    [ [ [ EIdentifier "a" ]+      , [ EIdentifier "b" ]+      ]+    , [ [ EIdentifier "c" ]+      , [ EIdentifier "d" ]+      ]+    ]+]+>>> starmath+matrix { a # b ## c # d }
+ test/writer/starmath/065_reserved_word_in_uptext_subscript_is_quoted.test view
@@ -0,0 +1,4 @@+<<< tex+y_{\mathrm{H_2,in}} = 1+>>> starmath+y_{nitalic{H_2,"in"}} = 1
+ test/writer/starmath/066_standalone_plus_minus_scripts_get_neutral_operands.test view
@@ -0,0 +1,4 @@+<<< tex+r_{r,e}=r_{r,e}^{+}-r_{r,e}^{-}+>>> starmath+r_{{r, e}} = r_{{r, e}}^{{} + {}} - r_{{r, e}}^{{} - {}}
+ test/writer/starmath/067_integral_default_limits_use_scripts.test view
@@ -0,0 +1,4 @@+<<< tex+\int_0^1 f(x)\,dx+>>> starmath+int_0^1 f(x) dx
+ test/writer/starmath/068_integral_limits_use_from_to.test view
@@ -0,0 +1,4 @@+<<< tex+\int\limits_0^1 f(x)\,dx+>>> starmath+int from 0 to 1 f(x) dx
+ test/writer/starmath/069_integral_nolimits_use_scripts.test view
@@ -0,0 +1,4 @@+<<< tex+\int\nolimits_0^1 f(x)\,dx+>>> starmath+int_0^1 f(x) dx
+ test/writer/starmath/07.test view
@@ -0,0 +1,27 @@+<<< native+[ ESuper (EIdentifier "u") (ESymbol Pun "\8243")+, ESymbol Bin "+"+, EIdentifier "p"+, ESymbol Open "("+, EIdentifier "x"+, ESymbol Close ")"+, ESuper (EIdentifier "u") (ESymbol Pun "\8242")+, ESymbol Bin "+"+, EIdentifier "q"+, ESymbol Open "("+, EIdentifier "x"+, ESymbol Close ")"+, EIdentifier "u"+, ESymbol Rel "="+, EIdentifier "f"+, ESymbol Open "("+, EIdentifier "x"+, ESymbol Close ")"+, ESymbol Pun ","+, ESpace (1 % 1)+, EIdentifier "x"+, ESymbol Rel ">"+, EIdentifier "a"+]+>>> starmath+u'' + p(x) u' + q(x) u = f(x), ~ x > a
+ test/writer/starmath/070_normal_fraction_display_inline_uses_inline_size.test view
@@ -0,0 +1,4 @@+<<< native+[ EFraction NormalFrac (EIdentifier "a") (EIdentifier "b") ]+>>> starmath-inline+size*0.7 {a over b}
+ test/writer/starmath/071_grouped_mathrm_alpha_subscripts_stay_structural.test view
@@ -0,0 +1,4 @@+<<< tex+n_{\mathrm{Fe_{bcc}}} + n_{\mathrm{Fe_{fcc}}}+>>> starmath+n_{nitalic{Fe_bcc}} + n_{nitalic{Fe_fcc}}
+ test/writer/starmath/08.test view
@@ -0,0 +1,32 @@+<<< native+[ ESymbol Open "|"+, EOver False (EIdentifier "z") (ESymbol Accent "\8254")+, ESymbol Open "|"+, ESymbol Rel "="+, ESymbol Open "|"+, EIdentifier "z"+, ESymbol Open "|"+, ESymbol Pun ","+, ESymbol Open "|"+, ESymbol Open "("+, EOver False (EIdentifier "z") (ESymbol Accent "\8254")+, ESuper (ESymbol Close ")") (EIdentifier "n")+, ESymbol Open "|"+, ESymbol Rel "="+, ESymbol Open "|"+, EIdentifier "z"+, ESuper (ESymbol Open "|") (EIdentifier "n")+, ESymbol Pun ","+, EMathOperator "arg"+, ESymbol Open "("+, ESuper (EIdentifier "z") (EIdentifier "n")+, ESymbol Close ")"+, ESymbol Rel "="+, EIdentifier "n"+, EMathOperator "arg"+, ESymbol Open "("+, EIdentifier "z"+, ESymbol Close ")"+]+>>> starmath+left lline bar z right rline = left lline z right rline, left lline (bar z )^n right rline = {left lline z right rline}^n, func arg(z^n) = n func arg(z)
+ test/writer/starmath/09.test view
@@ -0,0 +1,21 @@+<<< native+[ EUnder+    True+    (EMathOperator "lim")+    (EGrouped+       [ EIdentifier "z"+       , ESymbol Rel "\8594"+       , ESub (EIdentifier "z") (ENumber "0")+       ])+, EIdentifier "f"+, ESymbol Open "("+, EIdentifier "z"+, ESymbol Close ")"+, ESymbol Rel "="+, EIdentifier "f"+, ESymbol Open "("+, ESub (EIdentifier "z") (ENumber "0")+, ESymbol Close ")"+]+>>> starmath+lim from z toward z_0 f(z) = f(z_0)
+ test/writer/starmath/10.test view
@@ -0,0 +1,51 @@+<<< native+[ ESub (EIdentifier "\981") (EIdentifier "n")+, ESymbol Open "("+, EIdentifier "\954"+, ESymbol Close ")"+, ESymbol Rel "="+, EFraction+    NormalFrac+    (ENumber "1")+    (EGrouped+       [ ENumber "4"+       , ESuper (EIdentifier "\960") (ENumber "2")+       , ESuper (EIdentifier "\954") (ENumber "2")+       ])+, ESubsup (ESymbol Op "\8747") (ENumber "0") (ESymbol Ord "\8734")+, EFraction+    NormalFrac+    (EGrouped+       [ EMathOperator "sin"+       , ESymbol Open "("+       , EIdentifier "\954"+       , EIdentifier "R"+       , ESymbol Close ")"+       ])+    (EGrouped [ EIdentifier "\954" , EIdentifier "R" ])+, EFraction+    NormalFrac+    (ESymbol Ord "\8706")+    (EGrouped [ ESymbol Ord "\8706" , EIdentifier "R" ])+, EDelimited+    "["+    "]"+    [ Right (ESuper (EIdentifier "R") (ENumber "2"))+    , Right+        (EFraction+           NormalFrac+           (EGrouped+              [ ESymbol Ord "\8706"+              , ESub (EIdentifier "D") (EIdentifier "n")+              , ESymbol Open "("+              , EIdentifier "R"+              , ESymbol Close ")"+              ])+           (EGrouped [ ESymbol Ord "\8706" , EIdentifier "R" ]))+    ]+, ESpace (1 % 6)+, EIdentifier "d"+, EIdentifier "R"+]+>>> starmath+%iphi_n(%ikappa) = {1 over {4%ipi^2 %ikappa^2}}int_0^infinity {{sin(%ikappa R)} over {%ikappa R}}{partial over {partial R}}left [ R^2{{partial D_n(R)} over {partial R}} right ] dR
+ test/writer/starmath/11.test view
@@ -0,0 +1,28 @@+<<< native+[ ESub (EIdentifier "\981") (EIdentifier "n")+, ESymbol Open "("+, EIdentifier "\954"+, ESymbol Close ")"+, ESymbol Rel "="+, ENumber "0.033"+, ESubsup (EIdentifier "C") (EIdentifier "n") (ENumber "2")+, ESuper+    (EIdentifier "\954")+    (EGrouped+       [ ESymbol Ord "\8722"+       , ENumber "11"+       , ESymbol Ord "/"+       , ENumber "3"+       ])+, ESymbol Pun ","+, ESpace (1 % 1)+, EFraction+    NormalFrac (ENumber "1") (ESub (EIdentifier "L") (ENumber "0"))+, ESymbol Rel "\8810"+, EIdentifier "\954"+, ESymbol Rel "\8810"+, EFraction+    NormalFrac (ENumber "1") (ESub (EIdentifier "l") (ENumber "0"))+]+>>> starmath+%iphi_n(%ikappa) = 0.033C_n^2 %ikappa^{{- 11 / 3}}, ~ {1 over L_0} ll %ikappa ll {1 over l_0}
+ test/writer/starmath/12.test view
@@ -0,0 +1,35 @@+<<< native+[ EIdentifier "f"+, ESymbol Open "("+, EIdentifier "x"+, ESymbol Close ")"+, ESymbol Rel "="+, EDelimited+    "{"+    ""+    [ Right+        (EArray+           [ AlignLeft , AlignLeft ]+           [ [ [ ENumber "1" ]+             , [ ESymbol Ord "\8722"+               , ENumber "1"+               , ESymbol Rel "\8804"+               , EIdentifier "x"+               , ESymbol Rel "<"+               , ENumber "0"+               ]+             ]+           , [ [ EFraction NormalFrac (ENumber "1") (ENumber "2") ]+             , [ EIdentifier "x" , ESymbol Rel "=" , ENumber "0" ]+             ]+           , [ [ ENumber "1"+               , ESymbol Bin "\8722"+               , ESuper (EIdentifier "x") (ENumber "2")+               ]+             , [ EText TextNormal "otherwise" ]+             ]+           ])+    ]+]+>>> starmath+f(x) = left lbrace matrix { alignl 1 # alignl - 1 <= x < 0 ## alignl {{alignc 1} over {alignc 2}} # alignl x = 0 ## alignl 1 - x^2 # alignl "otherwise" } right none
+ test/writer/starmath/13.test view
@@ -0,0 +1,51 @@+<<< native+[ ESub (EGrouped []) (EIdentifier "p")+, ESub (EIdentifier "F") (EIdentifier "q")+, ESymbol Open "("+, ESub (EIdentifier "a") (ENumber "1")+, ESymbol Pun ","+, ESymbol Ord "\8230"+, ESymbol Pun ","+, ESub (EIdentifier "a") (EIdentifier "p")+, ESymbol Pun ";"+, ESub (EIdentifier "c") (ENumber "1")+, ESymbol Pun ","+, ESymbol Ord "\8230"+, ESymbol Pun ","+, ESub (EIdentifier "c") (EIdentifier "q")+, ESymbol Pun ";"+, EIdentifier "z"+, ESymbol Close ")"+, ESymbol Rel "="+, EUnderover+    True+    (ESymbol Op "\8721")+    (EGrouped [ EIdentifier "n" , ESymbol Rel "=" , ENumber "0" ])+    (ESymbol Ord "\8734")+, EFraction+    NormalFrac+    (EGrouped+       [ ESymbol Open "("+       , ESub (EIdentifier "a") (ENumber "1")+       , ESub (ESymbol Close ")") (EIdentifier "n")+       , ESymbol Ord "\8943"+       , ESymbol Open "("+       , ESub (EIdentifier "a") (EIdentifier "p")+       , ESub (ESymbol Close ")") (EIdentifier "n")+       ])+    (EGrouped+       [ ESymbol Open "("+       , ESub (EIdentifier "c") (ENumber "1")+       , ESub (ESymbol Close ")") (EIdentifier "n")+       , ESymbol Ord "\8943"+       , ESymbol Open "("+       , ESub (EIdentifier "c") (EIdentifier "q")+       , ESub (ESymbol Close ")") (EIdentifier "n")+       ])+, EFraction+    NormalFrac+    (ESuper (EIdentifier "z") (EIdentifier "n"))+    (EGrouped [ EIdentifier "n" , ESymbol Ord "!" ])+]+>>> starmath+{}_p F_q(a_1, dotslow , a_p; c_1, dotslow , c_q; z) = sum from n = 0 to infinity {{(a_1 )_n dotsaxis (a_p )_n} over {(c_1 )_n dotsaxis (c_q )_n}}{z^n over {n ! }}
+ test/writer/starmath/14.test view
@@ -0,0 +1,7 @@+<<< native+[ EFraction NormalFrac (EIdentifier "a") (EIdentifier "b")+, ESpace (2 % 9)+, EFraction InlineFrac (EIdentifier "a") (EIdentifier "b")+]+>>> starmath+{a over b} size*0.7 {a over b}
+ test/writer/starmath/15.test view
@@ -0,0 +1,4 @@+<<< native+[ EFraction NormalFrac (EIdentifier "a") (ENumber "2") ]+>>> starmath+{a over 2}
+ test/writer/starmath/16.test view
@@ -0,0 +1,4 @@+<<< native+[ ENumber "3" , ESymbol Bin "\215" , ENumber "4" ]+>>> starmath+3 times 4
+ test/writer/starmath/17.test view
@@ -0,0 +1,11 @@+<<< native+[ EIdentifier "x"+, ESymbol Bin "*"+, ENumber "4"+, ESymbol Rel "="+, ENumber "4"+, ESymbol Bin "*"+, EIdentifier "x"+]+>>> starmath+x*4 = 4*x
+ test/writer/starmath/18.test view
@@ -0,0 +1,4 @@+<<< native+[ ENumber "1.3" , ESymbol Bin "\215" , ENumber ".2" ]+>>> starmath+1.3 times .2
+ test/writer/starmath/19.test view
@@ -0,0 +1,83 @@+<<< native+[ EDelimited+    "["+    "]"+    [ Right+        (EArray+           [ AlignCenter , AlignCenter ]+           [ [ [ EFraction+                   DisplayFrac+                   (EGrouped+                      [ ESymbol Ord "\8706" , ESub (EIdentifier "x") (ENumber "1") ])+                   (EGrouped+                      [ ESymbol Ord "\8706" , ESub (EIdentifier "y") (ENumber "1") ])+               ]+             , [ EFraction+                   DisplayFrac+                   (EGrouped+                      [ ESymbol Ord "\8706" , ESub (EIdentifier "x") (ENumber "2") ])+                   (EGrouped+                      [ ESymbol Ord "\8706" , ESub (EIdentifier "y") (ENumber "1") ])+               ]+             ]+           , [ [ ESpace (2 % 9) ] ]+           , [ [ EFraction+                   DisplayFrac+                   (EGrouped+                      [ ESymbol Ord "\8706" , ESub (EIdentifier "x") (ENumber "1") ])+                   (EGrouped+                      [ ESymbol Ord "\8706" , ESub (EIdentifier "y") (ENumber "2") ])+               ]+             , [ EFraction+                   DisplayFrac+                   (EGrouped+                      [ ESymbol Ord "\8706" , ESub (EIdentifier "x") (ENumber "2") ])+                   (EGrouped+                      [ ESymbol Ord "\8706" , ESub (EIdentifier "y") (ENumber "2") ])+               ]+             ]+           ])+    ]+, EDelimited+    "("+    ")"+    [ Right+        (EArray+           [ AlignCenter , AlignCenter ]+           [ [ [ ENumber "1" ] , [ ENumber "2" ] ]+           , [ [ ENumber "3" ] , [ ENumber "4" ] ]+           ])+    ]+, EDelimited+    "{"+    "}"+    [ Right+        (EArray+           [ AlignCenter , AlignCenter ]+           [ [ [ ENumber "1" ] , [ ENumber "2" ] ]+           , [ [ ENumber "3" ] , [ ENumber "4" ] ]+           ])+    ]+, EDelimited+    "\8739"+    "\8739"+    [ Right+        (EArray+           [ AlignCenter , AlignCenter ]+           [ [ [ ENumber "1" ] , [ ENumber "2" ] ]+           , [ [ ENumber "3" ] , [ ENumber "4" ] ]+           ])+    ]+, EDelimited+    "\8741"+    "\8741"+    [ Right+        (EArray+           [ AlignCenter , AlignCenter ]+           [ [ [ ENumber "1" ] , [ ENumber "2" ] ]+           , [ [ ENumber "3" ] , [ ENumber "4" ] ]+           ])+    ]+]+>>> starmath+left [ matrix { {{partial x_1} over {partial y_1}} # {{partial x_2} over {partial y_1}} ## {} # {} ## {{partial x_1} over {partial y_2}} # {{partial x_2} over {partial y_2}} } right ] left ( matrix { 1 # 2 ## 3 # 4 } right ) left lbrace matrix { 1 # 2 ## 3 # 4 } right rbrace left lline matrix { 1 # 2 ## 3 # 4 } right rline left ldline matrix { 1 # 2 ## 3 # 4 } right rdline
+ test/writer/starmath/20.test view
@@ -0,0 +1,119 @@+<<< native+[ EStyled TextScript [ EIdentifier "A" ]+, EStyled TextScript [ EIdentifier "B" ]+, EStyled TextScript [ EIdentifier "C" ]+, EStyled TextScript [ EIdentifier "D" ]+, EStyled TextScript [ EIdentifier "E" ]+, EStyled TextScript [ EIdentifier "F" ]+, EStyled TextScript [ EIdentifier "G" ]+, EStyled TextScript [ EIdentifier "H" ]+, EStyled TextScript [ EIdentifier "I" ]+, EStyled TextScript [ EIdentifier "J" ]+, EStyled TextScript [ EIdentifier "K" ]+, EStyled TextScript [ EIdentifier "L" ]+, EStyled TextScript [ EIdentifier "M" ]+, EStyled TextScript [ EIdentifier "N" ]+, EStyled TextScript [ EIdentifier "O" ]+, EStyled TextScript [ EIdentifier "P" ]+, EStyled TextScript [ EIdentifier "Q" ]+, EStyled TextScript [ EIdentifier "R" ]+, EStyled TextScript [ EIdentifier "S" ]+, EStyled TextScript [ EIdentifier "T" ]+, EStyled TextScript [ EIdentifier "U" ]+, EStyled TextScript [ EIdentifier "V" ]+, EStyled TextScript [ EIdentifier "W" ]+, EStyled TextScript [ EIdentifier "X" ]+, EStyled TextScript [ EIdentifier "Y" ]+, EStyled TextScript [ EIdentifier "Z" ]+, EStyled TextScript [ EIdentifier "a" ]+, EStyled TextScript [ EIdentifier "b" ]+, EStyled TextScript [ EIdentifier "c" ]+, EStyled TextScript [ EIdentifier "d" ]+, EStyled TextScript [ EIdentifier "e" ]+, EStyled TextScript [ EIdentifier "f" ]+, EStyled TextScript [ EIdentifier "g" ]+, EStyled TextScript [ EIdentifier "h" ]+, EStyled TextScript [ EIdentifier "i" ]+, EStyled TextScript [ EIdentifier "j" ]+, EStyled TextScript [ EIdentifier "k" ]+, EStyled TextScript [ EIdentifier "l" ]+, EStyled TextScript [ EIdentifier "m" ]+, EStyled TextScript [ EIdentifier "n" ]+, EStyled TextScript [ EIdentifier "o" ]+, EStyled TextScript [ EIdentifier "p" ]+, EStyled TextScript [ EIdentifier "q" ]+, EStyled TextScript [ EIdentifier "r" ]+, EStyled TextScript [ EIdentifier "s" ]+, EStyled TextScript [ EIdentifier "t" ]+, EStyled TextScript [ EIdentifier "u" ]+, EStyled TextScript [ EIdentifier "v" ]+, EStyled TextScript [ EIdentifier "w" ]+, EStyled TextScript [ EIdentifier "x" ]+, EStyled TextScript [ EIdentifier "y" ]+, EStyled TextScript [ EIdentifier "z" ]+, EStyled TextDoubleStruck [ EIdentifier "A" ]+, EStyled TextDoubleStruck [ EIdentifier "B" ]+, EStyled TextDoubleStruck [ EIdentifier "C" ]+, EStyled TextDoubleStruck [ EIdentifier "D" ]+, EStyled TextDoubleStruck [ EIdentifier "E" ]+, EStyled TextDoubleStruck [ EIdentifier "F" ]+, EStyled TextDoubleStruck [ EIdentifier "G" ]+, EStyled TextDoubleStruck [ EIdentifier "H" ]+, EStyled TextDoubleStruck [ EIdentifier "I" ]+, EStyled TextDoubleStruck [ EIdentifier "J" ]+, EStyled TextDoubleStruck [ EIdentifier "K" ]+, EStyled TextDoubleStruck [ EIdentifier "L" ]+, EStyled TextDoubleStruck [ EIdentifier "M" ]+, EStyled TextDoubleStruck [ EIdentifier "N" ]+, EStyled TextDoubleStruck [ EIdentifier "O" ]+, EStyled TextDoubleStruck [ EIdentifier "P" ]+, EStyled TextDoubleStruck [ EIdentifier "Q" ]+, EStyled TextDoubleStruck [ EIdentifier "R" ]+, EStyled TextDoubleStruck [ EIdentifier "S" ]+, EStyled TextDoubleStruck [ EIdentifier "T" ]+, EStyled TextDoubleStruck [ EIdentifier "U" ]+, EStyled TextDoubleStruck [ EIdentifier "V" ]+, EStyled TextDoubleStruck [ EIdentifier "W" ]+, EStyled TextDoubleStruck [ EIdentifier "X" ]+, EStyled TextDoubleStruck [ EIdentifier "Y" ]+, EStyled TextDoubleStruck [ EIdentifier "Z" ]+, EStyled TextDoubleStruck [ EIdentifier "a" ]+, EStyled TextDoubleStruck [ EIdentifier "b" ]+, EStyled TextDoubleStruck [ EIdentifier "c" ]+, EStyled TextDoubleStruck [ EIdentifier "d" ]+, EStyled TextDoubleStruck [ EIdentifier "e" ]+, EStyled TextDoubleStruck [ EIdentifier "f" ]+, EStyled TextDoubleStruck [ EIdentifier "g" ]+, EStyled TextDoubleStruck [ EIdentifier "h" ]+, EStyled TextDoubleStruck [ EIdentifier "i" ]+, EStyled TextDoubleStruck [ EIdentifier "j" ]+, EStyled TextDoubleStruck [ EIdentifier "k" ]+, EStyled TextDoubleStruck [ EIdentifier "l" ]+, EStyled TextDoubleStruck [ EIdentifier "m" ]+, EStyled TextDoubleStruck [ EIdentifier "n" ]+, EStyled TextDoubleStruck [ EIdentifier "o" ]+, EStyled TextDoubleStruck [ EIdentifier "p" ]+, EStyled TextDoubleStruck [ EIdentifier "q" ]+, EStyled TextDoubleStruck [ EIdentifier "r" ]+, EStyled TextDoubleStruck [ EIdentifier "s" ]+, EStyled TextDoubleStruck [ EIdentifier "t" ]+, EStyled TextDoubleStruck [ EIdentifier "u" ]+, EStyled TextDoubleStruck [ EIdentifier "v" ]+, EStyled TextDoubleStruck [ EIdentifier "w" ]+, EStyled TextDoubleStruck [ EIdentifier "x" ]+, EStyled TextDoubleStruck [ EIdentifier "y" ]+, EStyled TextDoubleStruck [ EIdentifier "z" ]+, EStyled TextDoubleStruck [ ENumber "0" ]+, EStyled TextDoubleStruck [ ENumber "1" ]+, EStyled TextDoubleStruck [ ENumber "2" ]+, EStyled TextDoubleStruck [ ENumber "3" ]+, EStyled TextDoubleStruck [ ENumber "4" ]+, EStyled TextDoubleStruck [ ENumber "5" ]+, EStyled TextDoubleStruck [ ENumber "6" ]+, EStyled TextDoubleStruck [ ENumber "7" ]+, EStyled TextDoubleStruck [ ENumber "8" ]+, EStyled TextDoubleStruck [ ENumber "9" ]+, EStyled TextDoubleStruck [ ENumber "0" ]+]+>>> starmath+nitalic {𝒜 ℬ 𝒞 𝒟 ℰ ℱ 𝒢 ℋ ℐ 𝒥 𝒦 ℒ ℳ 𝒩 𝒪 𝒫 𝒬 ℛ 𝒮 𝒯 𝒰 𝒱 𝒲 𝒳 𝒴 𝒵 𝒶 𝒷 𝒸 𝒹 ℯ 𝒻 ℊ 𝒽 𝒾 𝒿 𝓀 𝓁 𝓂 𝓃 ℴ 𝓅 𝓆 𝓇 𝓈 𝓉 𝓊 𝓋 𝓌 𝓍 𝓎 𝓏} nitalic {𝔸 𝔹 ℂ 𝔻 𝔼 𝔽 𝔾 ℍ 𝕀 𝕁 𝕂 𝕃 𝕄 ℕ 𝕆 ℙ ℚ ℝ 𝕊 𝕋 𝕌 𝕍 𝕎 𝕏 𝕐 ℤ 𝕒 𝕓 𝕔 𝕕 𝕖 𝕗 𝕘 𝕙 𝕚 𝕛 𝕜 𝕝 𝕞 𝕟 𝕠 𝕡 𝕢 𝕣 𝕤 𝕥 𝕦 𝕧 𝕨 𝕩 𝕪 𝕫 𝟘 𝟙 𝟚 𝟛 𝟜 𝟝 𝟞 𝟟 𝟠 𝟡 𝟘}
+ test/writer/starmath/21.test view
@@ -0,0 +1,9 @@+<<< native+[ ESub (EIdentifier "e") (ENumber "1")+, ESymbol Rel "="+, ESuper (EIdentifier "b") (ENumber "2")+, ESymbol Bin "+"+, ESuper (EIdentifier "c") (ENumber "22")+]+>>> starmath+e_1 = b^2 + c^22
+ test/writer/starmath/22.test view
@@ -0,0 +1,256 @@+<<< native+[ EArray+    [ AlignLeft , AlignLeft ]+    [ [ [ EText TextMonospace "textrm" ]+      , [ EText TextNormal "ABCabc" ]+      ]+    , [ [ EText TextMonospace "mathrm" ]+      , [ EStyled+            TextNormal+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "mathup" ]+      , [ EStyled+            TextNormal+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "text" ]+      , [ EText TextNormal "ABCabc" ]+      ]+    , [ [ EText TextMonospace "mbox" ]+      , [ EText TextNormal "ABCabc" ]+      ]+    , [ [ EText TextMonospace "mathbf" ]+      , [ EStyled+            TextNormal+            [ EStyled+                TextBold+                [ EIdentifier "A"+                , EIdentifier "B"+                , EIdentifier "C"+                , EIdentifier "a"+                , EIdentifier "b"+                , EIdentifier "c"+                ]+            ]+        ]+      ]+    , [ [ EText TextMonospace "mathbfup" ]+      , [ EStyled+            TextBold+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "textbf" ]+      , [ EText TextBold "ABCabc" ]+      ]+    , [ [ EText TextMonospace "mathit" ]+      , [ EStyled+            TextItalic+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "textit" ]+      , [ EText TextItalic "ABCabc" ]+      ]+    , [ [ EText TextMonospace "mathtt" ]+      , [ EStyled+            TextMonospace+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "texttt" ]+      , [ EText TextMonospace "ABCabc" ]+      ]+    , [ [ EText TextMonospace "mathsf" ]+      , [ EStyled+            TextSansSerif+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "mathsfup" ]+      , [ EStyled+            TextSansSerif+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "mathbb" ]+      , [ EStyled+            TextDoubleStruck+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "mathcal" ]+      , [ EStyled+            TextScript+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "mathscr" ]+      , [ EStyled+            TextScript+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "mathfrak" ]+      , [ EStyled+            TextFraktur+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "mathbfit" ]+      , [ EStyled+            TextBoldItalic+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "mathbfsfup" ]+      , [ EStyled+            TextSansSerifBold+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "mathbfsfit" ]+      , [ EStyled+            TextSansSerifBoldItalic+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "mathbfscr" ]+      , [ EStyled+            TextBoldScript+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "mathbffrak" ]+      , [ EStyled+            TextBoldFraktur+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "mathbfcal" ]+      , [ EStyled+            TextBoldScript+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    , [ [ EText TextMonospace "mathsfit" ]+      , [ EStyled+            TextSansSerifItalic+            [ EIdentifier "A"+            , EIdentifier "B"+            , EIdentifier "C"+            , EIdentifier "a"+            , EIdentifier "b"+            , EIdentifier "c"+            ]+        ]+      ]+    ]+]+>>> starmath+matrix { alignl font fixed "textrm" # alignl "ABCabc" ## alignl font fixed "mathrm" # alignl "ABCabc" ## alignl font fixed "mathup" # alignl "ABCabc" ## alignl font fixed "text" # alignl "ABCabc" ## alignl font fixed "mbox" # alignl "ABCabc" ## alignl font fixed "mathbf" # alignl bold nitalic {ABCabc} ## alignl font fixed "mathbfup" # alignl bold nitalic {ABCabc} ## alignl font fixed "textbf" # alignl bold {"ABCabc"} ## alignl font fixed "mathit" # alignl ital {ABCabc} ## alignl font fixed "textit" # alignl ital {ABCabc} ## alignl font fixed "mathtt" # alignl font fixed nitalic {ABCabc} ## alignl font fixed "texttt" # alignl font fixed "ABCabc" ## alignl font fixed "mathsf" # alignl font sans nitalic {ABCabc} ## alignl font fixed "mathsfup" # alignl font sans nitalic {ABCabc} ## alignl font fixed "mathbb" # alignl nitalic {𝔸𝔹ℂ𝕒𝕓𝕔} ## alignl font fixed "mathcal" # alignl nitalic {𝒜ℬ𝒞𝒶𝒷𝒸} ## alignl font fixed "mathscr" # alignl nitalic {𝒜ℬ𝒞𝒶𝒷𝒸} ## alignl font fixed "mathfrak" # alignl nitalic {𝔄𝔅ℭ𝔞𝔟𝔠} ## alignl font fixed "mathbfit" # alignl bold {ital {ABCabc}} ## alignl font fixed "mathbfsfup" # alignl bold {font sans nitalic {ABCabc}} ## alignl font fixed "mathbfsfit" # alignl bold {font sans ital {ABCabc}} ## alignl font fixed "mathbfscr" # alignl nitalic {𝓐𝓑𝓒𝓪𝓫𝓬} ## alignl font fixed "mathbffrak" # alignl nitalic {𝕬𝕭𝕮𝖆𝖇𝖈} ## alignl font fixed "mathbfcal" # alignl nitalic {𝓐𝓑𝓒𝓪𝓫𝓬} ## alignl font fixed "mathsfit" # alignl font sans ital {ABCabc} }
+ test/writer/starmath/23.test view
@@ -0,0 +1,4 @@+<<< native+[ ENumber "1" , ESymbol Ord "." ]+>>> starmath+1.
+ test/writer/starmath/axiom_of_power_set.test view
@@ -0,0 +1,31 @@+<<< native+[ ESymbol Op "\8704"+, EIdentifier "A"+, ESpace (1 % 6)+, ESymbol Op "\8707"+, EIdentifier "P"+, ESpace (1 % 6)+, ESymbol Op "\8704"+, EIdentifier "B"+, ESpace (1 % 6)+, ESymbol Open "["+, EIdentifier "B"+, ESymbol Rel "\8712"+, EIdentifier "P"+, ESymbol Rel "\8660"+, ESymbol Op "\8704"+, EIdentifier "C"+, ESpace (1 % 6)+, ESymbol Open "("+, EIdentifier "C"+, ESymbol Rel "\8712"+, EIdentifier "B"+, ESymbol Rel "\8658"+, EIdentifier "C"+, ESymbol Rel "\8712"+, EIdentifier "A"+, ESymbol Close ")"+, ESymbol Close "]"+]+>>> starmath+forall A exists P forall B [B in P dlrarrow forall C (C in B drarrow C in A)]
+ test/writer/starmath/binomial_coefficient.test view
@@ -0,0 +1,41 @@+<<< native+[ EStyled TextNormal [ EStyled TextBold [ EIdentifier "C" ] ]+, ESymbol Open "("+, EIdentifier "n"+, ESymbol Pun ","+, EIdentifier "k"+, ESymbol Close ")"+, ESymbol Rel "="+, ESubsup+    (EStyled TextNormal [ EStyled TextBold [ EIdentifier "C" ] ])+    (EIdentifier "k")+    (EIdentifier "n")+, ESymbol Rel "="+, ESub (EGrouped []) (EIdentifier "n")+, ESub+    (EStyled TextNormal [ EStyled TextBold [ EIdentifier "C" ] ])+    (EIdentifier "k")+, ESymbol Rel "="+, EDelimited+    "("+    ")"+    [ Right (EFraction NoLineFrac (EIdentifier "n") (EIdentifier "k"))+    ]+, ESymbol Rel "="+, EFraction+    NormalFrac+    (EGrouped [ EIdentifier "n" , ESymbol Ord "!" ])+    (EGrouped+       [ EIdentifier "k"+       , ESymbol Ord "!"+       , ESpace (1 % 6)+       , ESymbol Open "("+       , EIdentifier "n"+       , ESymbol Bin "\8722"+       , EIdentifier "k"+       , ESymbol Close ")"+       , ESymbol Ord "!"+       ])+]+>>> starmath+bold nitalic C(n, k) = {bold nitalic C}_k^n = {}_n {bold nitalic C}_k = left ( binom{n}{k} right ) = {{n ! } over {k ! (n - k) ! }}
+ test/writer/starmath/boxed.test view
@@ -0,0 +1,12 @@+<<< native+[ EBoxed+    (EGrouped+       [ ESuper (EIdentifier "x") (ENumber "2")+       , ESymbol Bin "+"+       , ESuper (EIdentifier "y") (ENumber "2")+       , ESymbol Bin "+"+       , ESuper (EIdentifier "z") (ENumber "2")+       ])+]+>>> starmath+\boxed{x^{2} + y^{2} + z^{2}}
+ test/writer/starmath/cancel.test view
@@ -0,0 +1,12 @@+<<< native+[ EBoxed+    (EGrouped+       [ ECancel ForwardSlash (EIdentifier "x")+       , ESymbol Bin "+"+       , ECancel BackSlash (EIdentifier "y")+       , ESymbol Rel "="+       , ECancel XSlash (EIdentifier "z")+       ])+]+>>> starmath+\boxed{\cancel{x} + \bcancel{y} = \xcancel{z}}
+ test/writer/starmath/choose.test view
@@ -0,0 +1,21 @@+<<< native+[ EDelimited+    "("+    ")"+    [ Right+        (EFraction+           NoLineFrac+           (EIdentifier "a")+           (EDelimited+              "{"+              "}"+              [ Right+                  (EFraction+                     NoLineFrac+                     (EIdentifier "b")+                     (EGrouped [ EIdentifier "c" , ESymbol Bin "+" , ENumber "2" ]))+              ]))+    ]+]+>>> starmath+left ( binom{a}{left lbrace binom{b}{c + 2} right rbrace} right )
+ test/writer/starmath/complex_number.test view
@@ -0,0 +1,27 @@+<<< native+[ EIdentifier "c"+, ESymbol Rel "="+, EOver+    False+    (EOver+       False+       (EGrouped+          [ EUnder+              False+              (EUnder False (EIdentifier "a") (ESymbol TUnder "\9183"))+              (EText TextNormal "real")+          , ESymbol Bin "+"+          , EUnder+              False+              (EUnder+                 False+                 (EGrouped+                    [ EIdentifier "b" , EStyled TextNormal [ EIdentifier "i" ] ])+                 (ESymbol TUnder "\9183"))+              (EText TextNormal "imaginary")+          ])+       (ESymbol TOver "\9182"))+    (EText TextNormal "complex number")+]+>>> starmath+c = {a underbrace "real" + {b nitalic i} underbrace "imaginary"} overbrace "complex number"
+ test/writer/starmath/cospan.test view
@@ -0,0 +1,11 @@+<<< native+[ EIdentifier "B"+, EUnderover+    False (ESymbol Op "\8594") (EIdentifier "f") (EGrouped [])+, EIdentifier "A"+, EUnderover+    False (ESymbol Op "\8592") (EIdentifier "f") (EGrouped [])+, EIdentifier "C"+]+>>> starmath+B toward csub {f} A leftarrow csub {f} C
+ test/writer/starmath/deMorgans_law.test view
@@ -0,0 +1,41 @@+<<< native+[ ESymbol Op "\172"+, ESymbol Open "("+, EIdentifier "p"+, ESymbol Bin "\8743"+, EIdentifier "q"+, ESymbol Close ")"+, ESymbol Rel "\8660"+, ESymbol Open "("+, ESymbol Op "\172"+, EIdentifier "p"+, ESymbol Close ")"+, ESymbol Bin "\8744"+, ESymbol Open "("+, ESymbol Op "\172"+, EIdentifier "q"+, ESymbol Close ")"+, EOver+    False+    (EGrouped+       [ EUnderover+           True+           (ESymbol Op "\8899")+           (EGrouped [ EIdentifier "i" , ESymbol Rel "=" , ENumber "1" ])+           (EIdentifier "n")+       , ESub (EIdentifier "A") (EIdentifier "i")+       ])+    (ESymbol TOver "\175")+, ESymbol Rel "="+, EUnderover+    True+    (ESymbol Op "\8898")+    (EGrouped [ EIdentifier "i" , ESymbol Rel "=" , ENumber "1" ])+    (EIdentifier "n")+, EOver+    False+    (ESub (EIdentifier "A") (EIdentifier "i"))+    (ESymbol TOver "\175")+]+>>> starmath+neg (p and q) dlrarrow (neg p) or (neg q) overline {{oper ∪ from i = 1 to n A_i}} = oper ∩ from i = 1 to n overline {A_i}
+ test/writer/starmath/differentiable_manifold.test view
@@ -0,0 +1,70 @@+<<< native+[ ESub (EIdentifier "\947") (ENumber "1")+, ESymbol Rel "\8801"+, ESub (EIdentifier "\947") (ENumber "2")+, ESymbol Rel "\8660"+, EDelimited+    "{"+    ""+    [ Right+        (EArray+           [ AlignLeft ]+           [ [ [ ESub (EIdentifier "\947") (ENumber "1")+               , ESymbol Open "("+               , ENumber "0"+               , ESymbol Close ")"+               , ESymbol Rel "="+               , ESub (EIdentifier "\947") (ENumber "2")+               , ESymbol Open "("+               , ENumber "0"+               , ESymbol Close ")"+               , ESymbol Rel "="+               , EIdentifier "p"+               , ESymbol Pun ","+               , EText TextNormal " and "+               ]+             ]+           , [ [ ESub+                   (EDelimited+                      ""+                      "|"+                      [ Right+                          (EFraction+                             NormalFrac+                             (EStyled TextNormal [ EIdentifier "d" ])+                             (EGrouped+                                [ EStyled TextNormal [ EIdentifier "d" ] , EIdentifier "t" ]))+                      , Right (EIdentifier "\981")+                      , Right (ESymbol Bin "\8728")+                      , Right (ESub (EIdentifier "\947") (ENumber "1"))+                      , Right (ESymbol Open "(")+                      , Right (EIdentifier "t")+                      , Right (ESymbol Close ")")+                      ])+                   (EGrouped [ EIdentifier "t" , ESymbol Rel "=" , ENumber "0" ])+               , ESymbol Rel "="+               , ESub+                   (EDelimited+                      ""+                      "|"+                      [ Right+                          (EFraction+                             NormalFrac+                             (EStyled TextNormal [ EIdentifier "d" ])+                             (EGrouped+                                [ EStyled TextNormal [ EIdentifier "d" ] , EIdentifier "t" ]))+                      , Right (EIdentifier "\981")+                      , Right (ESymbol Bin "\8728")+                      , Right (ESub (EIdentifier "\947") (ENumber "2"))+                      , Right (ESymbol Open "(")+                      , Right (EIdentifier "t")+                      , Right (ESymbol Close ")")+                      ])+                   (EGrouped [ EIdentifier "t" , ESymbol Rel "=" , ENumber "0" ])+               ]+             ]+           ])+    ]+]+>>> starmath+%igamma_1 equiv %igamma_2 dlrarrow left lbrace matrix { alignl %igamma_1(0) = %igamma_2(0) = p, " and " ## alignl {left none {{alignc {nitalic d}} over {alignc {nitalic dt}}}%iphi circ %igamma_1(t) right rline}_{{t = 0}} = {left none {{alignc {nitalic d}} over {alignc {nitalic dt}}}%iphi circ %igamma_2(t) right rline}_{{t = 0}} } right none
+ test/writer/starmath/divergence.test view
@@ -0,0 +1,25 @@+<<< native+[ ESymbol Ord "\8711"+, ESymbol Bin "\8901"+, EOver False (EIdentifier "v") (ESymbol Accent "\8407")+, ESymbol Rel "="+, EFraction+    NormalFrac+    (EGrouped+       [ ESymbol Ord "\8706" , ESub (EIdentifier "v") (EIdentifier "x") ])+    (EGrouped [ ESymbol Ord "\8706" , EIdentifier "x" ])+, ESymbol Bin "+"+, EFraction+    NormalFrac+    (EGrouped+       [ ESymbol Ord "\8706" , ESub (EIdentifier "v") (EIdentifier "y") ])+    (EGrouped [ ESymbol Ord "\8706" , EIdentifier "y" ])+, ESymbol Bin "+"+, EFraction+    NormalFrac+    (EGrouped+       [ ESymbol Ord "\8706" , ESub (EIdentifier "v") (EIdentifier "z") ])+    (EGrouped [ ESymbol Ord "\8706" , EIdentifier "z" ])+]+>>> starmath+nabla cdot vec v = {{partial v_x} over {partial x}} + {{partial v_y} over {partial y}} + {{partial v_z} over {partial z}}
+ test/writer/starmath/ensuremath.test view
@@ -0,0 +1,4 @@+<<< native+[ ESuper (EIdentifier "\960") (ENumber "2") ]+>>> starmath+%ipi^2
+ test/writer/starmath/genfrac.test view
@@ -0,0 +1,9 @@+<<< native+[ EDelimited+    "{"+    "}"+    [ Right (EFraction NoLineFrac (EIdentifier "x") (EIdentifier "y"))+    ]+]+>>> starmath+left lbrace binom{x}{y} right rbrace
+ test/writer/starmath/issue109.test view
@@ -0,0 +1,11 @@+<<< native+[ EIdentifier "a"+, ESymbol Rel ">"+, EIdentifier "b"+, ESymbol Rel "or"+, EIdentifier "a"+, ESymbol Rel ">"+, EIdentifier "c"+]+>>> starmath+a > b "or" a > c
+ test/writer/starmath/issue204.test view
@@ -0,0 +1,7 @@+<<< native+[ EIdentifier "a"+, ESub (ESymbol Rel "\8829") (EIdentifier "i")+, EIdentifier "b"+]+>>> starmath+a≽_i b
+ test/writer/starmath/issue229.test view
@@ -0,0 +1,13 @@+<<< native+[ EArray+    [ AlignLeft , AlignRight , AlignCenter , AlignRight , AlignCenter ]+    [ [ [ ENumber "1" ]+      , [ ENumber "2" ]+      , [ ENumber "3" ]+      , [ ENumber "4" ]+      , [ ENumber "5" ]+      ]+    ]+]+>>> starmath+matrix { alignl 1 # alignr 2 # alignc 3 # alignr 4 # alignc 5 }
+ test/writer/starmath/labels.test view
@@ -0,0 +1,4 @@+<<< native+[ ENumber "2" , ESymbol Bin "+" , ENumber "2" ]+>>> starmath+2 + 2
+ test/writer/starmath/macros.test view
@@ -0,0 +1,15 @@+<<< native+[ 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" ] ]+    ]+]+>>> starmath+25{y + 3}{x + 3}{x + %ialpha}matrix { 2 # 3 ## 4 # 5 }
+ test/writer/starmath/math-in-text.test view
@@ -0,0 +1,20 @@+<<< native+[ ESuper (EIdentifier "X") (ENumber "2")+, ESymbol Rel "="+, EIdentifier "y"+, EGrouped+    [ EText TextNormal " under "+    , ESub (EIdentifier "H") (ENumber "0")+    , EText TextNormal " except when "+    , EGrouped+        [ EIdentifier "x"+        , EGrouped+            [ EText TextBold " is less than "+            , EIdentifier "z"+            , EText TextBold "."+            ]+        ]+    ]+]+>>> starmath+X^2 = y{" under "H_0" except when "{x{bold {" is less than "}z bold {"."}}}}
+ test/writer/starmath/moore_determinant.test view
@@ -0,0 +1,54 @@+<<< native+[ EIdentifier "M"+, ESymbol Rel "="+, EDelimited+    "["+    "]"+    [ Right+        (EArray+           [ AlignCenter , AlignCenter , AlignCenter , AlignCenter ]+           [ [ [ ESub (EIdentifier "\945") (ENumber "1") ]+             , [ ESubsup (EIdentifier "\945") (ENumber "1") (EIdentifier "q") ]+             , [ ESymbol Ord "\8943" ]+             , [ ESubsup+                   (EIdentifier "\945")+                   (ENumber "1")+                   (ESuper+                      (EIdentifier "q")+                      (EGrouped [ EIdentifier "n" , ESymbol Bin "\8722" , ENumber "1" ]))+               ]+             ]+           , [ [ ESub (EIdentifier "\945") (ENumber "2") ]+             , [ ESubsup (EIdentifier "\945") (ENumber "2") (EIdentifier "q") ]+             , [ ESymbol Ord "\8943" ]+             , [ ESubsup+                   (EIdentifier "\945")+                   (ENumber "2")+                   (ESuper+                      (EIdentifier "q")+                      (EGrouped [ EIdentifier "n" , ESymbol Bin "\8722" , ENumber "1" ]))+               ]+             ]+           , [ [ ESymbol Ord "\8942" ]+             , [ ESymbol Ord "\8942" ]+             , [ ESymbol Rel "\8945" ]+             , [ ESymbol Ord "\8942" ]+             ]+           , [ [ ESub (EIdentifier "\945") (EIdentifier "m") ]+             , [ ESubsup+                   (EIdentifier "\945") (EIdentifier "m") (EIdentifier "q")+               ]+             , [ ESymbol Ord "\8943" ]+             , [ ESubsup+                   (EIdentifier "\945")+                   (EIdentifier "m")+                   (ESuper+                      (EIdentifier "q")+                      (EGrouped [ EIdentifier "n" , ESymbol Bin "\8722" , ENumber "1" ]))+               ]+             ]+           ])+    ]+]+>>> starmath+M = left [ matrix { %ialpha_1 # %ialpha_1^q # dotsaxis # %ialpha_1^{q^{{n - 1}}} ## %ialpha_2 # %ialpha_2^q # dotsaxis # %ialpha_2^{q^{{n - 1}}} ## dotsvert # dotsvert # {} dotsdown {} # dotsvert ## %ialpha_m # %ialpha_m^q # dotsaxis # %ialpha_m^{q^{{n - 1}}} } right ]
+ test/writer/starmath/notin.test view
@@ -0,0 +1,11 @@+<<< native+[ EIdentifier "x"+, ESymbol Rel "\8712"+, EIdentifier "y"+, ESymbol Bin "\8743"+, EIdentifier "x"+, ESymbol Rel "\8713"+, EIdentifier "y"+]+>>> starmath+x in y and x notin y
+ test/writer/starmath/operatorname.test view
@@ -0,0 +1,71 @@+<<< native+[ EDelimited+    "{"+    ""+    [ Right+        (EArray+           [ AlignLeft , AlignLeft ]+           [ [ [ ESub (EMathOperator "div") (EIdentifier "x")+               , EIdentifier "u"+               , ESuper (EMathOperator "div") (EIdentifier "x")+               , EIdentifier "u"+               , ESubsup (EMathOperator "div") (EIdentifier "x") (EIdentifier "y")+               , EIdentifier "u"+               , ESubsup (EMathOperator "div") (EIdentifier "x") (EIdentifier "y")+               , EIdentifier "u"+               ]+             , [ EText TextNormal "operatorname" ]+             ]+           , [ [ EUnder+                   True+                   (EMathOperator "\8902-lim'sup")+                   (EGrouped [ EIdentifier "x" , ESymbol Rel "\8594" , ENumber "0" ])+               , EIdentifier "u"+               , EOver True (EMathOperator "\8902-lim'sup") (EIdentifier "w")+               , EIdentifier "u"+               , EUnderover+                   True+                   (EMathOperator "\8902-lim'sup")+                   (EGrouped [ EIdentifier "x" , ESymbol Rel "\8594" , ENumber "0" ])+                   (EIdentifier "w")+               , EIdentifier "u"+               , EUnderover+                   True+                   (EMathOperator "\8902-lim'sup")+                   (EGrouped [ EIdentifier "x" , ESymbol Rel "\8594" , ENumber "0" ])+                   (EIdentifier "w")+               , EIdentifier "u"+               ]+             , [ EText TextNormal "operatorname*" ]+             ]+           , [ [ ESub+                   (EMathOperator "\8902-lim'sup")+                   (EGrouped [ EIdentifier "x" , ESymbol Rel "\8594" , ENumber "0" ])+               , EIdentifier "u"+               , ESuper (EMathOperator "\8902-lim'sup") (EIdentifier "w")+               , EIdentifier "u"+               , ESubsup+                   (EMathOperator "\8902-lim'sup")+                   (EGrouped [ EIdentifier "x" , ESymbol Rel "\8594" , ENumber "0" ])+                   (EIdentifier "w")+               , EIdentifier "u"+               , ESubsup+                   (EMathOperator "\8902-lim'sup")+                   (EGrouped [ EIdentifier "x" , ESymbol Rel "\8594" , ENumber "0" ])+                   (EIdentifier "w")+               , EIdentifier "u"+               ]+             , [ EText TextNormal "operatorname*:nolimits" ]+             ]+           , [ [ ESub (EMathOperator "curl") (EIdentifier "x")+               , EIdentifier "v"+               , EUnder True (EMathOperator "argmax") (EIdentifier "K")+               , EIdentifier "u"+               ]+             , [ EText TextNormal "DeclareMathOperator" ]+             ]+           ])+    ]+]+>>> starmath+left lbrace matrix { alignl func div_x u func div^x u func div_x^y u func div_x^y u # alignl "operatorname" ## alignl {func "⋆-lim'sup"} csub {{x toward 0}} u {func "⋆-lim'sup"} csup {w} u {func "⋆-lim'sup"} csub {{x toward 0}} csup {w} u {func "⋆-lim'sup"} csub {{x toward 0}} csup {w} u # alignl "operatorname*" ## alignl func "⋆-lim'sup"_{{x toward 0}} u func "⋆-lim'sup"^w u func "⋆-lim'sup"_{{x toward 0}}^w u func "⋆-lim'sup"_{{x toward 0}}^w u # alignl "operatorname*:nolimits" ## alignl func curl_x v {func argmax} csub {K} u # alignl "DeclareMathOperator" } right none
+ test/writer/starmath/phantom.test view
@@ -0,0 +1,10 @@+<<< native+[ EDelimited+    "("+    ")"+    [ Right+        (EPhantom (EFraction NormalFrac (ENumber "1") (ENumber "2")))+    ]+]+>>> starmath+left ( phantom {1 over 2} right )
+ test/writer/starmath/quadratic_formula.test view
@@ -0,0 +1,22 @@+<<< native+[ EIdentifier "x"+, ESymbol Rel "="+, EFraction+    NormalFrac+    (EGrouped+       [ ESymbol Ord "\8722"+       , EIdentifier "b"+       , ESymbol Bin "\177"+       , ESqrt+           (EGrouped+              [ ESuper (EIdentifier "b") (ENumber "2")+              , ESymbol Bin "\8722"+              , ENumber "4"+              , EIdentifier "a"+              , EIdentifier "c"+              ])+       ])+    (EGrouped [ ENumber "2" , EIdentifier "a" ])+]+>>> starmath+x = {{- b plusminus sqrt {{b^2 - 4ac}}} over {2a}}
+ test/writer/starmath/schwinger_dyson.test view
@@ -0,0 +1,63 @@+<<< native+[ EDelimited+    "\10216"+    "\10217"+    [ Right (EIdentifier "\968")+    , Right+        (EDelimited+           "|"+           "|"+           [ Right (EStyled TextScript [ EIdentifier "T" ])+           , Right+               (EDelimited+                  "{"+                  "}"+                  [ Right+                      (EFraction+                         NormalFrac+                         (EIdentifier "\948")+                         (EGrouped [ EIdentifier "\948" , EIdentifier "\981" ]))+                  , Right (EIdentifier "F")+                  , Right (ESymbol Open "[")+                  , Right (EIdentifier "\981")+                  , Right (ESymbol Close "]")+                  ])+           ])+    , Right (EIdentifier "\968")+    ]+, ESymbol Rel "="+, ESymbol Ord "\8722"+, EStyled TextNormal [ EIdentifier "i" ]+, EDelimited+    "\10216"+    "\10217"+    [ Right (EIdentifier "\968")+    , Right+        (EDelimited+           "|"+           "|"+           [ Right (EStyled TextScript [ EIdentifier "T" ])+           , Right+               (EDelimited+                  "{"+                  "}"+                  [ Right (EIdentifier "F")+                  , Right (ESymbol Open "[")+                  , Right (EIdentifier "\981")+                  , Right (ESymbol Close "]")+                  , Right+                      (EFraction+                         NormalFrac+                         (EIdentifier "\948")+                         (EGrouped [ EIdentifier "\948" , EIdentifier "\981" ]))+                  , Right (EIdentifier "S")+                  , Right (ESymbol Open "[")+                  , Right (EIdentifier "\981")+                  , Right (ESymbol Close "]")+                  ])+           ])+    , Right (EIdentifier "\968")+    ]+]+>>> starmath+left langle %ipsi left lline nitalic 𝒯 left lbrace {%idelta over {%idelta %iphi}}F[%iphi] right rbrace right rline %ipsi right rangle = - nitalic i left langle %ipsi left lline nitalic 𝒯 left lbrace F[%iphi]{%idelta over {%idelta %iphi}}S[%iphi] right rbrace right rline %ipsi right rangle
+ test/writer/starmath/simple_sum_formula.test view
@@ -0,0 +1,15 @@+<<< native+[ EUnderover+    True+    (ESymbol Op "\8721")+    (EGrouped [ EIdentifier "i" , ESymbol Rel "=" , ENumber "1" ])+    (ENumber "100")+, EIdentifier "x"+, ESymbol Rel "="+, EFraction+    NormalFrac+    (EGrouped [ ENumber "100" , ESymbol Bin "*" , ENumber "101" ])+    (ENumber "2")+]+>>> starmath+sum from i = 1 to 100 x = {{100*101} over 2}
+ test/writer/starmath/sophomores_dream.test view
@@ -0,0 +1,27 @@+<<< native+[ ESubsup (ESymbol Op "\8747") (ENumber "0") (ENumber "1")+, ESuper (EIdentifier "x") (EIdentifier "x")+, ESpace (1 % 6)+, EStyled TextNormal [ EIdentifier "d" ]+, EIdentifier "x"+, ESymbol Rel "="+, EUnderover+    True+    (ESymbol Op "\8721")+    (EGrouped [ EIdentifier "n" , ESymbol Rel "=" , ENumber "1" ])+    (ESymbol Ord "\8734")+, EGrouped+    [ ESymbol Open "("+    , ESymbol Ord "\8722"+    , ENumber "1"+    , ESuper+        (ESymbol Close ")")+        (EGrouped [ EIdentifier "n" , ESymbol Bin "+" , ENumber "1" ])+    , ESpace (1 % 6)+    , ESuper+        (EIdentifier "n")+        (EGrouped [ ESymbol Ord "\8722" , EIdentifier "n" ])+    ]+]+>>> starmath+int_0^1 x^x nitalic dx = sum from n = 1 to infinity {(- 1)^{{n + 1}} n^{{- n}}}
+ test/writer/starmath/span.test view
@@ -0,0 +1,9 @@+<<< native+[ EIdentifier "Y"+, EOver False (ESymbol Op "\8592") (EIdentifier "f")+, EIdentifier "X"+, EOver False (ESymbol Op "\8594") (EIdentifier "g")+, EIdentifier "Z"+]+>>> starmath+Y leftarrow csup {f} X toward csup {g} Z
+ test/writer/starmath/sphere_volume.test view
@@ -0,0 +1,127 @@+<<< native+[ EIdentifier "S"+, ESymbol Rel "="+, ESymbol Open "{"+, ENumber "0"+, ESymbol Rel "\8804"+, EIdentifier "\981"+, ESymbol Rel "\8804"+, ENumber "2"+, EIdentifier "\960"+, ESymbol Pun ","+, ESpace (2 % 9)+, ENumber "0"+, ESymbol Rel "\8804"+, EIdentifier "\952"+, ESymbol Rel "\8804"+, EIdentifier "\960"+, ESymbol Pun ","+, ESpace (2 % 9)+, ENumber "0"+, ESymbol Rel "\8804"+, EIdentifier "\961"+, ESymbol Rel "\8804"+, EIdentifier "R"+, ESymbol Close "}"+, EArray+    [ AlignRight , AlignLeft ]+    [ [ [ EStyled+            TextNormal+            [ EIdentifier "V"+            , EIdentifier "o"+            , EIdentifier "l"+            , EIdentifier "u"+            , EIdentifier "m"+            , EIdentifier "e"+            ]+        ]+      , [ ESymbol Rel "="+        , EUnder False (ESymbol Op "\8749") (EIdentifier "S")+        , ESpace ((-1) % 6)+        , ESuper (EIdentifier "\961") (ENumber "2")+        , EMathOperator "sin"+        , EIdentifier "\952"+        , ESpace (1 % 6)+        , EStyled TextNormal [ EIdentifier "d" ]+        , EIdentifier "\961"+        , ESpace (1 % 6)+        , EStyled TextNormal [ EIdentifier "d" ]+        , EIdentifier "\952"+        , ESpace (1 % 6)+        , EStyled TextNormal [ EIdentifier "d" ]+        , EIdentifier "\981"+        ]+      ]+    , [ []+      , [ ESymbol Rel "="+        , ESubsup+            (ESymbol Op "\8747")+            (ENumber "0")+            (EGrouped [ ENumber "2" , EIdentifier "\960" ])+        , ESpace ((-1) % 6)+        , EStyled TextNormal [ EIdentifier "d" ]+        , EIdentifier "\981"+        , ESpace (1 % 6)+        , ESubsup (ESymbol Op "\8747") (ENumber "0") (EIdentifier "\960")+        , ESpace ((-1) % 6)+        , EMathOperator "sin"+        , EIdentifier "\952"+        , ESpace (1 % 6)+        , EStyled TextNormal [ EIdentifier "d" ]+        , EIdentifier "\952"+        , ESpace (1 % 6)+        , ESubsup (ESymbol Op "\8747") (ENumber "0") (EIdentifier "R")+        , ESpace ((-1) % 6)+        , ESuper (EIdentifier "\961") (ENumber "2")+        , EStyled TextNormal [ EIdentifier "d" ]+        , EIdentifier "\961"+        ]+      ]+    , [ []+      , [ ESymbol Rel "="+        , EIdentifier "\981"+        , ESubsup+            (EScaled (9 % 5) (ESymbol Open "|"))+            (ENumber "0")+            (EGrouped [ ENumber "2" , EIdentifier "\960" ])+        , ESpace (2 % 9)+        , ESymbol Open "("+        , ESymbol Ord "\8722"+        , EMathOperator "cos"+        , EIdentifier "\952"+        , ESymbol Close ")"+        , ESubsup+            (EScaled (9 % 5) (ESymbol Open "|"))+            (ENumber "0")+            (EIdentifier "\960")+        , ESpace (2 % 9)+        , EFraction InlineFrac (ENumber "1") (ENumber "3")+        , ESuper (EIdentifier "\961") (ENumber "3")+        , ESubsup+            (EScaled (9 % 5) (ESymbol Open "|"))+            (ENumber "0")+            (EIdentifier "R")+        ]+      ]+    , [ []+      , [ ESymbol Rel "="+        , ENumber "2"+        , EIdentifier "\960"+        , ESymbol Bin "\215"+        , ENumber "2"+        , ESymbol Bin "\215"+        , EFraction InlineFrac (ENumber "1") (ENumber "3")+        , ESuper (EIdentifier "R") (ENumber "3")+        ]+      ]+    , [ []+      , [ ESymbol Rel "="+        , EFraction InlineFrac (ENumber "4") (ENumber "3")+        , EIdentifier "\960"+        , ESuper (EIdentifier "R") (ENumber "3")+        ]+      ]+    ]+]+>>> starmath+S = left lbrace 0 <= %iphi <= 2%ipi , 0 <= %itheta <= %ipi , 0 <= %irho <= R right rbrace matrix { alignr "Volume" # alignl {} = iiint from S %irho^2 sin %itheta nitalic d%irho nitalic d%itheta nitalic d%iphi ## alignr {} # alignl {} = int_0^{{2%ipi}} nitalic d%iphi int_0^%ipi sin %itheta nitalic d%itheta int_0^R %irho^2 nitalic d%irho ## alignr {} # alignl {} = {left none %iphi right rline}_0^{{2%ipi}} {left none left ( - cos %itheta right ) right rline}_0^%ipi size*0.7 {{alignc 1} over {alignc 3}}{left none %irho^3 right rline}_0^R ## alignr {} # alignl {} = 2%ipi times 2 times size*0.7 {{alignc 1} over {alignc 3}}R^3 ## alignr {} # alignl {} = size*0.7 {{alignc 4} over {alignc 3}}%ipi R^3 }
+ test/writer/starmath/stackrel.test view
@@ -0,0 +1,7 @@+<<< native+[ ESub (EIdentifier "u") (EIdentifier "n")+, EOver False (ESymbol Rel "\8594") (EIdentifier "w")+, EIdentifier "u"+]+>>> starmath+u_n toward csup {w} u
+ test/writer/starmath/substack.test view
@@ -0,0 +1,34 @@+<<< native+[ EUnder+    True+    (ESymbol Op "\8721")+    (EArray+       [ AlignCenter ]+       [ [ [ EGrouped+               [ ENumber "0"+               , ESymbol Rel "<"+               , EIdentifier "i"+               , ESymbol Rel "<"+               , EIdentifier "m"+               ]+           ]+         ]+       , [ [ EGrouped+               [ ENumber "0"+               , ESymbol Rel "<"+               , EIdentifier "j"+               , ESymbol Rel "<"+               , EIdentifier "n"+               ]+           ]+         ]+       ])+, EIdentifier "P"+, ESymbol Open "("+, EIdentifier "i"+, ESymbol Pun ","+, EIdentifier "j"+, ESymbol Close ")"+]+>>> starmath+sum from matrix { {0 < i < m} ## {0 < j < n} } P(i, j)
+ test/writer/starmath/subsup.test view
@@ -0,0 +1,68 @@+<<< native+[ ESubsup (EIdentifier "x") (EIdentifier "b") (EIdentifier "a")+, ESpace (1 % 1)+, ESubsup (EIdentifier "x") (EIdentifier "b") (EIdentifier "a")+, ESpace (1 % 1)+, EUnder True (EMathOperator "min") (EIdentifier "A")+, ESpace (1 % 1)+, EUnder True (EMathOperator "max") (EIdentifier "B")+, ESpace (1 % 1)+, EUnder True (EMathOperator "det") (EIdentifier "C")+, ESpace (1 % 1)+, EUnder True (EMathOperator "Pr") (EIdentifier "A")+, ESpace (1 % 1)+, EUnder True (EMathOperator "gcd") (EIdentifier "A")+, ESpace (1 % 1)+, ESuper+    (EOver False (EIdentifier "u") (ESymbol Accent "\775"))+    (ENumber "2")+, ESpace (1 % 1)+, ESub+    (EOver False (EIdentifier "u") (ESymbol TOver "\175"))+    (EIdentifier "\949")+, ESpace (1 % 1)+, ESubsup+    (EUnder False (EIdentifier "u") (ESymbol TUnder "_"))+    (EIdentifier "b")+    (EIdentifier "a")+, ESpace (1 % 1)+, EOver+    False+    (EOver+       False+       (EGrouped [ EIdentifier "a" , ESymbol Bin "+" , EIdentifier "b" ])+       (ESymbol TOver "\9182"))+    (EText TextNormal "term")+, ESpace (1 % 1)+, EOver+    False+    (EOver+       False+       (EGrouped [ EIdentifier "a" , ESymbol Bin "+" , EIdentifier "b" ])+       (ESymbol TOver "\9140"))+    (EIdentifier "c")+, ESpace (1 % 1)+, EUnder+    False+    (EUnder+       False+       (EGrouped [ EIdentifier "a" , ESymbol Bin "+" , EIdentifier "b" ])+       (ESymbol TUnder "\9183"))+    (EIdentifier "c")+, ESpace (1 % 1)+, EUnder+    False+    (EUnder+       False+       (EGrouped [ EIdentifier "a" , ESymbol Bin "+" , EIdentifier "b" ])+       (ESymbol TUnder "\9141"))+    (EIdentifier "c")+, ESuper (ESpace (1 % 1)) (EIdentifier "H")+, EIdentifier "e"+, ENumber "3"+, ESub (ESpace (1 % 1)) (EIdentifier "x")+, EIdentifier "A"+, ESubsup (ESpace (1 % 1)) (EIdentifier "x") (ENumber "3")+]+>>> starmath+x_b^a ~ x_b^a ~ {func min} csub {A}~ {func max} csub {B}~ {func det} csub {C}~ {func Pr} csub {A}~ {func gcd} csub {A}~ {dot u}^2 ~ {overline u}_%ivarepsilon ~ {underline u}_b^a ~ {a + b} overbrace "term"~ {a + b} overbrace c~ {a + b} underbrace c~ {a + b} underbrace c{~}^H e3{~}_x A{~}_x^3
+ test/writer/starmath/text.test view
@@ -0,0 +1,8 @@+<<< native+[ EText TextNormal "(\321ukasiewicz, G\246del, and G\246del)"+, EText+    TextItalic+    "\8230\8211\8220double quotes\8221\8212\8216single quotes\8217"+]+>>> starmath+"(Łukasiewicz, Gödel, and Gödel)" ital {…–“double quotes”—‘single quotes’}
+ test/writer/starmath/tokens.test view
@@ -0,0 +1,14 @@+<<< native+[ EOver False (EIdentifier "\981") (ESymbol Accent "\771")+, ESqrt (EIdentifier "\981")+, EFraction NormalFrac (EIdentifier "\981") (EIdentifier "\958")+, EFraction NormalFrac (EIdentifier "\981") (EIdentifier "\958")+, EFraction NormalFrac (EIdentifier "\981") (EIdentifier "\958")+, EGrouped+    [ ESymbol Open "(" , EIdentifier "\981" , ESymbol Close ")" ]+, EGrouped+    [ ESymbol Open "(" , EIdentifier "\981" , ESymbol Close ")" ]+, EIdentifier "\958"+]+>>> starmath+tilde %iphi sqrt {%iphi}{%iphi over %ixi}{%iphi over %ixi}{%iphi over %ixi}{(%iphi)}{(%iphi)}%ixi
+ test/writer/starmath/unicode.test view
@@ -0,0 +1,9 @@+<<< native+[ EIdentifier "f"+, ESymbol Rel ":"+, EIdentifier "X"+, ESymbol Rel "\8594"+, EIdentifier "Y"+]+>>> starmath+f : X toward Y
test/writer/tex/accents1.test view
@@ -88,7 +88,7 @@ >>> tex \begin{array}{l} \text{default: (accent=true)} \\-{\overset{'}{H}\hat{H}\overset{\_}{H}\grave{H}\overset{\sim}{H}\overset{¨}{H}\overline{H}\acute{H}\overset{¸}{H}\widehat{H}\check{H}\breve{H}\overset{˙}{H}\overset{˚}{H}\widetilde{H}\overset{˝}{H}\widehat{H}\overset{̑}{H}\bar{H}\dddot{H}\ddddot{H}\overset{\leftarrow}{H}\overset{\rightarrow}{H}\overset{\leftrightarrow}{H}\overset{\leftharpoonup}{H}\overset{\leftharpoondown}{H}\overset{\rightharpoonup}{H}\overset{\rightharpoondown}{H}\overset{⎴}{H}\overset{⎵}{H}\overset{⏜}{H}\overset{⏝}{H}\overbrace{H}\overset{\underbrace{}}{H}\overset{⥎}{H}\overset{⥐}{H}} \\+{\overset{'}{H}\hat{H}\overset{\_}{H}\grave{H}\overset{\sim}{H}\overset{¨}{H}\overline{H}\acute{H}\overset{¸}{H}\widehat{H}\check{H}\breve{H}\overset{˙}{H}\overset{˚}{H}\widetilde{H}\overset{˝}{H}\widehat{H}\overset{̑}{H}\bar{H}\dddot{H}\ddddot{H}\overset{\leftarrow}{H}\overset{\rightarrow}{H}\overset{\leftrightarrow}{H}\overset{\leftharpoonup}{H}\overset{\leftharpoondown}{H}\overset{\rightharpoonup}{H}\overset{\rightharpoondown}{H}\overbracket{H}\overset{⎵}{H}\overset{⏜}{H}\overset{⏝}{H}\overbrace{H}\overset{\underbrace{}}{H}\overset{⥎}{H}\overset{⥐}{H}} \\ \text{accent=false:} \\-{\overset{'}{H}\overset{\hat{}}{H}\overset{\_}{H}\overset{`}{H}\overset{\sim}{H}\overset{¨}{H}\overset{¯}{H}\overset{´}{H}\overset{¸}{H}\overset{\hat{}}{H}\overset{ˇ}{H}\overset{˘}{H}\overset{˙}{H}\overset{˚}{H}\overset{˜}{H}\overset{˝}{H}\widehat{H}\overset{̑}{H}\overset{‾}{H}\dddot{H}\ddddot{H}\overset{\leftarrow}{H}\overset{\rightarrow}{H}\overset{\leftrightarrow}{H}\overset{\leftharpoonup}{H}\overset{\leftharpoondown}{H}\overset{\rightharpoonup}{H}\overset{\rightharpoondown}{H}\overset{⎴}{H}\overset{⎵}{H}\overset{⏜}{H}\overset{⏝}{H}\overbrace{H}\overset{\underbrace{}}{H}\overset{⥎}{H}\overset{⥐}{H}}+{\overset{'}{H}\overset{\hat{}}{H}\overset{\_}{H}\overset{`}{H}\overset{\sim}{H}\overset{¨}{H}\overset{¯}{H}\overset{´}{H}\overset{¸}{H}\overset{\hat{}}{H}\overset{ˇ}{H}\overset{˘}{H}\overset{˙}{H}\overset{˚}{H}\overset{˜}{H}\overset{˝}{H}\widehat{H}\overset{̑}{H}\overset{‾}{H}\dddot{H}\ddddot{H}\overset{\leftarrow}{H}\overset{\rightarrow}{H}\overset{\leftrightarrow}{H}\overset{\leftharpoonup}{H}\overset{\leftharpoondown}{H}\overset{\rightharpoonup}{H}\overset{\rightharpoondown}{H}\overbracket{H}\overset{⎵}{H}\overset{⏜}{H}\overset{⏝}{H}\overbrace{H}\overset{\underbrace{}}{H}\overset{⥎}{H}\overset{⥐}{H}} \end{array}
test/writer/tex/accents2.test view
@@ -88,7 +88,7 @@ >>> tex \begin{array}{l} \text{default: (accent=true)} \\-{\overset{'}{x}\hat{x}\overset{\_}{x}\grave{x}\overset{\sim}{x}\overset{¨}{x}\overline{x}\acute{x}\overset{¸}{x}\widehat{x}\check{x}\breve{x}\overset{˙}{x}\overset{˚}{x}\widetilde{x}\overset{˝}{x}\widehat{x}\overset{̑}{x}\bar{x}\dddot{x}\ddddot{x}\overset{\leftarrow}{x}\overset{\rightarrow}{x}\overset{\leftrightarrow}{x}\overset{\leftharpoonup}{x}\overset{\leftharpoondown}{x}\overset{\rightharpoonup}{x}\overset{\rightharpoondown}{x}\overset{⎴}{x}\overset{⎵}{x}\overset{⏜}{x}\overset{⏝}{x}\overbrace{x}\overset{\underbrace{}}{x}\overset{⥎}{x}\overset{⥐}{x}} \\+{\overset{'}{x}\hat{x}\overset{\_}{x}\grave{x}\overset{\sim}{x}\overset{¨}{x}\overline{x}\acute{x}\overset{¸}{x}\widehat{x}\check{x}\breve{x}\overset{˙}{x}\overset{˚}{x}\widetilde{x}\overset{˝}{x}\widehat{x}\overset{̑}{x}\bar{x}\dddot{x}\ddddot{x}\overset{\leftarrow}{x}\overset{\rightarrow}{x}\overset{\leftrightarrow}{x}\overset{\leftharpoonup}{x}\overset{\leftharpoondown}{x}\overset{\rightharpoonup}{x}\overset{\rightharpoondown}{x}\overbracket{x}\overset{⎵}{x}\overset{⏜}{x}\overset{⏝}{x}\overbrace{x}\overset{\underbrace{}}{x}\overset{⥎}{x}\overset{⥐}{x}} \\ \text{accent=false:} \\-{\overset{'}{x}\overset{\hat{}}{x}\overset{\_}{x}\overset{`}{x}\overset{\sim}{x}\overset{¨}{x}\overset{¯}{x}\overset{´}{x}\overset{¸}{x}\overset{\hat{}}{x}\overset{ˇ}{x}\overset{˘}{x}\overset{˙}{x}\overset{˚}{x}\overset{˜}{x}\overset{˝}{x}\widehat{x}\overset{̑}{x}\overset{‾}{x}\dddot{x}\ddddot{x}\overset{\leftarrow}{x}\overset{\rightarrow}{x}\overset{\leftrightarrow}{x}\overset{\leftharpoonup}{x}\overset{\leftharpoondown}{x}\overset{\rightharpoonup}{x}\overset{\rightharpoondown}{x}\overset{⎴}{x}\overset{⎵}{x}\overset{⏜}{x}\overset{⏝}{x}\overbrace{x}\overset{\underbrace{}}{x}\overset{⥎}{x}\overset{⥐}{x}}+{\overset{'}{x}\overset{\hat{}}{x}\overset{\_}{x}\overset{`}{x}\overset{\sim}{x}\overset{¨}{x}\overset{¯}{x}\overset{´}{x}\overset{¸}{x}\overset{\hat{}}{x}\overset{ˇ}{x}\overset{˘}{x}\overset{˙}{x}\overset{˚}{x}\overset{˜}{x}\overset{˝}{x}\widehat{x}\overset{̑}{x}\overset{‾}{x}\dddot{x}\ddddot{x}\overset{\leftarrow}{x}\overset{\rightarrow}{x}\overset{\leftrightarrow}{x}\overset{\leftharpoonup}{x}\overset{\leftharpoondown}{x}\overset{\rightharpoonup}{x}\overset{\rightharpoondown}{x}\overbracket{x}\overset{⎵}{x}\overset{⏜}{x}\overset{⏝}{x}\overbrace{x}\overset{\underbrace{}}{x}\overset{⥎}{x}\overset{⥐}{x}} \end{array}
test/writer/tex/accents3.test view
@@ -88,7 +88,7 @@ >>> tex \begin{array}{l} \text{default: (accent=true)} \\-{\underset{'}{H}\underset{\hat{}}{H}\underline{H}\underset{`}{H}\underset{\sim}{H}\underset{¨}{H}\underset{¯}{H}\underset{´}{H}\underset{¸}{H}\underset{\hat{}}{H}\underset{ˇ}{H}\underset{˘}{H}\underset{˙}{H}\underset{˚}{H}\underset{˜}{H}\underset{˝}{H}\underset{\hat{}}{H}\underset{̑}{H}\underset{‾}{H}\underset{\dddot{}}{H}\underset{\ddddot{}}{H}\underset{\leftarrow}{H}\underset{\rightarrow}{H}\underset{\leftrightarrow}{H}\underset{\leftharpoonup}{H}\underset{\leftharpoondown}{H}\underset{\rightharpoonup}{H}\underset{\rightharpoondown}{H}\underset{⎴}{H}\underset{⎵}{H}\underset{⏜}{H}\underset{⏝}{H}\underset{\overbrace{}}{H}\underbrace{H}\underset{⥎}{H}\underset{⥐}{H}} \\+{\underset{'}{H}\underset{\hat{}}{H}\underline{H}\underset{`}{H}\underset{\sim}{H}\underset{¨}{H}\underset{¯}{H}\underset{´}{H}\underset{¸}{H}\underset{\hat{}}{H}\underset{ˇ}{H}\underset{˘}{H}\underset{˙}{H}\underset{˚}{H}\underset{˜}{H}\underset{˝}{H}\underset{\hat{}}{H}\underset{̑}{H}\underset{‾}{H}\underset{\dddot{}}{H}\underset{\ddddot{}}{H}\underset{\leftarrow}{H}\underset{\rightarrow}{H}\underset{\leftrightarrow}{H}\underset{\leftharpoonup}{H}\underset{\leftharpoondown}{H}\underset{\rightharpoonup}{H}\underset{\rightharpoondown}{H}\underset{⎴}{H}\underbracket{H}\underset{⏜}{H}\underset{⏝}{H}\underset{\overbrace{}}{H}\underbrace{H}\underset{⥎}{H}\underset{⥐}{H}} \\ \text{accent=false:} \\-{\underset{'}{H}\underset{\hat{}}{H}\underset{\_}{H}\underset{`}{H}\underset{\sim}{H}\underset{¨}{H}\underset{¯}{H}\underset{´}{H}\underset{¸}{H}\underset{\hat{}}{H}\underset{ˇ}{H}\underset{˘}{H}\underset{˙}{H}\underset{˚}{H}\underset{˜}{H}\underset{˝}{H}\underset{\hat{}}{H}\underset{̑}{H}\underset{‾}{H}\underset{\dddot{}}{H}\underset{\ddddot{}}{H}\underset{\leftarrow}{H}\underset{\rightarrow}{H}\underset{\leftrightarrow}{H}\underset{\leftharpoonup}{H}\underset{\leftharpoondown}{H}\underset{\rightharpoonup}{H}\underset{\rightharpoondown}{H}\underset{⎴}{H}\underset{⎵}{H}\underset{⏜}{H}\underset{⏝}{H}\underset{\overbrace{}}{H}\underbrace{H}\underset{⥎}{H}\underset{⥐}{H}}+{\underset{'}{H}\underset{\hat{}}{H}\underset{\_}{H}\underset{`}{H}\underset{\sim}{H}\underset{¨}{H}\underset{¯}{H}\underset{´}{H}\underset{¸}{H}\underset{\hat{}}{H}\underset{ˇ}{H}\underset{˘}{H}\underset{˙}{H}\underset{˚}{H}\underset{˜}{H}\underset{˝}{H}\underset{\hat{}}{H}\underset{̑}{H}\underset{‾}{H}\underset{\dddot{}}{H}\underset{\ddddot{}}{H}\underset{\leftarrow}{H}\underset{\rightarrow}{H}\underset{\leftrightarrow}{H}\underset{\leftharpoonup}{H}\underset{\leftharpoondown}{H}\underset{\rightharpoonup}{H}\underset{\rightharpoondown}{H}\underset{⎴}{H}\underbracket{H}\underset{⏜}{H}\underset{⏝}{H}\underset{\overbrace{}}{H}\underbrace{H}\underset{⥎}{H}\underset{⥐}{H}} \end{array}
test/writer/tex/accents4.test view
@@ -88,7 +88,7 @@ >>> tex \begin{array}{l} \text{default: (accent=true)} \\-{\underset{'}{x}\underset{\hat{}}{x}\underline{x}\underset{`}{x}\underset{\sim}{x}\underset{¨}{x}\underset{¯}{x}\underset{´}{x}\underset{¸}{x}\underset{\hat{}}{x}\underset{ˇ}{x}\underset{˘}{x}\underset{˙}{x}\underset{˚}{x}\underset{˜}{x}\underset{˝}{x}\underset{\hat{}}{x}\underset{̑}{x}\underset{‾}{x}\underset{\dddot{}}{x}\underset{\ddddot{}}{x}\underset{\leftarrow}{x}\underset{\rightarrow}{x}\underset{\leftrightarrow}{x}\underset{\leftharpoonup}{x}\underset{\leftharpoondown}{x}\underset{\rightharpoonup}{x}\underset{\rightharpoondown}{x}\underset{⎴}{x}\underset{⎵}{x}\underset{⏜}{x}\underset{⏝}{x}\underset{\overbrace{}}{x}\underbrace{x}\underset{⥎}{x}\underset{⥐}{x}} \\+{\underset{'}{x}\underset{\hat{}}{x}\underline{x}\underset{`}{x}\underset{\sim}{x}\underset{¨}{x}\underset{¯}{x}\underset{´}{x}\underset{¸}{x}\underset{\hat{}}{x}\underset{ˇ}{x}\underset{˘}{x}\underset{˙}{x}\underset{˚}{x}\underset{˜}{x}\underset{˝}{x}\underset{\hat{}}{x}\underset{̑}{x}\underset{‾}{x}\underset{\dddot{}}{x}\underset{\ddddot{}}{x}\underset{\leftarrow}{x}\underset{\rightarrow}{x}\underset{\leftrightarrow}{x}\underset{\leftharpoonup}{x}\underset{\leftharpoondown}{x}\underset{\rightharpoonup}{x}\underset{\rightharpoondown}{x}\underset{⎴}{x}\underbracket{x}\underset{⏜}{x}\underset{⏝}{x}\underset{\overbrace{}}{x}\underbrace{x}\underset{⥎}{x}\underset{⥐}{x}} \\ \text{accent=false:} \\-{\underset{'}{x}\underset{\hat{}}{x}\underset{\_}{x}\underset{`}{x}\underset{\sim}{x}\underset{¨}{x}\underset{¯}{x}\underset{´}{x}\underset{¸}{x}\underset{\hat{}}{x}\underset{ˇ}{x}\underset{˘}{x}\underset{˙}{x}\underset{˚}{x}\underset{˜}{x}\underset{˝}{x}\underset{\hat{}}{x}\underset{̑}{x}\underset{‾}{x}\underset{\dddot{}}{x}\underset{\ddddot{}}{x}\underset{\leftarrow}{x}\underset{\rightarrow}{x}\underset{\leftrightarrow}{x}\underset{\leftharpoonup}{x}\underset{\leftharpoondown}{x}\underset{\rightharpoonup}{x}\underset{\rightharpoondown}{x}\underset{⎴}{x}\underset{⎵}{x}\underset{⏜}{x}\underset{⏝}{x}\underset{\overbrace{}}{x}\underbrace{x}\underset{⥎}{x}\underset{⥐}{x}}+{\underset{'}{x}\underset{\hat{}}{x}\underset{\_}{x}\underset{`}{x}\underset{\sim}{x}\underset{¨}{x}\underset{¯}{x}\underset{´}{x}\underset{¸}{x}\underset{\hat{}}{x}\underset{ˇ}{x}\underset{˘}{x}\underset{˙}{x}\underset{˚}{x}\underset{˜}{x}\underset{˝}{x}\underset{\hat{}}{x}\underset{̑}{x}\underset{‾}{x}\underset{\dddot{}}{x}\underset{\ddddot{}}{x}\underset{\leftarrow}{x}\underset{\rightarrow}{x}\underset{\leftrightarrow}{x}\underset{\leftharpoonup}{x}\underset{\leftharpoondown}{x}\underset{\rightharpoonup}{x}\underset{\rightharpoondown}{x}\underset{⎴}{x}\underbracket{x}\underset{⏜}{x}\underset{⏝}{x}\underset{\overbrace{}}{x}\underbrace{x}\underset{⥎}{x}\underset{⥐}{x}} \end{array}
test/writer/tex/accents5.test view
@@ -295,7 +295,7 @@ >>> tex \begin{array}{l} \text{default: (accent=true)} \\-{\underset{'}{\overset{'}{H}}\underset{\hat{}}{\hat{H}}\underline{\overset{\_}{H}}\underset{`}{\grave{H}}\underset{\sim}{\overset{\sim}{H}}\underset{¨}{\overset{¨}{H}}\underset{¯}{\overline{H}}\underset{´}{\acute{H}}\underset{¸}{\overset{¸}{H}}\underset{\hat{}}{\widehat{H}}\underset{ˇ}{\check{H}}\underset{˘}{\breve{H}}\underset{˙}{\overset{˙}{H}}\underset{˚}{\overset{˚}{H}}\underset{˜}{\widetilde{H}}\underset{˝}{\overset{˝}{H}}\underset{\hat{}}{\widehat{H}}\underset{̑}{\overset{̑}{H}}\underset{‾}{\bar{H}}\underset{\dddot{}}{\dddot{H}}\underset{\ddddot{}}{\ddddot{H}}\underset{\leftarrow}{\overset{\leftarrow}{H}}\underset{\rightarrow}{\overset{\rightarrow}{H}}\underset{\leftrightarrow}{\overset{\leftrightarrow}{H}}\underset{\leftharpoonup}{\overset{\leftharpoonup}{H}}\underset{\leftharpoondown}{\overset{\leftharpoondown}{H}}\underset{\rightharpoonup}{\overset{\rightharpoonup}{H}}\underset{\rightharpoondown}{\overset{\rightharpoondown}{H}}\underset{⎴}{\overset{⎴}{H}}\underset{⎵}{\overset{⎵}{H}}\underset{⏜}{\overset{⏜}{H}}\underset{⏝}{\overset{⏝}{H}}\underset{\overbrace{}}{\overbrace{H}}\underbrace{\overset{\underbrace{}}{H}}\underset{⥎}{\overset{⥎}{H}}\underset{⥐}{\overset{⥐}{H}}} \\+{\underset{'}{\overset{'}{H}}\underset{\hat{}}{\hat{H}}\underline{\overset{\_}{H}}\underset{`}{\grave{H}}\underset{\sim}{\overset{\sim}{H}}\underset{¨}{\overset{¨}{H}}\underset{¯}{\overline{H}}\underset{´}{\acute{H}}\underset{¸}{\overset{¸}{H}}\underset{\hat{}}{\widehat{H}}\underset{ˇ}{\check{H}}\underset{˘}{\breve{H}}\underset{˙}{\overset{˙}{H}}\underset{˚}{\overset{˚}{H}}\underset{˜}{\widetilde{H}}\underset{˝}{\overset{˝}{H}}\underset{\hat{}}{\widehat{H}}\underset{̑}{\overset{̑}{H}}\underset{‾}{\bar{H}}\underset{\dddot{}}{\dddot{H}}\underset{\ddddot{}}{\ddddot{H}}\underset{\leftarrow}{\overset{\leftarrow}{H}}\underset{\rightarrow}{\overset{\rightarrow}{H}}\underset{\leftrightarrow}{\overset{\leftrightarrow}{H}}\underset{\leftharpoonup}{\overset{\leftharpoonup}{H}}\underset{\leftharpoondown}{\overset{\leftharpoondown}{H}}\underset{\rightharpoonup}{\overset{\rightharpoonup}{H}}\underset{\rightharpoondown}{\overset{\rightharpoondown}{H}}\underset{⎴}{\overbracket{H}}\underbracket{\overset{⎵}{H}}\underset{⏜}{\overset{⏜}{H}}\underset{⏝}{\overset{⏝}{H}}\underset{\overbrace{}}{\overbrace{H}}\underbrace{\overset{\underbrace{}}{H}}\underset{⥎}{\overset{⥎}{H}}\underset{⥐}{\overset{⥐}{H}}} \\ \text{accent=false:} \\-{\underset{'}{\overset{'}{H}}\underset{\hat{}}{\overset{\hat{}}{H}}\underset{\_}{\overset{\_}{H}}\underset{`}{\overset{`}{H}}\underset{\sim}{\overset{\sim}{H}}\underset{¨}{\overset{¨}{H}}\underset{¯}{\overset{¯}{H}}\underset{´}{\overset{´}{H}}\underset{¸}{\overset{¸}{H}}\underset{\hat{}}{\overset{\hat{}}{H}}\underset{ˇ}{\overset{ˇ}{H}}\underset{˘}{\overset{˘}{H}}\underset{˙}{\overset{˙}{H}}\underset{˚}{\overset{˚}{H}}\underset{˜}{\overset{˜}{H}}\underset{˝}{\overset{˝}{H}}\underset{\hat{}}{\widehat{H}}\underset{̑}{\overset{̑}{H}}\underset{‾}{\overset{‾}{H}}\underset{\dddot{}}{\dddot{H}}\underset{\ddddot{}}{\ddddot{H}}\underset{\leftarrow}{\overset{\leftarrow}{H}}\underset{\rightarrow}{\overset{\rightarrow}{H}}\underset{\leftrightarrow}{\overset{\leftrightarrow}{H}}\underset{\leftharpoonup}{\overset{\leftharpoonup}{H}}\underset{\leftharpoondown}{\overset{\leftharpoondown}{H}}\underset{\rightharpoonup}{\overset{\rightharpoonup}{H}}\underset{\rightharpoondown}{\overset{\rightharpoondown}{H}}\underset{⎴}{\overset{⎴}{H}}\underset{⎵}{\overset{⎵}{H}}\underset{⏜}{\overset{⏜}{H}}\underset{⏝}{\overset{⏝}{H}}\underset{\overbrace{}}{\overbrace{H}}\underbrace{\overset{\underbrace{}}{H}}\underset{⥎}{\overset{⥎}{H}}\underset{⥐}{\overset{⥐}{H}}}+{\underset{'}{\overset{'}{H}}\underset{\hat{}}{\overset{\hat{}}{H}}\underset{\_}{\overset{\_}{H}}\underset{`}{\overset{`}{H}}\underset{\sim}{\overset{\sim}{H}}\underset{¨}{\overset{¨}{H}}\underset{¯}{\overset{¯}{H}}\underset{´}{\overset{´}{H}}\underset{¸}{\overset{¸}{H}}\underset{\hat{}}{\overset{\hat{}}{H}}\underset{ˇ}{\overset{ˇ}{H}}\underset{˘}{\overset{˘}{H}}\underset{˙}{\overset{˙}{H}}\underset{˚}{\overset{˚}{H}}\underset{˜}{\overset{˜}{H}}\underset{˝}{\overset{˝}{H}}\underset{\hat{}}{\widehat{H}}\underset{̑}{\overset{̑}{H}}\underset{‾}{\overset{‾}{H}}\underset{\dddot{}}{\dddot{H}}\underset{\ddddot{}}{\ddddot{H}}\underset{\leftarrow}{\overset{\leftarrow}{H}}\underset{\rightarrow}{\overset{\rightarrow}{H}}\underset{\leftrightarrow}{\overset{\leftrightarrow}{H}}\underset{\leftharpoonup}{\overset{\leftharpoonup}{H}}\underset{\leftharpoondown}{\overset{\leftharpoondown}{H}}\underset{\rightharpoonup}{\overset{\rightharpoonup}{H}}\underset{\rightharpoondown}{\overset{\rightharpoondown}{H}}\underset{⎴}{\overbracket{H}}\underbracket{\overset{⎵}{H}}\underset{⏜}{\overset{⏜}{H}}\underset{⏝}{\overset{⏝}{H}}\underset{\overbrace{}}{\overbrace{H}}\underbrace{\overset{\underbrace{}}{H}}\underset{⥎}{\overset{⥎}{H}}\underset{⥐}{\overset{⥐}{H}}} \end{array}
test/writer/tex/accents6.test view
@@ -295,7 +295,7 @@ >>> tex \begin{array}{l} \text{default: (accent=true)} \\-{\underset{'}{\overset{'}{x}}\underset{\hat{}}{\hat{x}}\underline{\overset{\_}{x}}\underset{`}{\grave{x}}\underset{\sim}{\overset{\sim}{x}}\underset{¨}{\overset{¨}{x}}\underset{¯}{\overline{x}}\underset{´}{\acute{x}}\underset{¸}{\overset{¸}{x}}\underset{\hat{}}{\widehat{x}}\underset{ˇ}{\check{x}}\underset{˘}{\breve{x}}\underset{˙}{\overset{˙}{x}}\underset{˚}{\overset{˚}{x}}\underset{˜}{\widetilde{x}}\underset{˝}{\overset{˝}{x}}\underset{\hat{}}{\widehat{x}}\underset{̑}{\overset{̑}{x}}\underset{‾}{\bar{x}}\underset{\dddot{}}{\dddot{x}}\underset{\ddddot{}}{\ddddot{x}}\underset{\leftarrow}{\overset{\leftarrow}{x}}\underset{\rightarrow}{\overset{\rightarrow}{x}}\underset{\leftrightarrow}{\overset{\leftrightarrow}{x}}\underset{\leftharpoonup}{\overset{\leftharpoonup}{x}}\underset{\leftharpoondown}{\overset{\leftharpoondown}{x}}\underset{\rightharpoonup}{\overset{\rightharpoonup}{x}}\underset{\rightharpoondown}{\overset{\rightharpoondown}{x}}\underset{⎴}{\overset{⎴}{x}}\underset{⎵}{\overset{⎵}{x}}\underset{⏜}{\overset{⏜}{x}}\underset{⏝}{\overset{⏝}{x}}\underset{\overbrace{}}{\overbrace{x}}\underbrace{\overset{\underbrace{}}{x}}\underset{⥎}{\overset{⥎}{x}}\underset{⥐}{\overset{⥐}{x}}} \\+{\underset{'}{\overset{'}{x}}\underset{\hat{}}{\hat{x}}\underline{\overset{\_}{x}}\underset{`}{\grave{x}}\underset{\sim}{\overset{\sim}{x}}\underset{¨}{\overset{¨}{x}}\underset{¯}{\overline{x}}\underset{´}{\acute{x}}\underset{¸}{\overset{¸}{x}}\underset{\hat{}}{\widehat{x}}\underset{ˇ}{\check{x}}\underset{˘}{\breve{x}}\underset{˙}{\overset{˙}{x}}\underset{˚}{\overset{˚}{x}}\underset{˜}{\widetilde{x}}\underset{˝}{\overset{˝}{x}}\underset{\hat{}}{\widehat{x}}\underset{̑}{\overset{̑}{x}}\underset{‾}{\bar{x}}\underset{\dddot{}}{\dddot{x}}\underset{\ddddot{}}{\ddddot{x}}\underset{\leftarrow}{\overset{\leftarrow}{x}}\underset{\rightarrow}{\overset{\rightarrow}{x}}\underset{\leftrightarrow}{\overset{\leftrightarrow}{x}}\underset{\leftharpoonup}{\overset{\leftharpoonup}{x}}\underset{\leftharpoondown}{\overset{\leftharpoondown}{x}}\underset{\rightharpoonup}{\overset{\rightharpoonup}{x}}\underset{\rightharpoondown}{\overset{\rightharpoondown}{x}}\underset{⎴}{\overbracket{x}}\underbracket{\overset{⎵}{x}}\underset{⏜}{\overset{⏜}{x}}\underset{⏝}{\overset{⏝}{x}}\underset{\overbrace{}}{\overbrace{x}}\underbrace{\overset{\underbrace{}}{x}}\underset{⥎}{\overset{⥎}{x}}\underset{⥐}{\overset{⥐}{x}}} \\ \text{accent=false:} \\-{\underset{'}{\overset{'}{x}}\underset{\hat{}}{\overset{\hat{}}{x}}\underset{\_}{\overset{\_}{x}}\underset{`}{\overset{`}{x}}\underset{\sim}{\overset{\sim}{x}}\underset{¨}{\overset{¨}{x}}\underset{¯}{\overset{¯}{x}}\underset{´}{\overset{´}{x}}\underset{¸}{\overset{¸}{x}}\underset{\hat{}}{\overset{\hat{}}{x}}\underset{ˇ}{\overset{ˇ}{x}}\underset{˘}{\overset{˘}{x}}\underset{˙}{\overset{˙}{x}}\underset{˚}{\overset{˚}{x}}\underset{˜}{\overset{˜}{x}}\underset{˝}{\overset{˝}{x}}\underset{\hat{}}{\widehat{x}}\underset{̑}{\overset{̑}{x}}\underset{‾}{\overset{‾}{x}}\underset{\dddot{}}{\dddot{x}}\underset{\ddddot{}}{\ddddot{x}}\underset{\leftarrow}{\overset{\leftarrow}{x}}\underset{\rightarrow}{\overset{\rightarrow}{x}}\underset{\leftrightarrow}{\overset{\leftrightarrow}{x}}\underset{\leftharpoonup}{\overset{\leftharpoonup}{x}}\underset{\leftharpoondown}{\overset{\leftharpoondown}{x}}\underset{\rightharpoonup}{\overset{\rightharpoonup}{x}}\underset{\rightharpoondown}{\overset{\rightharpoondown}{x}}\underset{⎴}{\overset{⎴}{x}}\underset{⎵}{\overset{⎵}{x}}\underset{⏜}{\overset{⏜}{x}}\underset{⏝}{\overset{⏝}{x}}\underset{\overbrace{}}{\overbrace{x}}\underbrace{\overset{\underbrace{}}{x}}\underset{⥎}{\overset{⥎}{x}}\underset{⥐}{\overset{⥐}{x}}}+{\underset{'}{\overset{'}{x}}\underset{\hat{}}{\overset{\hat{}}{x}}\underset{\_}{\overset{\_}{x}}\underset{`}{\overset{`}{x}}\underset{\sim}{\overset{\sim}{x}}\underset{¨}{\overset{¨}{x}}\underset{¯}{\overset{¯}{x}}\underset{´}{\overset{´}{x}}\underset{¸}{\overset{¸}{x}}\underset{\hat{}}{\overset{\hat{}}{x}}\underset{ˇ}{\overset{ˇ}{x}}\underset{˘}{\overset{˘}{x}}\underset{˙}{\overset{˙}{x}}\underset{˚}{\overset{˚}{x}}\underset{˜}{\overset{˜}{x}}\underset{˝}{\overset{˝}{x}}\underset{\hat{}}{\widehat{x}}\underset{̑}{\overset{̑}{x}}\underset{‾}{\overset{‾}{x}}\underset{\dddot{}}{\dddot{x}}\underset{\ddddot{}}{\ddddot{x}}\underset{\leftarrow}{\overset{\leftarrow}{x}}\underset{\rightarrow}{\overset{\rightarrow}{x}}\underset{\leftrightarrow}{\overset{\leftrightarrow}{x}}\underset{\leftharpoonup}{\overset{\leftharpoonup}{x}}\underset{\leftharpoondown}{\overset{\leftharpoondown}{x}}\underset{\rightharpoonup}{\overset{\rightharpoonup}{x}}\underset{\rightharpoondown}{\overset{\rightharpoondown}{x}}\underset{⎴}{\overbracket{x}}\underbracket{\overset{⎵}{x}}\underset{⏜}{\overset{⏜}{x}}\underset{⏝}{\overset{⏝}{x}}\underset{\overbrace{}}{\overbrace{x}}\underbrace{\overset{\underbrace{}}{x}}\underset{⥎}{\overset{⥎}{x}}\underset{⥐}{\overset{⥐}{x}}} \end{array}
+ test/writer/tex/cancel.test view
@@ -0,0 +1,13 @@+<<< native+[ EBoxed+    (EGrouped+       [ ECancel ForwardSlash (EIdentifier "x")+       , ESymbol Bin "+"+       , ECancel BackSlash (EIdentifier "y")+       , ESymbol Rel "="+       , ECancel XSlash (EIdentifier "z")+       ])+]++>>> tex+\boxed{\cancel{x} + \bcancel{y} = \xcancel{z}}
test/writer/tex/subsup.test view
@@ -65,4 +65,4 @@ , ESubsup (ESpace (1 % 1)) (EIdentifier "x") (ENumber "3") ] >>> tex-x_{b}^{a}\quad x_{b}^{a}\quad\min_{A}\quad\max_{B}\quad\det_{C}\quad\Pr_{A}\quad\gcd_{A}\quad{\dot{u}}^{2}\quad{\overline{u}}_{\varepsilon}\quad{\underline{u}}_{b}^{a}\quad\overset{\text{term}}{\overbrace{a + b}}\quad\overset{c}{\overset{⎴}{a + b}}\quad\underset{c}{\underbrace{a + b}}\quad\underset{c}{\underset{⎵}{a + b}}\quad^{H}e3\quad_{x}A\quad_{x}^{3}+x_{b}^{a}\quad x_{b}^{a}\quad\min_{A}\quad\max_{B}\quad\det_{C}\quad\Pr_{A}\quad\gcd_{A}\quad{\dot{u}}^{2}\quad{\overline{u}}_{\varepsilon}\quad{\underline{u}}_{b}^{a}\quad\overset{\text{term}}{\overbrace{a + b}}\quad\overset{c}{\overbracket{a + b}}\quad\underset{c}{\underbrace{a + b}}\quad\underset{c}{\underbracket{a + b}}\quad^{H}e3\quad_{x}A\quad_{x}^{3}
test/writer/typst/07.test view
@@ -20,4 +20,4 @@ , EIdentifier "a" ] >>> typst-u'' + p (x) u' + q (x) u = f (x) \, quad x > a+u'' + p (x) u' + q (x) u = f (x)\,quad x > a
test/writer/typst/08.test view
@@ -30,4 +30,4 @@ , EDelimited "(" ")" [ Right (EIdentifier "z") ] ] >>> typst-lr(|macron(z)|) = lr(|z|) \, lr(|(macron(z))^n|) = lr(|z|)^n \, arg (z^n) = n arg (z)+lr(|macron(z)|) = lr(|z|)\,lr(|(macron(z))^n|) = lr(|z|)^n\,arg (z^n) = n arg (z)
test/writer/typst/11.test view
@@ -23,4 +23,4 @@     NormalFrac (ENumber "1") (ESub (EIdentifier "l") (ENumber "0")) ] >>> typst-phi.alt_n (kappa) = 0.033 C_n^2 kappa^(- 11 \/ 3) \, quad 1 / L_0 lt.double kappa lt.double 1 / l_0+phi.alt_n (kappa) = 0.033 C_n^2 kappa^(- 11\/3)\,quad 1 / L_0 lt.double kappa lt.double 1 / l_0
test/writer/typst/13.test view
@@ -54,4 +54,4 @@     (EGrouped [ EIdentifier "n" , ESymbol Ord "!" ]) ] >>> typst-zws_p F_q (a_1 \, dots.h \, a_p ; c_1 \, dots.h \, c_q ; z) = sum_(n = 0)^oo frac((a_1)_n dots.h.c (a_p)_n, (c_1)_n dots.h.c (c_q)_n) frac(z^n, n !)+zws_p F_q (a_1 \, dots.h \, a_p \; c_1 \, dots.h \, c_q \; z) = sum_(n = 0)^oo frac((a_1)_n dots.h.c (a_p)_n, (c_1)_n dots.h.c (c_q)_n) frac(z^n, n !)
test/writer/typst/17.test view
@@ -8,4 +8,4 @@ , EIdentifier "x" ] >>> typst-x \* 4 = 4 \* x+x * 4 = 4 * x
+ test/writer/typst/cancel.test view
@@ -0,0 +1,9 @@+<<< native+[ ECancel ForwardSlash (EIdentifier "x")+, ESymbol Bin "+"+, ECancel BackSlash (EIdentifier "y")+, ESymbol Rel "="+, ECancel XSlash (EIdentifier "z")+]+>>> typst+cancel(x) + cancel(y, inverted: #true) = cancel(z, cross: #true)
test/writer/typst/complex1.test view
@@ -601,12 +601,12 @@     ] ] >>> typst-upright("Bernoulli Trials") & P \( E \) = (n / k) p_()^k \( 1 - p \)_()^(n - k)\+upright("Bernoulli Trials") & P\(E\) = (n / k) p_()^k\(1 - p\)_()^(n - k)\ upright("Cauchy-Schwarz Inequality") & (sum_(k = 1)^n a_k^() b_k^())_()^2 lt.eq (sum_(k = 1)^n a_k^2) (sum_(k = 1)^n b_k^2)\-upright("Cauchy Formula") & f \( z \) thin dot.c "Ind"_gamma^() \( z \) = frac(1, 2 pi i) integral.cont_gamma^() frac(f \( xi \), xi - z) thin d xi\+upright("Cauchy Formula") & f\(z\)thin dot.c "Ind"_gamma^()\(z\)= frac(1, 2 pi i) integral.cont_gamma^() frac(f\(xi\), xi - z) thin d xi\ upright("Cross Product") & V_1^() times V_2^() = mat(delim: "|", i, j, k; frac(partial X, partial u), frac(partial Y, partial u), 0; frac(partial X, partial v), frac(partial Y, partial v), 0)\-upright("Vandermonde Determinant") & mat(delim: "|", 1, 1, dots.h.c, 1; v_1^(), v_2^(), dots.h.c, v_n^(); v_1^2, v_2^2, dots.h.c, v_n^2; dots.v, dots.v, dots.down, dots.v; v_1^(n - 1), v_2^(n - 1), dots.h.c, v_n^(n - 1)) = product_(1 lt.eq i < j lt.eq n)^() \( v_j^() - v_i^() \)\-upright("Lorenz Equations") & accent(x, ˙)_() & = & sigma \( y - x \)\+upright("Vandermonde Determinant") & mat(delim: "|", 1, 1, dots.h.c, 1; v_1^(), v_2^(), dots.h.c, v_n^(); v_1^2, v_2^2, dots.h.c, v_n^2; dots.v, dots.v, dots.down, dots.v; v_1^(n - 1), v_2^(n - 1), dots.h.c, v_n^(n - 1)) = product_(1 lt.eq i < j lt.eq n)^()\(v_j^() - v_i^()\)\+upright("Lorenz Equations") & accent(x, ˙)_() & = & sigma\(y - x\)\ accent(y, ˙)_() & = & rho x - y - x z\ accent(z, ˙)_() & = & - beta z + x y\ upright("Maxwell's Equations") & {nabla zws times accent(B, ↼)_() - thin 1 / c thin frac(partial zws accent(E, ↼)_(), partial zws t) & = & frac(4 pi, c) thin accent(j, ↼)_()\@@ -614,9 +614,9 @@ nabla zws times accent(E, ↼)_() thin + thin 1 / c thin frac(partial zws accent(B, ↼)_(), partial zws t) & = & accent(0, ↼)_()\ nabla zws dot.c accent(B, ↼)_() & = & 0\ upright("Einstein Field Equations") & R_(mu nu)^() - 1 / 2 thin g_(mu nu)^() thin R = frac(8 pi G, c_()^4) thin T_(mu nu)^()\-upright("Ramanujan Identity") & frac(1, \( sqrt(phi sqrt(5)) - phi \) e_()^(25 / pi)) = 1 + frac(e_()^(- 2 pi), 1 + frac(e_()^(- 4 pi), 1 + frac(e_()^(- 6 pi), 1 + frac(e_()^(- 8 pi), 1 + dots.h))))\+upright("Ramanujan Identity") & frac(1, \(sqrt(phi sqrt(5)) - phi\)e_()^(25 / pi)) = 1 + frac(e_()^(- 2 pi), 1 + frac(e_()^(- 4 pi), 1 + frac(e_()^(- 6 pi), 1 + frac(e_()^(- 8 pi), 1 + dots.h))))\ upright("Another Ramanujan identity") & sum_(k = 1)^oo 1 / 2_()^(floor.l k dot.c zws phi floor.r) = frac(1, 2_()^0 + frac(1, 2_()^1 + dots.h.c))\-upright("Rogers-Ramanujan Identity") & 1 + sum_(k = 1)^oo frac(q_()^(k_()^2 + k), \( 1 - q \) \( 1 - q_()^2 \) dots.h.c \( 1 - q_()^k \)) = product_(j = 0)^oo frac(1, \( 1 - q_()^(5 j + 2) \) \( 1 - q_()^(5 j + 3) \)) \, upright("  ") upright("  ") f o r med \| q \| < 1 .\+upright("Rogers-Ramanujan Identity") & 1 + sum_(k = 1)^oo frac(q_()^(k_()^2 + k), \(1 - q\)\(1 - q_()^2\)dots.h.c\(1 - q_()^k\)) = product_(j = 0)^oo frac(1, \(1 - q_()^(5 j + 2)\)\(1 - q_()^(5 j + 3)\))\,upright("  ") upright("  ") f o r med\|q\|< 1 .\ upright("Commutative Diagram") & H & arrow.l & K\ arrow.b & zws & arrow.t\ H & arrow.r & K
test/writer/typst/complex2.test view
@@ -393,16 +393,16 @@ >>> typst upright("Quadratic Equation") & x = frac(- b plus.minus sqrt(b_()^2 - 4 a c), 2 a)\ upright("DisplayQuadratic Equation") & x = frac(- b plus.minus sqrt(b_()^2 - 4 a c), 2 a)\-upright("Rational Function") & f \( x \) = frac(1 - x_()^2, 1 - x_()^3)\-upright("Rational Function") & f \( x \) = frac(\( 1 - x_()^2 \) x_()^3, 1 - x_()^3)\-upright("Rational Function") & f \( x \) = frac(\( 1 - x_()^2 \) \( x_()^3 - 5 x \), 1 - x_()^3)\-upright("Parametrize Rational Function") & f \( x \) = frac(\( a_i^() - x_()^2 \)_()^5, 1 - x_()^3)\-upright("Stacked exponents") & g \( z \) = e_()^(- x_()^2)\-upright("Stacked exponents") & g \( z \) = e_()^(- \( z - a \)_()^2)\-upright("Stacked exponents") & g \( z \) = e_()^(- sum_(i = 0)^oo z_i^2)\-upright("Stacked exponents") & g \( y \) = e_()^(- sum_(i = 0)^oo y_i^2)\-upright("Stacked exponents") & g \( z \) = e_()^(- sum_(i = 0)^oo z_()^(frac(2, a - i)))\+upright("Rational Function") & f\(x\)= frac(1 - x_()^2, 1 - x_()^3)\+upright("Rational Function") & f\(x\)= frac(\(1 - x_()^2\)x_()^3, 1 - x_()^3)\+upright("Rational Function") & f\(x\)= frac(\(1 - x_()^2\)\(x_()^3 - 5 x\), 1 - x_()^3)\+upright("Parametrize Rational Function") & f\(x\)= frac(\(a_i^() - x_()^2\)_()^5, 1 - x_()^3)\+upright("Stacked exponents") & g\(z\)= e_()^(- x_()^2)\+upright("Stacked exponents") & g\(z\)= e_()^(-\(z - a\)_()^2)\+upright("Stacked exponents") & g\(z\)= e_()^(- sum_(i = 0)^oo z_i^2)\+upright("Stacked exponents") & g\(y\)= e_()^(- sum_(i = 0)^oo y_i^2)\+upright("Stacked exponents") & g\(z\)= e_()^(- sum_(i = 0)^oo z_()^(frac(2, a - i)))\ upright("Cross Product") & frac(x_1^() - x_2^(), x_3^() - x_4^()) frac(x_1^() - x_4^(), x_2^() - x_3^())\-upright("Cross Product") & \( frac(x_1^() - x_2^(), x_3^() - x_4^()) \) \( frac(x_1^() - x_4^(), x_2^() - x_3^()) \)\+upright("Cross Product") & \(frac(x_1^() - x_2^(), x_3^() - x_4^())\)\(frac(x_1^() - x_4^(), x_2^() - x_3^())\)\ upright("Cross Product") & (frac(x_1^() - x_2^(), x_3^() - x_4^())) (frac(x_1^() - x_4^(), x_2^() - x_3^()))\-upright("Cross Product") & frac(\( x_1^() - x_2^() \) \( x_3^() - x_4^() \), \( x_1^() - x_4^() \) \( x_2^() - x_3^() \))+upright("Cross Product") & frac(\(x_1^() - x_2^()\)\(x_3^() - x_4^()\), \(x_1^() - x_4^()\)\(x_2^() - x_3^()\))
test/writer/typst/deMorgans_law.test view
@@ -36,4 +36,4 @@     (ESymbol TOver "\175") ] >>> typst-not (p and q) arrow.l.r.double (not p) or (not q) overline(union.big_(i = 1)^n A_i) = sect.big_(i = 1)^n overline(A_i)+not (p and q) arrow.l.r.double (not p) or (not q) overline(union.big_(i = 1)^n A_i) = inter.big_(i = 1)^n overline(A_i)
test/writer/typst/differentiable_manifold.test view
@@ -59,5 +59,5 @@     ] ] >>> typst-gamma_1 equiv gamma_2 arrow.l.r.double {gamma_1 (0) = gamma_2 (0) = p \, upright(" and ")\+gamma_1 equiv gamma_2 arrow.l.r.double {gamma_1 (0) = gamma_2 (0) = p\,upright(" and ")\ frac(upright(d), upright(d) t) phi.alt compose gamma_1 (t)\|_(t = 0) = frac(upright(d), upright(d) t) phi.alt compose gamma_2 (t)\|_(t = 0)
test/writer/typst/largeop1.test view
@@ -76,9 +76,9 @@     ] ] >>> typst-upright("displaystyle: false largeop: false") & and.big or.big integral sum product union.big sect.big\-upright("displaystyle: false largeop: true") & and.big or.big integral sum product union.big sect.big\-upright("displaystyle: true largeop: false") & and.big or.big integral sum product union.big sect.big\-upright("displaystyle: true largeop: true") & and.big or.big integral sum product union.big sect.big\-upright("displaystyle: false largeop: default") & and.big or.big integral sum product union.big sect.big\-upright("displaystyle: true largeop: default") & and.big or.big integral sum product union.big sect.big+upright("displaystyle: false largeop: false") & and.big or.big integral sum product union.big inter.big\+upright("displaystyle: false largeop: true") & and.big or.big integral sum product union.big inter.big\+upright("displaystyle: true largeop: false") & and.big or.big integral sum product union.big inter.big\+upright("displaystyle: true largeop: true") & and.big or.big integral sum product union.big inter.big\+upright("displaystyle: false largeop: default") & and.big or.big integral sum product union.big inter.big\+upright("displaystyle: true largeop: default") & and.big or.big integral sum product union.big inter.big
test/writer/typst/largeopPos3.test view
@@ -8,4 +8,4 @@     [ EIdentifier "A" , ESymbol Bin "\8745" , EIdentifier "B" ] ] >>> typst-sect.big_(i = 0)^oo A sect B+inter.big_(i = 0)^oo A inter B
test/writer/typst/primes2.test view
@@ -27,4 +27,4 @@ , ESuper (EIdentifier "H") (ESymbol Accent "\8279") ] >>> typst-H^(\") H^(') H^(\*) H^(`) H^ª H^degree H^(²) H^(³) H^acute H^(¹) H^º H^quote.l.single H^quote.r.single H^quote.low.single H^quote.high.single H^quote.l.double H^quote.r.double H^quote.low.double H^quote.high.double H' H^('') H^(''') H^prime.rev H^prime.double.rev H^prime.triple.rev H^('''')+H^(\") H^(') H^(*) H^(`) H^ª H^degree H^(²) H^(³) H^acute H^(¹) H^º H^quote.l.single H^quote.r.single H^quote.low.single H^quote.high.single H^quote.l.double H^quote.r.double H^quote.low.double H^quote.high.double H' H^('') H^(''') H^prime.rev H^prime.double.rev H^prime.triple.rev H^('''')
test/writer/typst/simple_sum_formula.test view
@@ -12,4 +12,4 @@     (ENumber "2") ] >>> typst-sum_(i = 1)^100 x = frac(100 \* 101, 2)+sum_(i = 1)^100 x = frac(100 * 101, 2)
test/writer/typst/sphere_volume.test view
@@ -126,7 +126,7 @@     ] ] >>> typst-S = { 0 lt.eq phi.alt lt.eq 2 pi \, med 0 lt.eq theta lt.eq pi \, med 0 lt.eq rho lt.eq R } upright(V o l u m e) & = integral.triple_S #h(-1em) rho^2 sin theta thin upright(d) rho thin upright(d) theta thin upright(d) phi.alt\+S = { 0 lt.eq phi.alt lt.eq 2 pi\,med 0 lt.eq theta lt.eq pi\,med 0 lt.eq rho lt.eq R } upright(V o l u m e) & = integral.triple_S #h(-1em) rho^2 sin theta thin upright(d) rho thin upright(d) theta thin upright(d) phi.alt\  & = integral_0^(2 pi) #h(-1em) upright(d) phi.alt thin integral_0^pi #h(-1em) sin theta thin upright(d) theta thin integral_0^R #h(-1em) rho^2 upright(d) rho\  & = phi.alt #scale(x: 180%, y: 180%)[\|]_0^(2 pi) med (- cos theta) #scale(x: 180%, y: 180%)[\|]_0^pi med 1 / 3 rho^3 #scale(x: 180%, y: 180%)[\|]_0^R\  & = 2 pi times 2 times 1 / 3 R^3\
texmath.cabal view
@@ -1,16 +1,17 @@ Name:                texmath-Version:             0.12.10.3+Version:             0.13.2 Cabal-Version:       >= 1.10 Build-type:          Simple Synopsis:            Conversion between math formats. Description:         The texmath library provides functions to read-  and write TeX math, presentation MathML, and OMML (Office-  Math Markup Language, used in Microsoft Office).  Support is also-  included for converting math formats to Gnu eqn, typst, and pandoc's-  native format (allowing conversion, via pandoc, to a variety of-  different markup formats).  The TeX reader supports basic LaTeX-  and AMS extensions, and it can parse and apply LaTeX macros.-  (See <https://johnmacfarlane.net/texmath here> for a live demo of+  and write TeX math, presentation MathML, and OMML (Office Math+  Markup Language, used in Microsoft Office). Support is also+  included for converting math formats to Gnu eqn, typst,+  StarMath, and pandoc's native format (allowing conversion, via+  pandoc, to a variety of different markup formats). The TeX+  reader supports basic LaTeX and AMS extensions, and it can+  parse and apply LaTeX macros. (See+  <https://johnmacfarlane.net/texmath here> for a live demo of   bidirectional conversion between LaTeX and MathML.)   .   The package also includes several utility modules which may be@@ -43,6 +44,7 @@                      test/writer/mml/*.test                      test/writer/omml/*.test                      test/writer/tex/*.test+                     test/writer/starmath/*.test                      test/writer/typst/*.test                      test/writer/eqn/*.test                      test/reader/mml/*.test@@ -66,10 +68,12 @@ Flag executable   description:       Compile test executable.   default:           False+  manual:            True  Flag server   description:       Compile webserver.   default:           False+  manual:            True  Library     Build-depends:       base >= 4.11 && < 5,@@ -80,7 +84,7 @@                          pandoc-types >= 1.20 && < 1.24,                          mtl >= 2.2.1,                          text,-                         typst-symbols >= 0.1.8.1 && < 0.1.9,+                         typst-symbols >= 0.3 && < 0.3.1,                          split      Exposed-modules:     Text.TeXMath,@@ -96,6 +100,7 @@                          Text.TeXMath.Writers.OMML,                          Text.TeXMath.Writers.Pandoc,                          Text.TeXMath.Writers.TeX,+                         Text.TeXMath.Writers.StarMath,                          Text.TeXMath.Writers.Typst,                          Text.TeXMath.Writers.Eqn,                          Text.TeXMath.Unicode.ToUnicode,