packages feed

texmath 0.12.6 → 0.12.7

raw patch · 78 files changed

+4206/−47 lines, 78 files

Files

README.markdown view
@@ -6,7 +6,7 @@ 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 and+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
changelog view
@@ -1,3 +1,9 @@+texmath (0.12.7)++  * Add typst writer. New module: Text.TeXMath.Writers.Typst.++  * TeX reader: Support multilined environment. Closes #210.+ texmath (0.12.6)    * MathML writer:
extra/texmath.hs view
@@ -58,6 +58,7 @@     ("native", StringWriter (\_ es -> tshow es) )   , ("tex", StringWriter (\_ -> writeTeX))   , ("eqn", StringWriter writeEqn)+  , ("typst", StringWriter writeTypst)   , ("omml",  XMLWriter writeOMML)   , ("xhtml",   XMLWriter (\dt e -> inHtml (writeMathML dt e)))   , ("mathml",   XMLWriter writeMathML)
server/Main.hs view
@@ -22,6 +22,45 @@ import Options.Applicative import Safe (readMay) +-- This is the data to be supplied by the JSON payload+-- of requests.+data Params = Params+  { text           :: Text+  , from           :: Format+  , to             :: Format+  , display        :: Bool+  } deriving (Show)++data Format =+  TeX | MathML | Eqn | OMML | Typst+  deriving (Show, Ord, Eq)++instance FromJSON Format where+   parseJSON (String s) =+               case T.toLower s of+                 "tex" -> pure TeX+                 "mathml" -> pure MathML+                 "eqn" -> pure Eqn+                 "typst" -> pure Typst+                 "omml" -> pure OMML+                 _ -> fail $ "Unknown format " <> T.unpack s+   parseJSON _ = fail "Expecting string format"++instance ToJSON Format where+   toJSON x = String $ T.toLower $ T.pack $ show x++instance FromHttpApiData Format where+   parseQueryParam t =+               case T.toLower t of+                 "tex" -> pure TeX+                 "mathml" -> pure MathML+                 "eqn" -> pure Eqn+                 "typst" -> pure Typst+                 "omml" -> pure OMML+                 _ -> Left $ "Unknown format " <> t++-- Automatically derive code to convert to/from JSON.+$(deriveJSON defaultOptions ''Params) data Opts = Opts   { port      :: Int } @@ -82,8 +121,10 @@                      TeX -> readTeX                      MathML -> readMathML                      Eqn -> \_ -> Left "eqn reader not implemented"+                     Typst -> \_ -> Left "typst 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@@ -92,43 +133,4 @@   handleErr (Right t) = return t   handleErr (Left err) = throwError $     err500 { errBody = TLE.encodeUtf8 $ TL.fromStrict err }---- This is the data to be supplied by the JSON payload--- of requests.-data Params = Params-  { text           :: Text-  , from           :: Format-  , to             :: Format-  , display        :: Bool-  } deriving (Show)--data Format =-  TeX | MathML | Eqn | OMML-  deriving (Show, Ord, Eq)--instance FromJSON Format where-   parseJSON (String s) =-               case T.toLower s of-                 "tex" -> pure TeX-                 "mathml" -> pure MathML-                 "eqn" -> pure Eqn-                 "omml" -> pure OMML-                 _ -> fail $ "Unknown format " <> T.unpack s-   parseJSON _ = fail "Expecting string format"--instance ToJSON Format where-   toJSON x = String $ T.toLower $ T.pack $ show x--instance FromHttpApiData Format where-   parseQueryParam t =-               case T.toLower t of-                 "tex" -> pure TeX-                 "mathml" -> pure MathML-                 "eqn" -> pure Eqn-                 "omml" -> pure OMML-                 _ -> Left $ "Unknown format " <> t---- Automatically derive code to convert to/from JSON.-$(deriveJSON defaultOptions ''Params)- 
server/texmath.html view
@@ -3,7 +3,7 @@ <head>   <meta charset="utf-8">   <meta name="viewport" content="width=device-width, initial-scale=1.0">-  <meta name="description" content="Convert between LaTeX, MathML, OMML, and eqn math formats.">+  <meta name="description" content="Convert between LaTeX, MathML, OMML, eqn, and typst math formats.">   <meta name="robots" content="index,follow">   <title>texmath demo</title>   <script src="//code.jquery.com/jquery-3.6.0.min.js"></script>@@ -72,7 +72,7 @@   <h1>texmath demo</h1>   <p><a href="https://github.com/jgm/texmath">texmath</a> is a Haskell   library, command-line program, and web server that converts between-  TeX, MathML, OMML, and eqn formats for mathematical formulas.</p>+  TeX, MathML, OMML, eqn, and typst formats for mathematical formulas.</p>   <div id="controls" class="container">     <button id="convert">Convert</button>     <label for="from">from</label>@@ -87,6 +87,7 @@       <option value="mathml" selected>mathml</option>       <option value="omml">omml</option>       <option value="eqn">eqn</option>+      <option value="typst">typst</option>     </select>     <select name="display" id="display">       <option value="true" selected>display</option>
src/Text/TeXMath.hs view
@@ -62,6 +62,7 @@                       writeTeXWith,                       addLaTeXEnvironment,                       writeEqn,+                      writeTypst,                       writeOMML,                       writeMathML,                       writePandoc,@@ -77,4 +78,5 @@ import Text.TeXMath.Writers.Pandoc import Text.TeXMath.Writers.TeX import Text.TeXMath.Writers.Eqn+import Text.TeXMath.Writers.Typst import Text.TeXMath.Types
src/Text/TeXMath/Readers/TeX.hs view
@@ -477,6 +477,7 @@   , ("Vmatrix", matrixWith "\x2225" "\x2225")   , ("split", align)   , ("multline", gather)+  , ("multlined", gather)   , ("gather", gather)   , ("gathered", gather)   , ("equation", equation)
src/Text/TeXMath/Writers/Eqn.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE GeneralizedNewtypeDeriving, ViewPatterns, GADTs, OverloadedStrings #-} {--Copyright (C) 2014 Matthew Pickering <matthewtpickering@gmail.com>+Copyright (C) 2016-2023 John MacFarlane <jgm@berkeley.edu>  This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by@@ -33,8 +33,7 @@ -- import Debug.Trace -- tr' x = trace (show x) x --- | Transforms an expression tree to equivalent Eqn with the default--- packages (amsmath and amssymb)+-- | Transforms an expression tree to equivalent Eqn writeEqn :: DisplayType -> [Exp] -> T.Text writeEqn dt exprs =   T.unwords $ map writeExp $ everywhere (mkT $ S.handleDownup dt) exprs
+ src/Text/TeXMath/Writers/Typst.hs view
@@ -0,0 +1,1004 @@+{-# LANGUAGE GeneralizedNewtypeDeriving, ViewPatterns, GADTs, OverloadedStrings #-}+{-+Copyright (C) 2023 John MacFarlane <jgm@berkeley.edu>++This program is free software; you can redistribute it and/or modify+it under the terms of the GNU General Public License as published by+the Free Software Foundation; either version 2 of the License, or+(at your option) any later version.++This program is distributed in the hope that it will be useful,+but WITHOUT ANY WARRANTY; without even the implied warranty of+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+GNU General Public License for more details.++You should have received a copy of the GNU General Public License+along with this program; if not, write to the Free Software+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA++-}++module Text.TeXMath.Writers.Typst (writeTypst) where++import Data.List (transpose)+import qualified Data.Map as M+import qualified Data.Text as T+import Text.TeXMath.Types+import qualified Text.TeXMath.Shared as S+import Data.Generics (everywhere, mkT)+import Data.Text (Text)++-- import Debug.Trace+-- tr' x = trace (show x) x++-- | Transforms an expression tree to equivalent Typst+writeTypst :: DisplayType -> [Exp] -> Text+writeTypst dt exprs =+  T.unwords $ map writeExp $ everywhere (mkT $ S.handleDownup dt) exprs++writeExps :: [Exp] -> Text+writeExps = T.intercalate " " . map writeExp++inParens :: Text -> Text+inParens s = "(" <> s <> ")"++inQuotes :: Text -> Text+inQuotes s = "\"" <> s <> "\""++esc :: Text -> Text+esc t =+  if T.any needsEscape t+     then T.concatMap escapeChar t+     else t+  where+    escapeChar c+      | needsEscape c = "\\" <> T.singleton c+      | otherwise = T.singleton c+    needsEscape '[' = True+    needsEscape ']' = True+    needsEscape '|' = True+    needsEscape '#' = True+    needsEscape '$' = True+    needsEscape '(' = True+    needsEscape ')' = True+    needsEscape '_' = True+    needsEscape _ = False++writeExp' :: Exp -> Text+writeExp' (EGrouped es) = "(" <> writeExps es <> ")"+writeExp' e = writeExp e++writeExp :: Exp -> Text+writeExp (ENumber s) = s+writeExp (ESymbol _t s) =+  maybe (esc s) id $ M.lookup s typstSymbols+writeExp (EIdentifier s) =+  if T.length s == 1+     then writeExp (ESymbol Ord s)+     else inQuotes s+writeExp (EMathOperator s)+  | s `elem` ["arccos", "arcsin", "arctan", "arg", "cos", "cosh",+              "cot", "ctg", "coth", "csc", "deg", "det", "dim", "exp",+              "gcd", "hom", "mod", "inf", "ker", "lg", "lim", "ln",+              "log", "max", "min", "Pr", "sec", "sin", "sinh", "sup",+              "tan", "tg", "tanh", "liminf", "and", "limsup"]+    = s+  | otherwise = "\"" <> s <> "\""+writeExp (EGrouped es) = writeExps es+writeExp (EFraction _fractype e1 e2) =+  case (e1, e2) of+    (EGrouped _, _) -> "frac(" <> writeExp e1 <> ", " <> writeExp e2 <> ")"+    (_, EGrouped _) -> "frac(" <> writeExp e1 <> ", " <> writeExp e2 <> ")"+    _ -> writeExp e1 <> " / " <> writeExp e2+writeExp (ESub b e1) = writeExp' b <> "_" <> writeExp' e1+writeExp (ESuper b e1) = writeExp' b <> "^" <> writeExp' e1+writeExp (ESubsup b e1 e2) = writeExp' b <> "_" <> writeExp' e1 <>+                                            "^" <> writeExp' e2+writeExp (EOver _convertible b e1) =+  case e1 of+    ESymbol Accent "`" -> "grave" <> inParens (writeExp b)+    ESymbol Accent "\xb4" -> "acute" <> inParens (writeExp b)+    ESymbol Accent "^" -> "hat" <> inParens (writeExp b)+    ESymbol Accent "~" -> "tilde" <> inParens (writeExp b)+    ESymbol Accent "\xaf" -> "macron" <> inParens (writeExp b)+    ESymbol Accent "\x2d8" -> "breve" <> inParens (writeExp b)+    ESymbol Accent "." -> "dot" <> inParens (writeExp b)+    ESymbol Accent "\xa8" -> "diaer" <> inParens (writeExp b)+    ESymbol Accent "\x2218" -> "circle" <> inParens (writeExp b)+    ESymbol Accent "\x2dd" -> "acute.double" <> inParens (writeExp b)+    ESymbol Accent "\x2c7" -> "caron" <> inParens (writeExp b)+    ESymbol Accent "\x2192" -> "->" <> inParens (writeExp b)+    ESymbol Accent "\x2190" -> "<-" <> inParens (writeExp b)+    ESymbol TOver "\9182" -> "overbrace(" <> writeExp b <> ")"+    ESymbol TOver "\9140" -> "overbracket(" <> writeExp b <> ")"+    _ -> writeExp' b <> "^" <> writeExp' e1+writeExp (EUnder _convertible b e1) =+  case e1 of+    ESymbol TUnder "_" -> "underline(" <> writeExp b <> ")"+    ESymbol TUnder "\9182" -> "underbrace(" <> writeExp b <> ")"+    ESymbol TUnder "\9140" -> "underbracket(" <> writeExp b <> ")"+    _ -> writeExp' b <> "_" <> writeExp' e1+writeExp (EUnderover convertible b e1 e2) =+  case (e1, e2) of+    (_, ESymbol Accent _) -> writeExp (EUnder convertible (EOver False b e2) e1)+    (_, ESymbol TOver _) -> writeExp (EUnder convertible (EOver False b e2) e1)+    (ESymbol TUnder _, _) -> writeExp (EOver convertible (EUnder False b e1) e2)+    _ -> writeExp' b <> "_" <> writeExp' e1 <> "^" <> writeExp' e2+writeExp (ESqrt e) = "sqrt(" <> writeExp e <> ")"+writeExp (ERoot i e) = "root(" <> writeExp i <> ", " <> writeExp e <> ")"+writeExp (ESpace width) =+  case (floor (width * 18) :: Int) of+    0 -> "zws"+    3 -> "thin"+    4 -> "med"+    6 -> "thick"+    18 -> "quad"+    n -> "#h(" <> tshow (n `div` 18) <> "em)"+writeExp (EText ttype s) =+  case ttype of+       TextNormal -> "upright" <> inParens (inQuotes s)+       TextItalic -> "italic" <> inParens (inQuotes s)+       TextBold   -> "bold" <> inParens (inQuotes s)+       TextBoldItalic -> "bold" <> inParens ("italic" <> inParens (inQuotes s))+       TextMonospace -> "mono" <> inParens (inQuotes s)+       TextSansSerif -> "sans" <> inParens (inQuotes s)+       TextDoubleStruck -> "bb" <> inParens (inQuotes s)+       TextScript -> "cal" <> inParens (inQuotes s)+       TextFraktur -> "frak" <> inParens (inQuotes s)+       TextSansSerifBold -> "bold" <> inParens ("sans" <> inParens (inQuotes s))+       TextSansSerifBoldItalic -> "bold" <>+         inParens ("italic" <> inParens ("sans" <> inParens (inQuotes s)))+       TextBoldScript -> "bold" <> inParens ("cal" <> inParens (inQuotes s))+       TextBoldFraktur -> "bold" <> inParens ("frak" <> inParens (inQuotes s))+       TextSansSerifItalic -> "italic" <>+          inParens ("sans" <> inParens (inQuotes s))+writeExp (EStyled ttype es) =+  let contents = writeExps es+  in case ttype of+       TextNormal -> "upright" <> inParens contents+       TextItalic -> "italic" <> inParens contents+       TextBold   -> "bold" <> inParens contents+       TextBoldItalic -> "bold" <> inParens ("italic" <> inParens contents)+       TextMonospace -> "mono" <> inParens contents+       TextSansSerif -> "sans" <> inParens contents+       TextDoubleStruck -> "bb" <> inParens contents+       TextScript -> "cal" <> inParens contents+       TextFraktur -> "frak" <> inParens contents+       TextSansSerifBold -> "bold" <> inParens ("sans" <> inParens contents)+       TextSansSerifBoldItalic -> "bold" <>+         inParens ("italic" <> inParens ("sans" <> inParens contents))+       TextBoldScript -> "bold" <> inParens ("cal" <> inParens contents)+       TextBoldFraktur -> "bold" <> inParens ("frak" <> inParens contents)+       TextSansSerifItalic -> "italic" <> inParens ("sans" <> inParens contents)+writeExp (EBoxed e) = "#box([" <> writeExp e <> "])"+writeExp (EPhantom e) = "#hide[" <> writeExp e <> "]"+writeExp (EScaled size e) =+  "#scale(x: " <> tshow (floor (100 * size) :: Int) <>+          "%, y: " <> tshow (floor (100 * size) :: Int) <>+          "%)[" <> writeExp e <> "]"+writeExp (EDelimited "(" ")" [Right (EArray _aligns rows)])+  | all (\row -> length row == 1) rows = -- vector+  "vec(" <> mkArray (transpose rows) <> ")"+writeExp (EDelimited "(" ")" [Right (EArray _aligns [[xs],[ys]])]) =+  "binom(" <> writeExps xs <> ", " <> writeExps ys <> ")"+writeExp (EDelimited "(" ")" [Right (EArray _aligns rows)]) =+  "mat(delim: \"(\", " <> mkArray rows <> ")"+writeExp (EDelimited "[" "]" [Right (EArray _aligns rows)]) =+  "mat(delim: \"[\", " <> mkArray rows <> ")"+writeExp (EDelimited "{" "}" [Right (EArray _aligns rows)]) =+  "mat(delim: \"{\", " <> mkArray rows <> ")"+writeExp (EDelimited "|" "|" [Right (EArray _aligns rows)]) =+  "mat(delim: \"|\", " <> mkArray rows <> ")"+writeExp (EDelimited "||" "||" [Right (EArray _aligns rows)]) =+  "mat(delim: \"||\", " <> mkArray rows <> ")"+writeExp (EDelimited "\x2223" "\x2223" [Right (EArray _aligns rows)]) =+  "mat(delim: \"||\", " <> mkArray rows <> ")"+writeExp (EDelimited "\x2225" "\x2225" [Right (EArray _aligns rows)]) =+  "mat(delim: \"||\", " <> mkArray rows <> ")"+writeExp (EDelimited op "" [Right (EArray [AlignLeft, AlignLeft] rows)]) =+  "cases" <> inParens("delim: " <> inQuotes op <> mconcat (map toCase rows))+   where toCase = (", " <>) . T.intercalate " & " . map writeExps+writeExp (EDelimited open close es) =+  if isDelim open && isDelim close+     then "lr" <> inParens (open <> body <> close)+     else esc open <> body <> esc close+  where fromDelimited (Left e)  = e+        fromDelimited (Right e) = writeExp e+        isDelim c = c `elem` ["(",")","[","]","{","}","|","||"]+        body = T.unwords (map fromDelimited es)+writeExp (EArray _aligns rows)+  = T.intercalate "\\\n" $ map mkRow rows+     where mkRow = T.intercalate " & " . map writeExps++mkArray :: [[[Exp]]] -> Text+mkArray rows =+  T.intercalate "; " $ map mkRow rows+ where+   mkRow = T.intercalate ", " . map mkCell+   mkCell = writeExps++tshow :: Show a => a -> Text+tshow = T.pack . show++typstSymbols :: M.Map Text Text+typstSymbols = M.fromList+  [ ("\x1d538","AA")+  , ("\x391","Alpha")+  , ("\x1d539","BB")+  , ("\x392","Beta")+  , ("\x2102","CC")+  , ("\x3A7","Chi")+  , ("\x1d53b","DD")+  , ("\x394","Delta")+  , ("\x1d53c","EE")+  , ("\x395","Epsilon")+  , ("\x397","Eta")+  , ("\x1d53d","FF")+  , ("\x1d53e","GG")+  , ("\x393","Gamma")+  , ("\x210d","HH")+  , ("\x1d540","II")+  , ("\x2111","Im")+  , ("\x399","Iota")+  , ("\x1d541","JJ")+  , ("\x1d542","KK")+  , ("\x3CF","Kai")+  , ("\x39A","Kappa")+  , ("\x1d543","LL")+  , ("\x39B","Lambda")+  , ("\x1d544","MM")+  , ("\x39C","Mu")+  , ("\x2115","NN")+  , ("\x39D","Nu")+  , ("\x1d546","OO")+  , ("\x3A9","Omega")+  , ("\x39F","Omicron")+  , ("\x2119","PP")+  , ("\x3A6","Phi")+  , ("\x3A0","Pi")+  , ("\x3A8","Psi")+  , ("\x211a","QQ")+  , ("\x211d","RR")+  , ("\x211c","Re")+  , ("\x3A1","Rho")+  , ("\x1d54a","SS")+  , ("\x3A3","Sigma")+  , ("\x1d54b","TT")+  , ("\x3A4","Tau")+  , ("\x398","Theta")+  , ("\x1d54c","UU")+  , ("\x3A5","Upsilon")+  , ("\x1d54d","VV")+  , ("\x1d54e","WW")+  , ("\x1d54f","XX")+  , ("\x39E","Xi")+  , ("\x1d550","YY")+  , ("\x2124","ZZ")+  , ("\x396","Zeta")+  , ("\xb4","acute")+  , ("\x2dd","acute.double")+  , ("\x5d0","alef")+  , ("\x3b1","alpha")+  , ("&","amp")+  , ("\x214b","amp.inv")+  , ("\x2227","and")+  , ("\x22c0","and.big")+  , ("\x22cf","and.curly")+  , ("\x27d1","and.dot")+  , ("\x2a53","and.double")+  , ("\x2220","angle")+  , ("\x2329","angle.l")+  , ("\x232a","angle.r")+  , ("\x300a","angle.l.double")+  , ("\x300b","angle.r.double")+  , ("\x299f","angle.acute")+  , ("\x2221","angle.arc")+  , ("\x299b","angle.arc.rev")+  , ("\x29a3","angle.rev")+  , ("\x221f","angle.right")+  , ("\11262","angle.right.rev")+  , ("\x22be","angle.right.arc")+  , ("\x299d","angle.right.dot")+  , ("\x299c","angle.right.sq")+  , ("\x27c0","angle.spatial")+  , ("\x2222","angle.spheric")+  , ("\x29a0","angle.spheric.rev")+  , ("\x29a1","angle.spheric.top")+  , ("\x212B","angstrom")+  , ("\x2248","approx")+  , ("\x224a","approx.eq")+  , ("\x2249","approx.not")+  , ("\x2192","arrow.r")+  , ("\x27fc","arrow.r.long.bar")+  , ("\x21a6","arrow.r.bar")+  , ("\x2937","arrow.r.curve")+  , ("\x21e2","arrow.r.dashed")+  , ("\x2911","arrow.r.dotted")+  , ("\x21d2","arrow.r.double")+  , ("\x2907","arrow.r.double.bar")+  , ("\x27f9","arrow.r.double.long")+  , ("\x27fe","arrow.r.double.long.bar")+  , ("\x21cf","arrow.r.double.not")+  , ("\x27a1","arrow.r.filled")+  , ("\x21aa","arrow.r.hook")+  , ("\x27f6","arrow.r.long")+  , ("\x27ff","arrow.r.long.squiggly")+  , ("\x21ac","arrow.r.loop")+  , ("\x219b","arrow.r.not")+  , ("\x2b46","arrow.r.quad")+  , ("\x21dd","arrow.r.squiggly")+  , ("\x21e5","arrow.r.stop")+  , ("\x21e8","arrow.r.stroked")+  , ("\x21a3","arrow.r.tail")+  , ("\x21db","arrow.r.triple")+  , ("\x2905","arrow.r.twohead.bar")+  , ("\x21a0","arrow.r.twohead")+  , ("\x219d","arrow.r.wave")+  , ("\x2190","arrow.l")+  , ("\x21a4","arrow.l.bar")+  , ("\x2936","arrow.l.curve")+  , ("\x21e0","arrow.l.dashed")+  , ("\x2b38","arrow.l.dotted")+  , ("\x21d0","arrow.l.double")+  , ("\x2906","arrow.l.double.bar")+  , ("\x27f8","arrow.l.double.long")+  , ("\x27fd","arrow.l.double.long.bar")+  , ("\x21cd","arrow.l.double.not")+  , ("\x2b05","arrow.l.filled")+  , ("\x21a9","arrow.l.hook")+  , ("\x27f5","arrow.l.long")+  , ("\x27fb","arrow.l.long.bar")+  , ("\x2b33","arrow.l.long.squiggly")+  , ("\x21ab","arrow.l.loop")+  , ("\x219a","arrow.l.not")+  , ("\x2b45","arrow.l.quad")+  , ("\x21dc","arrow.l.squiggly")+  , ("\x21e4","arrow.l.stop")+  , ("\x21e6","arrow.l.stroked")+  , ("\x21a2","arrow.l.tail")+  , ("\x21da","arrow.l.triple")+  , ("\x2b36","arrow.l.twohead.bar")+  , ("\x219e","arrow.l.twohead")+  , ("\x219c","arrow.l.wave")+  , ("\x2191","arrow.t")+  , ("\x21a5","arrow.t.bar")+  , ("\x2934","arrow.t.curve")+  , ("\x21e1","arrow.t.dashed")+  , ("\x21d1","arrow.t.double")+  , ("\x2b06","arrow.t.filled")+  , ("\x27f0","arrow.t.quad")+  , ("\x2912","arrow.t.stop")+  , ("\x21e7","arrow.t.stroked")+  , ("\x290a","arrow.t.triple")+  , ("\x219f","arrow.t.twohead")+  , ("\x2193","arrow.b")+  , ("\x21a7","arrow.b.bar")+  , ("\x2935","arrow.b.curve")+  , ("\x21e3","arrow.b.dashed")+  , ("\x21d3","arrow.b.double")+  , ("\x2b07","arrow.b.filled")+  , ("\x27f1","arrow.b.quad")+  , ("\x2913","arrow.b.stop")+  , ("\x21e9","arrow.b.stroked")+  , ("\x290b","arrow.b.triple")+  , ("\x21a1","arrow.b.twohead")+  , ("\x2194","arrow.l.r")+  , ("\x21d4","arrow.l.r.double")+  , ("\x27fa","arrow.l.r.double.long")+  , ("\x21ce","arrow.l.r.double.not")+  , ("\x2b0c","arrow.l.r.filled")+  , ("\x27f7","arrow.l.r.long")+  , ("\x21ae","arrow.l.r.not")+  , ("\x2b04","arrow.l.r.stroked")+  , ("\x21ad","arrow.l.r.wave")+  , ("\x2195","arrow.t.b")+  , ("\x21d5","arrow.t.b.double")+  , ("\x2b0d","arrow.t.b.filled")+  , ("\x21f3","arrow.t.b.stroked")+  , ("\x2197","arrow.tr")+  , ("\x21d7","arrow.tr.double")+  , ("\x2b08","arrow.tr.filled")+  , ("\x2924","arrow.tr.hook")+  , ("\x2b00","arrow.tr.stroked")+  , ("\x2198","arrow.br")+  , ("\x21d8","arrow.br.double")+  , ("\x2b0a","arrow.br.filled")+  , ("\x2925","arrow.br.hook")+  , ("\x2b02","arrow.br.stroked")+  , ("\x2196","arrow.tl")+  , ("\x21d6","arrow.tl.double")+  , ("\x2b09","arrow.tl.filled")+  , ("\x2923","arrow.tl.hook")+  , ("\x2b01","arrow.tl.stroked")+  , ("\x2199","arrow.bl")+  , ("\x21d9","arrow.bl.double")+  , ("\x2b0b","arrow.bl.filled")+  , ("\x2926","arrow.bl.hook")+  , ("\x2b03","arrow.bl.stroked")+  , ("\x2921","arrow.tl.br")+  , ("\x2922","arrow.tr.bl")+  , ("\x21ba","arrow.ccw")+  , ("\x21b6","arrow.ccw.half")+  , ("\x21bb","arrow.cw")+  , ("\x21b7","arrow.cw.half")+  , ("\x21af","arrow.zigzag")+  , ("\x2303","arrowhead.t")+  , ("\x2304","arrowhead.b")+  , ("\x21c9","arrows.rr")+  , ("\x21c7","arrows.ll")+  , ("\x21c8","arrows.tt")+  , ("\x21ca","arrows.bb")+  , ("\x21c6","arrows.lr")+  , ("\x21b9","arrows.lr.stop")+  , ("\x21c4","arrows.rl")+  , ("\x21c5","arrows.tb")+  , ("\x21f5","arrows.bt")+  , ("\x21f6","arrows.rrr")+  , ("\x2b31","arrows.lll")+  , ("*","ast")+  , ("\x204e","ast.low")+  , ("\x2051","ast.double")+  , ("\x2042","ast.triple")+  , ("\xfe61","ast.small")+  , ("\x2217","ast.op")+  , ("\x229b","ast.circle")+  , ("\x29c6","ast.sq")+  , ("@","at")+  , ("\\","backslash")+  , ("\x29b8","backslash.circle")+  , ("\x29f7","backslash.not")+  , ("\x2610","ballot")+  , ("\x2612","ballot.x")+  , ("|","bar.v")+  , ("\x2016","bar.v.double")+  , ("\x2980","bar.v.triple")+  , ("\xa6","bar.v.broken")+  , ("\x29b6","bar.v.circle")+  , ("\x2015","bar.h")+  , ("\x2235","because")+  , ("\x5d1","bet")+  , ("\x3b2","beta")+  , ("\x3d0","beta.alt")+  , ("\x20bf","bitcoin")+  , ("\x22a5","bot")+  , ("{","brace.l")+  , ("}","brace.r")+  , ("\x23de","brace.t")+  , ("\x23df","brace.b")+  , ("[","bracket.l")+  , ("]","bracket.r")+  , ("\x23b4","bracket.t")+  , ("\x23b5","bracket.b")+  , ("\x2d8","breve")+  , ("\x2038","caret")+  , ("\x2c7","caron")+  , ("\x2713","checkmark")+  , ("\x1f5f8","checkmark.light")+  , ("\x3c7","chi")+  , ("\x25cb","circle.stroked")+  , ("\x2218","circle.stroked.tiny")+  , ("\x26ac","circle.stroked.small")+  , ("\x25ef","circle.stroked.big")+  , ("\x25cf","circle.filled")+  , ("\x2981","circle.filled.tiny")+  , ("\x2219","circle.filled.small")+  , ("\x2b24","circle.filled.big")+  , ("\x25cc","circle.dotted")+  , ("\x229a","circle.nested")+  , ("\x2105","co")+  , (":","colon")+  , ("\x2254","colon.eq")+  , ("\x2a74","colon.double.eq")+  , (",","comma")+  , ("\x2201","complement")+  , ("\x2218","compose")+  , ("\x2217","convolve")+  , ("\xa9","copyright")+  , ("\x2117","copyright.sound")+  , ("\x2020","dagger")+  , ("\x2021","dagger.double")+  , ("\x2013","dash.en")+  , ("\x2014","dash.em")+  , ("\x2012","dash.fig")+  , ("\x301c","dash.wave")+  , ("\x2239","dash.colon")+  , ("\x229d","dash.circle")+  , ("\x3030","dash.wave.double")+  , ("\xb0","degree")+  , ("\x2103","degree.c")+  , ("\x2109","degree.f")+  , ("\x3b4","delta")+  , ("\xa8","diaer")+  , ("\x2300","diameter")+  , ("\x25c7","diamond.stroked")+  , ("\x22c4","diamond.stroked.small")+  , ("\x2b26","diamond.stroked.medium")+  , ("\x27d0","diamond.stroked.dot")+  , ("\x25c6","diamond.filled")+  , ("\x2b25","diamond.filled.medium")+  , ("\x2b29","diamond.filled.small")+  , ("\x2202","diff")+  , ("\xf7","div")+  , ("\x2a38","div.circle")+  , ("\x2223","divides")+  , ("\x2224","divides.not")+  , ("$","dollar")+  , (".","dot")+  , ("\x22c5","dot.op")+  , ("\xb7","dot.c")+  , ("\x2299","dot.circle")+  , ("\x2a00","dot.circle.big")+  , ("\x22a1","dot.square")+  , ("\x2026","dots.h")+  , ("\x22ef","dots.h.c")+  , ("\x22ee","dots.v")+  , ("\x22f1","dots.down")+  , ("\x22f0","dots.up")+  , ("\x2113","ell")+  , ("\x2b2d","ellipse.stroked.h")+  , ("\x2b2f","ellipse.stroked.v")+  , ("\x2b2c","ellipse.filled.h")+  , ("\x2b2e","ellipse.filled.v")+  , ("\x3b5","epsilon")+  , ("\x3f5","epsilon.alt")+  , ("=","eq")+  , ("\x225b","eq.star")+  , ("\x229c","eq.circle")+  , ("\x2255","eq.colon")+  , ("\x225d","eq.def")+  , ("\x225c","eq.delta")+  , ("\x225a","eq.equi")+  , ("\x2259","eq.est")+  , ("\x22dd","eq.gt")+  , ("\x22dc","eq.lt")+  , ("\x225e","eq.m")+  , ("\x2260","eq.not")+  , ("\x22de","eq.prec")+  , ("\x225f","eq.quest")+  , ("\xfe66","eq.small")+  , ("\x22df","eq.succ")+  , ("\x3b7","eta")+  , ("\x20ac","euro")+  , ("!","excl")+  , ("\x203c","excl.double")+  , ("\xa1","excl.inv")+  , ("\x2049","excl.quest")+  , ("\x2203","exists")+  , ("\x2204","exists.not")+  , ("\x29d8","fence.l")+  , ("\x29da","fence.l.double")+  , ("\x29d9","fence.r")+  , ("\x29db","fence.r.double")+  , ("\x2999","fence.dotted")+  , ("\x2766","floral")+  , ("\x2619","floral.l")+  , ("\x2767","floral.r")+  , ("\x2200","forall")+  , ("\x20a3","franc")+  , ("\x3b3","gamma")+  , ("\x5d2","gimel")+  , ("`","grave")+  , (">","gt")+  , ("\x29c1","gt.circle")+  , ("\x22d7","gt.dot")+  , ("\x226b","gt.double")+  , ("\x2265","gt.eq")+  , ("\x22db","gt.eq.lt")+  , ("\x2271","gt.eq.not")+  , ("\x2267","gt.eqq")+  , ("\x2277","gt.lt")+  , ("\x2279","gt.lt.not")+  , ("\x2269","gt.neqq")+  , ("\x226f","gt.not")+  , ("\x22e7","gt.ntilde")+  , ("\xfe65","gt.small")+  , ("\x2273","gt.tilde")+  , ("\x2275","gt.tilde.not")+  , ("\x22d9","gt.triple")+  , ("\x2af8","gt.triple.nested")+  , ("\x21c0","harpoon.rt")+  , ("\x295b","harpoon.rt.bar")+  , ("\x2953","harpoon.rt.stop")+  , ("\x21c1","harpoon.rb")+  , ("\x295f","harpoon.rb.bar")+  , ("\x2957","harpoon.rb.stop")+  , ("\x21bc","harpoon.lt")+  , ("\x295a","harpoon.lt.bar")+  , ("\x2952","harpoon.lt.stop")+  , ("\x21bd","harpoon.lb")+  , ("\x295e","harpoon.lb.bar")+  , ("\x2956","harpoon.lb.stop")+  , ("\x21bf","harpoon.tl")+  , ("\x2960","harpoon.tl.bar")+  , ("\x2958","harpoon.tl.stop")+  , ("\x21be","harpoon.tr")+  , ("\x295c","harpoon.tr.bar")+  , ("\x2954","harpoon.tr.stop")+  , ("\x21c3","harpoon.bl")+  , ("\x2961","harpoon.bl.bar")+  , ("\x2959","harpoon.bl.stop")+  , ("\x21c2","harpoon.br")+  , ("\x295d","harpoon.br.bar")+  , ("\x2955","harpoon.br.stop")+  , ("\x294e","harpoon.lt.rt")+  , ("\x2950","harpoon.lb.rb")+  , ("\x294b","harpoon.lb.rt")+  , ("\x294a","harpoon.lt.rb")+  , ("\x2951","harpoon.tl.bl")+  , ("\x294f","harpoon.tr.br")+  , ("\x294d","harpoon.tl.br")+  , ("\x294c","harpoon.tr.bl")+  , ("\x2964","harpoons.rtrb")+  , ("\x2965","harpoons.blbr")+  , ("\x296f","harpoons.bltr")+  , ("\x2967","harpoons.lbrb")+  , ("\x2962","harpoons.ltlb")+  , ("\x21cb","harpoons.ltrb")+  , ("\x2966","harpoons.ltrt")+  , ("\x2969","harpoons.rblb")+  , ("\x21cc","harpoons.rtlb")+  , ("\x2968","harpoons.rtlt")+  , ("\x296e","harpoons.tlbr")+  , ("\x2963","harpoons.tltr")+  , ("#","hash")+  , ("^","hat")+  , ("\x2b21","hexa.stroked")+  , ("\x2b22","hexa.filled")+  , ("\x2010","hyph")+  , ("-","hyph.minus")+  , ("\x2011","hyph.nobreak")+  , ("\x2027","hyph.point")+  , ("\173","hyph.soft")+  , ("\x2261","ident")+  , ("\x2262","ident.not")+  , ("\x2263","ident.strict")+  , ("\x2208","in")+  , ("\x2209","in.not")+  , ("\x220b","in.rev")+  , ("\x220c","in.rev.not")+  , ("\x220d","in.rev.small")+  , ("\x220a","in.small")+  , ("\x221e","infinity")+  , ("\x222b","integral")+  , ("\x2a17","integral.arrow.hook")+  , ("\x2a11","integral.ccw")+  , ("\x222e","integral.cont")+  , ("\x2233","integral.cont.ccw")+  , ("\x2232","integral.cont.cw")+  , ("\x2231","integral.cw")+  , ("\x222c","integral.double")+  , ("\x2a0c","integral.quad")+  , ("\x2a19","integral.sect")+  , ("\x2a16","integral.sq")+  , ("\x222f","integral.surf")+  , ("\x2a18","integral.times")+  , ("\x222d","integral.triple")+  , ("\x2a1a","integral.union")+  , ("\x2230","integral.vol")+  , ("\x203d","interrobang")+  , ("\x3b9","iota")+  , ("\x2a1d","join")+  , ("\x27d6","join.r")+  , ("\x27d5","join.l")+  , ("\x27d7","join.l.r")+  , ("\x3d7","kai")+  , ("\x3ba","kappa")+  , ("\x3f0","kappa.alt")+  , ("\x212a","kelvin")+  , ("\x3bb","lambda")+  , ("\x20ba","lira")+  , ("\x25ca","lozenge.stroked")+  , ("\x2b2b","lozenge.stroked.small")+  , ("\x2b28","lozenge.stroked.medium")+  , ("\x29eb","lozenge.filled")+  , ("\x2b2a","lozenge.filled.small")+  , ("\x2b27","lozenge.filled.medium")+  , ("<","lt")+  , ("\x29c0","lt.circle")+  , ("\x22d6","lt.dot")+  , ("\x226a","lt.double")+  , ("\x2264","lt.eq")+  , ("\x22da","lt.eq.gt")+  , ("\x2270","lt.eq.not")+  , ("\x2266","lt.eqq")+  , ("\x2276","lt.gt")+  , ("\x2278","lt.gt.not")+  , ("\x2268","lt.neqq")+  , ("\x226e","lt.not")+  , ("\x22e6","lt.ntilde")+  , ("\xfe64","lt.small")+  , ("\x2272","lt.tilde")+  , ("\x2274","lt.tilde.not")+  , ("\x22d8","lt.triple")+  , ("\x2af7","lt.triple.nested")+  , ("\xaf","macron")+  , ("\x2720","maltese")+  , ("\x2212","minus")+  , ("\x2296","minus.circle")+  , ("\x2238","minus.dot")+  , ("\x2213","minus.plus")+  , ("\x229f","minus.square")+  , ("\x2242","minus.tilde")+  , ("\x2a3a","minus.triangle")+  , ("\x22a7","models")+  , ("\x3bc","mu")+  , ("\x22b8","multimap")+  , ("\x2207","nabla")+  , ("\xac","not")+  , ("\x1f39c","notes.up")+  , ("\x1f39d","notes.down")+  , ("\x2205","nothing")+  , ("\x29b0","nothing.rev")+  , ("\x3bd","nu")+  , ("\x2126","ohm")+  , ("\x2127","ohm.inv")+  , ("\x3c9","omega")+  , ("\x3bf","omicron")+  , ("\x221e","oo")+  , ("\x2228","or")+  , ("\x22c1","or.big")+  , ("\x22ce","or.curly")+  , ("\x27c7","or.dot")+  , ("\x2a54","or.double")+  , ("\x2225","parallel")+  , ("\x29b7","parallel.circle")+  , ("\x2226","parallel.not")+  , ("(","paren.l")+  , (")","paren.r")+  , ("\x23dc","paren.t")+  , ("\x23dd","paren.b")+  , ("\x2b20","penta.stroked")+  , ("\x2b1f","penta.filled")+  , ("%","percent")+  , ("\x2030","permille")+  , ("\x27c2","perp")+  , ("\x29b9","perp.circle")+  , ("\x20b1","peso")+  , ("\x3c6","phi")+  , ("\x3d5","phi.alt")+  , ("\x3c0","pi")+  , ("\x3d6","pi.alt")+  , ("\xb6","pilcrow")+  , ("\x204b","pilcrow.rev")+  , ("\x210e","planck")+  , ("\x210f","planck.reduce")+  , ("+","plus")+  , ("\x2295","plus.circle")+  , ("\x27f4","plus.circle.arrow")+  , ("\x2a01","plus.circle.big")+  , ("\x2214","plus.dot")+  , ("\xb1","plus.minus")+  , ("\xfe62","plus.small")+  , ("\x229e","plus.square")+  , ("\x2a39","plus.triangle")+  , ("\xa3","pound")+  , ("\x227a","prec")+  , ("\x2ab7","prec.approx")+  , ("\x2abb","prec.double")+  , ("\x227c","prec.eq")+  , ("\x22e0","prec.eq.not")+  , ("\x2ab3","prec.eqq")+  , ("\x2ab9","prec.napprox")+  , ("\x2ab5","prec.neqq")+  , ("\x2280","prec.not")+  , ("\x22e8","prec.ntilde")+  , ("\x227e","prec.tilde")+  , ("\x2032","prime")+  , ("\x2035","prime.rev")+  , ("\x2033","prime.double")+  , ("\x2036","prime.double.rev")+  , ("\x2034","prime.triple")+  , ("\x2037","prime.triple.rev")+  , ("\x2057","prime.quad")+  , ("\x220f","product")+  , ("\x2210","product.co")+  , ("\x221d","prop")+  , ("\x3c8","psi")+  , ("\x220e","qed")+  , ("?","quest")+  , ("\x2047","quest.double")+  , ("\x2048","quest.excl")+  , ("\xbf","quest.inv")+  , ("\"","quote.double")+  , ("'","quote.single")+  , ("\x201c","quote.l.double")+  , ("\x2018","quote.l.single")+  , ("\x201d","quote.r.double")+  , ("\x2019","quote.r.single")+  , ("\xab","quote.angle.l.double")+  , ("\x2039","quote.angle.l.single")+  , ("\xbb","quote.angle.r.double")+  , ("\x203a","quote.angle.r.single")+  , ("\x201f","quote.high.double")+  , ("\x201b","quote.high.single")+  , ("\x201e","quote.low.double")+  , ("\x201a","quote.low.single")+  , ("\x2236","ratio")+  , ("\x25ad","rect.stroked.h")+  , ("\x25af","rect.stroked.v")+  , ("\x25ac","rect.filled.h")+  , ("\x25ae","rect.filled.v")+  , ("\x203b","refmark")+  , ("\x3c1","rho")+  , ("\x3f1","rho.alt")+  , ("\x20bd","ruble")+  , ("\x20b9","rupee")+  , ("\x2229","sect")+  , ("\x2a44","sect.and")+  , ("\x22c2","sect.big")+  , ("\x2a40","sect.dot")+  , ("\x22d2","sect.double")+  , ("\x2293","sect.sq")+  , ("\x2a05","sect.sq.big")+  , ("\x2a4e","sect.sq.double")+  , ("\xa7","section")+  , (";","semi")+  , ("\x204f","semi.rev")+  , ("\x2120","servicemark")+  , ("\x5e9","shin")+  , ("\x3c3","sigma")+  , ("/","slash")+  , ("\x2afd","slash.double")+  , ("\x2afb","slash.triple")+  , ("\x2a33","smash")+  , ("s","space")+  , ("\xa0","space.nobreak")+  , ("\x2002","space.en")+  , ("\x2003","space.quad")+  , ("\x2004","space.third")+  , ("\x2005","space.quarter")+  , ("\x2006","space.sixth")+  , ("\x205f","space.med")+  , ("\x2007","space.fig")+  , ("\x2008","space.punct")+  , ("\x2009","space.thin")+  , ("\x200a","space.hair")+  , ("\x25a1","square.stroked")+  , ("\x25ab","square.stroked.tiny")+  , ("\x25fd","square.stroked.small")+  , ("\x25fb","square.stroked.medium")+  , ("\x2b1c","square.stroked.big")+  , ("\x2b1a","square.stroked.dotted")+  , ("\x25a2","square.stroked.rounded")+  , ("\x25a0","square.filled")+  , ("\x25aa","square.filled.tiny")+  , ("\x25fe","square.filled.small")+  , ("\x25fc","square.filled.medium")+  , ("\x2b1b","square.filled.big")+  , ("\x22c6","star.op")+  , ("\x2605","star.stroked")+  , ("\x2605","star.filled")+  , ("\x2282","subset")+  , ("\x2abd","subset.dot")+  , ("\x22d0","subset.double")+  , ("\x2286","subset.eq")+  , ("\x2288","subset.eq.not")+  , ("\x2291","subset.eq.sq")+  , ("\x22e2","subset.eq.sq.not")+  , ("\x228a","subset.neq")+  , ("\x2284","subset.not")+  , ("\x228f","subset.sq")+  , ("\x22e4","subset.sq.neq")+  , ("\x227b","succ")+  , ("\x2ab8","succ.approx")+  , ("\x2abc","succ.double")+  , ("\x227d","succ.eq")+  , ("\x22e1","succ.eq.not")+  , ("\x2ab4","succ.eqq")+  , ("\x2aba","succ.napprox")+  , ("\x2ab6","succ.neqq")+  , ("\x2281","succ.not")+  , ("\x22e9","succ.ntilde")+  , ("\x227f","succ.tilde")+  , ("\x2663","suit.club")+  , ("\x2666","suit.diamond")+  , ("\x2665","suit.heart")+  , ("\x2660","suit.spade")+  , ("\x2211","sum")+  , ("\x2a0b","sum.integral")+  , ("\x2283","supset")+  , ("\x2abe","supset.dot")+  , ("\x22d1","supset.double")+  , ("\x2287","supset.eq")+  , ("\x2289","supset.eq.not")+  , ("\x2292","supset.eq.sq")+  , ("\x22e3","supset.eq.sq.not")+  , ("\x228b","supset.neq")+  , ("\x2285","supset.not")+  , ("\x2290","supset.sq")+  , ("\x22e5","supset.sq.neq")+  , ("\x22a2","tack.r")+  , ("\x27dd","tack.r.long")+  , ("\x22a3","tack.l")+  , ("\x27de","tack.l.long")+  , ("\x2ade","tack.l.short")+  , ("\x22a5","tack.t")+  , ("\x27d8","tack.t.big")+  , ("\x2aeb","tack.t.double")+  , ("\x2ae0","tack.t.short")+  , ("\x22a4","tack.b")+  , ("\x27d9","tack.b.big")+  , ("\x2aea","tack.b.double")+  , ("\x2adf","tack.b.short")+  , ("\x27db","tack.l.r")+  , ("\x3c4","tau")+  , ("\x2234","therefore")+  , ("\x3b8","theta")+  , ("\x3d1","theta.alt")+  , ("~","tilde")+  , ("\x223c","tilde.op")+  , ("\x2243","tilde.eq")+  , ("\x2244","tilde.eq.not")+  , ("\x22cd","tilde.eq.rev")+  , ("\x2245","tilde.eqq")+  , ("\x2247","tilde.eqq.not")+  , ("\x2246","tilde.neqq")+  , ("\x2241","tilde.not")+  , ("\x223d","tilde.rev")+  , ("\x224c","tilde.rev.eqq")+  , ("\x224b","tilde.triple")+  , ("\xd7","times")+  , ("\x2a09","times.big")+  , ("\x2297","times.circle")+  , ("\x2a02","times.circle.big")+  , ("\x22c7","times.div")+  , ("\x22cb","times.l")+  , ("\x22cc","times.r")+  , ("\x22a0","times.square")+  , ("\x2a3b","times.triangle")+  , ("\x22a4","top")+  , ("\x25b7","triangle.stroked.r")+  , ("\x25c1","triangle.stroked.l")+  , ("\x25b3","triangle.stroked.t")+  , ("\x25bd","triangle.stroked.b")+  , ("\x25fa","triangle.stroked.bl")+  , ("\x25ff","triangle.stroked.br")+  , ("\x25f8","triangle.stroked.tl")+  , ("\x25f9","triangle.stroked.tr")+  , ("\x25b9","triangle.stroked.small.r")+  , ("\x25bf","triangle.stroked.small.b")+  , ("\x25c3","triangle.stroked.small.l")+  , ("\x25b5","triangle.stroked.small.t")+  , ("\x1f6c6","triangle.stroked.rounded")+  , ("\x27c1","triangle.stroked.nested")+  , ("\x25ec","triangle.stroked.dot")+  , ("\x25b6","triangle.filled.r")+  , ("\x25c0","triangle.filled.l")+  , ("\x25b2","triangle.filled.t")+  , ("\x25bc","triangle.filled.b")+  , ("\x25e3","triangle.filled.bl")+  , ("\x25e2","triangle.filled.br")+  , ("\x25e4","triangle.filled.tl")+  , ("\x25e5","triangle.filled.tr")+  , ("\x25b8","triangle.filled.small.r")+  , ("\x25be","triangle.filled.small.b")+  , ("\x25c2","triangle.filled.small.l")+  , ("\x25b4","triangle.filled.small.t")+  , ("\x3014","turtle.l")+  , ("\x3015","turtle.r")+  , ("\x23e0","turtle.t")+  , ("\x23e1","turtle.b")+  , ("\x222a","union")+  , ("\x228c","union.arrow")+  , ("\x22c3","union.big")+  , ("\x228d","union.dot")+  , ("\x2a03","union.dot.big")+  , ("\x22d3","union.double")+  , ("\x2a41","union.minus")+  , ("\x2a45","union.or")+  , ("\x228e","union.plus")+  , ("\x2a04","union.plus.big")+  , ("\x2294","union.sq")+  , ("\x2a06","union.sq.big")+  , ("\x2a4f","union.sq.double")+  , ("\x3c5","upsilon")+  , ("\x2216","without")+  , ("\8288","wj")+  , ("\x20a9","won")+  , ("\x2240","wreath")+  , ("\x3be","xi")+  , ("\xa5","yen")+  , ("\x3b6","zeta")+  , ("\x200d","zwj")+  , ("\x200c","zwnj")+  , ("\x200b","zws") ]
test/test-texmath.hs view
@@ -37,6 +37,7 @@   mmlWriterTests <- getFiles "test/writer/mml"   ommlWriterTests <- getFiles "test/writer/omml"   eqnWriterTests <- getFiles "test/writer/eqn"+  typstWriterTests <- getFiles "test/writer/typst"   regressionTests <- getFiles "test/regression"   roundtripTests <- getFiles "test/roundtrip"   let ings = includingOptions [Option (Proxy :: Proxy RoundTrip)] :@@ -62,6 +63,7 @@              , testGroup "mml" $ map toGoldenTest mmlWriterTests              , testGroup "omml" $ map toGoldenTest ommlWriterTests              , testGroup "eqn" $ map toGoldenTest eqnWriterTests+             , testGroup "typst" $ map toGoldenTest typstWriterTests              ],              testGroup "regression" $ map toGoldenTest regressionTests            ]@@ -145,5 +147,6 @@           , ("tex", writeTeX)           , ("omml", T.pack . ppTopElement . writeOMML DisplayBlock)           , ("eqn", writeEqn DisplayBlock)+          , ("typst", writeTypst DisplayBlock)           , ("native", T.pack . ppShow)           ]
+ test/writer/typst/01.test view
@@ -0,0 +1,22 @@+<<< native+[ EIdentifier "x"+, ESymbol Rel "="+, EFraction+    NormalFrac+    (EGrouped+       [ ESymbol Op "\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" ])+]+>>> typst+x eq frac(minus b plus.minus sqrt(b^2 minus 4 a c), 2 a)
+ test/writer/typst/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" ]))+    ]+]+>>> typst+2 eq lr((frac(lr((3 minus x)) times 2, 3 minus x)))
+ test/writer/typst/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"+]+>>> typst+a x^2 plus b x plus c eq 0
+ test/writer/typst/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")+]+>>> typst+S_upright("new") eq S_upright("old") minus lr((5 minus T))^2 / 2
+ test/writer/typst/05.test view
@@ -0,0 +1,31 @@+<<< 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"+, EDelimited "(" ")" [ Right (EIdentifier "y") ]+, 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"+, EDelimited "(" ")" [ Right (EIdentifier "y") ]+, EDelimited+    "("+    ")"+    [ Right (EIdentifier "x")+    , Right (ESymbol Bin "\8722")+    , Right (EIdentifier "y")+    ]+, ESpace (1 % 6)+, EIdentifier "d"+, EIdentifier "y"+]+>>> typst+integral_a^x #h(-1em) #h(-1em) #h(-1em) integral_a^space f lr((y)) thin d y thin d space eq integral_a^x f lr((y)) lr((x minus y)) thin d y
+ test/writer/typst/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"))+           ]+       ])+]+>>> typst+sum_(m eq 1)^oo sum_(n eq 1)^oo frac(m^2 thin n, 3^m lr((m thin 3^n plus n thin 3^m)))
+ test/writer/typst/07.test view
@@ -0,0 +1,23 @@+<<< native+[ EIdentifier "u"+, ESymbol Ord "\8243"+, ESymbol Bin "+"+, EIdentifier "p"+, EDelimited "(" ")" [ Right (EIdentifier "x") ]+, EIdentifier "u"+, ESymbol Ord "\8242"+, ESymbol Bin "+"+, EIdentifier "q"+, EDelimited "(" ")" [ Right (EIdentifier "x") ]+, EIdentifier "u"+, ESymbol Rel "="+, EIdentifier "f"+, EDelimited "(" ")" [ Right (EIdentifier "x") ]+, ESymbol Pun ","+, ESpace (1 % 1)+, EIdentifier "x"+, ESymbol Rel ">"+, EIdentifier "a"+]+>>> typst+u prime.double plus p lr((x)) u prime plus q lr((x)) u eq f lr((x)) comma quad x gt a
+ test/writer/typst/08.test view
@@ -0,0 +1,33 @@+<<< native+[ EDelimited+    "|"+    "|"+    [ Right (EOver False (EIdentifier "z") (ESymbol Accent "\8254")) ]+, ESymbol Rel "="+, EDelimited "|" "|" [ Right (EIdentifier "z") ]+, ESymbol Pun ","+, EDelimited+    "|"+    "|"+    [ Right+        (ESuper+           (EDelimited+              "("+              ")"+              [ Right (EOver False (EIdentifier "z") (ESymbol Accent "\8254")) ])+           (EIdentifier "n"))+    ]+, ESymbol Rel "="+, ESuper+    (EDelimited "|" "|" [ Right (EIdentifier "z") ]) (EIdentifier "n")+, ESymbol Pun ","+, EMathOperator "arg"+, EDelimited+    "(" ")" [ Right (ESuper (EIdentifier "z") (EIdentifier "n")) ]+, ESymbol Rel "="+, EIdentifier "n"+, EMathOperator "arg"+, EDelimited "(" ")" [ Right (EIdentifier "z") ]+]+>>> typst+lr(|z^‾|) eq lr(|z|) comma lr(|lr((z^‾))^n|) eq lr(|z|)^n comma arg lr((z^n)) eq n arg lr((z))
+ test/writer/typst/09.test view
@@ -0,0 +1,18 @@+<<< native+[ EUnder+    True+    (EMathOperator "lim")+    (EGrouped+       [ EIdentifier "z"+       , ESymbol Rel "\8594"+       , ESub (EIdentifier "z") (ENumber "0")+       ])+, EIdentifier "f"+, EDelimited "(" ")" [ Right (EIdentifier "z") ]+, ESymbol Rel "="+, EIdentifier "f"+, EDelimited+    "(" ")" [ Right (ESub (EIdentifier "z") (ENumber "0")) ]+]+>>> typst+lim_(z arrow.r z_0) f lr((z)) eq f lr((z_0))
+ test/writer/typst/10.test view
@@ -0,0 +1,45 @@+<<< native+[ ESub (EIdentifier "\981") (EIdentifier "n")+, EDelimited "(" ")" [ Right (EIdentifier "\954") ]+, 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"+       , EDelimited+           "(" ")" [ Right (EIdentifier "\954") , Right (EIdentifier "R") ]+       ])+    (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")+              , EDelimited "(" ")" [ Right (EIdentifier "R") ]+              ])+           (EGrouped [ ESymbol Ord "\8706" , EIdentifier "R" ]))+    ]+, ESpace (1 % 6)+, EIdentifier "d"+, EIdentifier "R"+]+>>> typst+phi.alt_n lr((kappa)) eq frac(1, 4 pi^2 kappa^2) integral_0^oo frac(sin lr((kappa R)), kappa R) frac(diff, diff R) lr([R^2 frac(diff D_n lr((R)), diff R)]) thin d R
+ test/writer/typst/11.test view
@@ -0,0 +1,26 @@+<<< native+[ ESub (EIdentifier "\981") (EIdentifier "n")+, EDelimited "(" ")" [ Right (EIdentifier "\954") ]+, ESymbol Rel "="+, ENumber "0.033"+, ESubsup (EIdentifier "C") (EIdentifier "n") (ENumber "2")+, ESuper+    (EIdentifier "\954")+    (EGrouped+       [ ESymbol Op "\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"))+]+>>> typst+phi.alt_n lr((kappa)) eq 0.033 C_n^2 kappa^(minus 11 slash 3) comma quad 1 / L_0 lt.double kappa lt.double 1 / l_0
+ test/writer/typst/12.test view
@@ -0,0 +1,33 @@+<<< native+[ EIdentifier "f"+, EDelimited "(" ")" [ Right (EIdentifier "x") ]+, ESymbol Rel "="+, EDelimited+    "{"+    ""+    [ Right+        (EArray+           [ AlignLeft , AlignLeft ]+           [ [ [ ENumber "1" ]+             , [ ESymbol Bin "\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" ]+             ]+           ])+    ]+]+>>> typst+f lr((x)) eq cases(delim: "{", 1 & minus 1 lt.eq x lt 0, 1 / 2 & x eq 0, 1 minus x^2 & upright("otherwise"))
+ test/writer/typst/13.test view
@@ -0,0 +1,57 @@+<<< native+[ ESub (EGrouped []) (EIdentifier "p")+, ESub (EIdentifier "F") (EIdentifier "q")+, EDelimited+    "("+    ")"+    [ Right (ESub (EIdentifier "a") (ENumber "1"))+    , Right (ESymbol Pun ",")+    , Right (ESymbol Ord "\8230")+    , Right (ESymbol Pun ",")+    , Right (ESub (EIdentifier "a") (EIdentifier "p"))+    , Right (ESymbol Pun ";")+    , Right (ESub (EIdentifier "c") (ENumber "1"))+    , Right (ESymbol Pun ",")+    , Right (ESymbol Ord "\8230")+    , Right (ESymbol Pun ",")+    , Right (ESub (EIdentifier "c") (EIdentifier "q"))+    , Right (ESymbol Pun ";")+    , Right (EIdentifier "z")+    ]+, ESymbol Rel "="+, EUnderover+    True+    (ESymbol Op "\8721")+    (EGrouped [ EIdentifier "n" , ESymbol Rel "=" , ENumber "0" ])+    (ESymbol Ord "\8734")+, EFraction+    NormalFrac+    (EGrouped+       [ ESub+           (EDelimited+              "(" ")" [ Right (ESub (EIdentifier "a") (ENumber "1")) ])+           (EIdentifier "n")+       , ESymbol Ord "\8943"+       , ESub+           (EDelimited+              "(" ")" [ Right (ESub (EIdentifier "a") (EIdentifier "p")) ])+           (EIdentifier "n")+       ])+    (EGrouped+       [ ESub+           (EDelimited+              "(" ")" [ Right (ESub (EIdentifier "c") (ENumber "1")) ])+           (EIdentifier "n")+       , ESymbol Ord "\8943"+       , ESub+           (EDelimited+              "(" ")" [ Right (ESub (EIdentifier "c") (EIdentifier "q")) ])+           (EIdentifier "n")+       ])+, EFraction+    NormalFrac+    (ESuper (EIdentifier "z") (EIdentifier "n"))+    (EGrouped [ EIdentifier "n" , ESymbol Ord "!" ])+]+>>> typst+()_p F_q lr((a_1 comma dots.h comma a_p semi c_1 comma dots.h comma c_q semi z)) eq sum_(n eq 0)^oo frac(lr((a_1))_n dots.h.c lr((a_p))_n, lr((c_1))_n dots.h.c lr((c_q))_n) frac(z^n, n excl)
+ test/writer/typst/14.test view
@@ -0,0 +1,7 @@+<<< native+[ EFraction NormalFrac (EIdentifier "a") (EIdentifier "b")+, ESpace (2 % 9)+, EFraction InlineFrac (EIdentifier "a") (EIdentifier "b")+]+>>> typst+a / b med a / b
+ test/writer/typst/15.test view
@@ -0,0 +1,4 @@+<<< native+[ EFraction NormalFrac (EIdentifier "a") (ENumber "2") ]+>>> typst+a / 2
+ test/writer/typst/16.test view
@@ -0,0 +1,4 @@+<<< native+[ ENumber "3" , ESymbol Bin "\215" , ENumber "4" ]+>>> typst+3 times 4
+ test/writer/typst/17.test view
@@ -0,0 +1,11 @@+<<< native+[ EIdentifier "x"+, ESymbol Bin "*"+, ENumber "4"+, ESymbol Rel "="+, ENumber "4"+, ESymbol Bin "*"+, EIdentifier "x"+]+>>> typst+x ast 4 eq 4 ast x
+ test/writer/typst/18.test view
@@ -0,0 +1,4 @@+<<< native+[ ENumber "1.3" , ESymbol Bin "\215" , ENumber ".2" ]+>>> typst+1.3 times .2
+ test/writer/typst/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" ] ]+           ])+    ]+]+>>> typst+mat(delim: "[", frac(diff x_1, diff y_1), frac(diff x_2, diff y_1); med; frac(diff x_1, diff y_2), frac(diff x_2, diff y_2)) mat(delim: "(", 1, 2; 3, 4) mat(delim: "{", 1, 2; 3, 4) mat(delim: "||", 1, 2; 3, 4) mat(delim: "||", 1, 2; 3, 4)
+ test/writer/typst/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" ]+]+>>> typst+cal(A) cal(B) cal(C) cal(D) cal(E) cal(F) cal(G) cal(H) cal(I) cal(J) cal(K) cal(L) cal(M) cal(N) cal(O) cal(P) cal(Q) cal(R) cal(S) cal(T) cal(U) cal(V) cal(W) cal(X) cal(Y) cal(Z) cal(a) cal(b) cal(c) cal(d) cal(e) cal(f) cal(g) cal(h) cal(i) cal(j) cal(k) cal(l) cal(m) cal(n) cal(o) cal(p) cal(q) cal(r) cal(space) cal(t) cal(u) cal(v) cal(w) cal(x) cal(y) cal(z) bb(A) bb(B) bb(C) bb(D) bb(E) bb(F) bb(G) bb(H) bb(I) bb(J) bb(K) bb(L) bb(M) bb(N) bb(O) bb(P) bb(Q) bb(R) bb(S) bb(T) bb(U) bb(V) bb(W) bb(X) bb(Y) bb(Z) bb(a) bb(b) bb(c) bb(d) bb(e) bb(f) bb(g) bb(h) bb(i) bb(j) bb(k) bb(l) bb(m) bb(n) bb(o) bb(p) bb(q) bb(r) bb(space) bb(t) bb(u) bb(v) bb(w) bb(x) bb(y) bb(z) bb(0) bb(1) bb(2) bb(3) bb(4) bb(5) bb(6) bb(7) bb(8) bb(9) bb(0)
+ test/writer/typst/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")+]+>>> typst+e_1 eq b^2 plus c^22
+ test/writer/typst/22.test view
@@ -0,0 +1,277 @@+<<< 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+            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"+            ]+        ]+      ]+    ]+]+>>> typst+mono("textrm") & upright("ABCabc")\+mono("mathrm") & upright(A B C a b c)\+mono("mathup") & upright(A B C a b c)\+mono("text") & upright("ABCabc")\+mono("mbox") & upright("ABCabc")\+mono("mathbf") & bold(A B C a b c)\+mono("mathbfup") & bold(A B C a b c)\+mono("textbf") & bold("ABCabc")\+mono("mathit") & italic(A B C a b c)\+mono("textit") & italic("ABCabc")\+mono("mathtt") & mono(A B C a b c)\+mono("texttt") & mono("ABCabc")\+mono("mathsf") & sans(A B C a b c)\+mono("mathsfup") & sans(A B C a b c)\+mono("mathbb") & bb(A B C a b c)\+mono("mathcal") & cal(A B C a b c)\+mono("mathscr") & cal(A B C a b c)\+mono("mathfrak") & frak(A B C a b c)\+mono("mathbfit") & bold(italic(A B C a b c))\+mono("mathbfsfup") & bold(sans(A B C a b c))\+mono("mathbfsfit") & bold(italic(sans(A B C a b c)))\+mono("mathbfscr") & bold(cal(A B C a b c))\+mono("mathbffrak") & bold(frak(A B C a b c))\+mono("mathbfcal") & bold(cal(A B C a b c))\+mono("mathsfit") & italic(sans(A B C a b c))
+ test/writer/typst/23.test view
@@ -0,0 +1,4 @@+<<< native+[ ENumber "1" , ESymbol Ord "." ]+>>> typst+1 dot
+ test/writer/typst/abs1.test view
@@ -0,0 +1,4 @@+<<< native+[ EDelimited "|" "|" [ Right (EIdentifier "x") ] ]+>>> typst+lr(|x|)
+ test/writer/typst/axiom_of_power_set.test view
@@ -0,0 +1,36 @@+<<< 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)+, EDelimited+    "["+    "]"+    [ Right (EIdentifier "B")+    , Right (ESymbol Rel "\8712")+    , Right (EIdentifier "P")+    , Right (ESymbol Rel "\8660")+    , Right (ESymbol Op "\8704")+    , Right (EIdentifier "C")+    , Right (ESpace (1 % 6))+    , Right+        (EDelimited+           "("+           ")"+           [ Right (EIdentifier "C")+           , Right (ESymbol Rel "\8712")+           , Right (EIdentifier "B")+           , Right (ESymbol Rel "\8658")+           , Right (EIdentifier "C")+           , Right (ESymbol Rel "\8712")+           , Right (EIdentifier "A")+           ])+    ]+]+>>> typst+forall A thin exists P thin forall B thin lr([B in P arrow.l.r.double forall C thin lr((C in B arrow.r.double C in A))])
+ test/writer/typst/binomial_coefficient.test view
@@ -0,0 +1,43 @@+<<< native+[ EStyled TextBold [ EIdentifier "C" ]+, EDelimited+    "("+    ")"+    [ Right (EIdentifier "n")+    , Right (ESymbol Pun ",")+    , Right (EIdentifier "k")+    ]+, ESymbol Rel "="+, ESubsup+    (EStyled TextBold [ EIdentifier "C" ])+    (EIdentifier "k")+    (EIdentifier "n")+, ESymbol Rel "="+, ESub (EGrouped []) (EIdentifier "n")+, ESub (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)+       , EDelimited+           "("+           ")"+           [ Right (EIdentifier "n")+           , Right (ESymbol Bin "\8722")+           , Right (EIdentifier "k")+           ]+       , ESymbol Ord "!"+       ])+]+>>> typst+bold(C) lr((n comma k)) eq bold(C)_k^n eq ()_n bold(C)_k eq lr((n / k)) eq frac(n excl, k excl thin lr((n minus k)) excl)
+ test/writer/typst/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")+       ])+]+>>> typst+#box([x^2 plus y^2 plus z^2])
+ test/writer/typst/chain2.test view
@@ -0,0 +1,52 @@+<<< native+[ ESubsup (ESymbol Op "\8747") (ENumber "0") (ENumber "1")+, EIdentifier "f"+, EDelimited "(" ")" [ Right (EIdentifier "x") ]+, ESpace (1 % 9)+, ESymbol Ord "\8518"+, EIdentifier "x"+, ESymbol Rel "="+, EUnderover+    False+    (ESymbol Op "\8721")+    (EGrouped [ EIdentifier "i" , ESymbol Rel "=" , ENumber "0" ])+    (EIdentifier "\8734")+, ESub (EIdentifier "x") (EIdentifier "i")+, ESymbol Rel "="+, EUnderover+    False+    (ESymbol Op "\8719")+    (EGrouped [ EIdentifier "i" , ESymbol Rel "=" , ENumber "0" ])+    (EIdentifier "\8734")+, ESub (EIdentifier "x") (EIdentifier "i")+, ESymbol Rel "="+, EUnderover+    False+    (ESymbol Op "\8720")+    (EGrouped [ EIdentifier "i" , ESymbol Rel "=" , ENumber "0" ])+    (EIdentifier "\8734")+, ESub (EIdentifier "x") (EIdentifier "i")+, ESymbol Rel "="+, ESubsup (ESymbol Op "\8750") (ENumber "0") (ENumber "1")+, EIdentifier "f"+, EDelimited "(" ")" [ Right (EIdentifier "x") ]+, ESpace (1 % 9)+, ESymbol Ord "\8518"+, EIdentifier "x"+, ESymbol Rel "="+, ESubsup (ESymbol Op "\8748") (ENumber "0") (ENumber "1")+, EIdentifier "f"+, EDelimited "(" ")" [ Right (EIdentifier "x") ]+, ESpace (1 % 9)+, ESymbol Ord "\8518"+, EIdentifier "x"+, ESymbol Rel "="+, ESubsup (ESymbol Op "\8749") (ENumber "0") (ENumber "1")+, EIdentifier "f"+, EDelimited "(" ")" [ Right (EIdentifier "x") ]+, ESpace (1 % 9)+, ESymbol Ord "\8518"+, EIdentifier "x"+]+>>> typst+integral_0^1 f lr((x)) #h(0em) ⅆ x eq sum_(i eq 0)^oo x_i eq product_(i eq 0)^oo x_i eq product.co_(i eq 0)^oo x_i eq integral.cont_0^1 f lr((x)) #h(0em) ⅆ x eq integral.double_0^1 f lr((x)) #h(0em) ⅆ x eq integral.triple_0^1 f lr((x)) #h(0em) ⅆ x
+ test/writer/typst/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" ]))+              ]))+    ]+]+>>> typst+lr((a / lr({frac(b, c plus 2)})))
+ test/writer/typst/complex1.test view
@@ -0,0 +1,622 @@+<<< native+[ EArray+    [ AlignCenter , AlignCenter ]+    [ [ [ EText TextNormal "Bernoulli Trials" ]+      , [ EGrouped+            [ EGrouped+                [ EIdentifier "P"+                , ESymbol Open "("+                , EIdentifier "E"+                , ESymbol Close ")"+                ]+            , ESymbol Rel "="+            , EDelimited+                "("+                ")"+                [ Right (EFraction NormalFrac (EIdentifier "n") (EIdentifier "k"))+                ]+            , ESubsup (EIdentifier "p") (EGrouped []) (EIdentifier "k")+            , ESubsup+                (EGrouped+                   [ ESymbol Open "("+                   , ENumber "1"+                   , ESymbol Bin "-"+                   , EIdentifier "p"+                   , ESymbol Close ")"+                   ])+                (EGrouped [])+                (EGrouped [ EIdentifier "n" , ESymbol Bin "-" , EIdentifier "k" ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Cauchy-Schwarz Inequality" ]+      , [ EGrouped+            [ ESubsup+                (EDelimited+                   "("+                   ")"+                   [ Right+                       (EUnderover+                          False+                          (ESymbol Op "\8721")+                          (EGrouped [ EIdentifier "k" , ESymbol Rel "=" , ENumber "1" ])+                          (EIdentifier "n"))+                   , Right (ESubsup (EIdentifier "a") (EIdentifier "k") (EGrouped []))+                   , Right (ESubsup (EIdentifier "b") (EIdentifier "k") (EGrouped []))+                   ])+                (EGrouped [])+                (ENumber "2")+            , ESymbol Rel "\8804"+            , EDelimited+                "("+                ")"+                [ Right+                    (EUnderover+                       False+                       (ESymbol Op "\8721")+                       (EGrouped [ EIdentifier "k" , ESymbol Rel "=" , ENumber "1" ])+                       (EIdentifier "n"))+                , Right (ESubsup (EIdentifier "a") (EIdentifier "k") (ENumber "2"))+                ]+            , EDelimited+                "("+                ")"+                [ Right+                    (EUnderover+                       False+                       (ESymbol Op "\8721")+                       (EGrouped [ EIdentifier "k" , ESymbol Rel "=" , ENumber "1" ])+                       (EIdentifier "n"))+                , Right (ESubsup (EIdentifier "b") (EIdentifier "k") (ENumber "2"))+                ]+            ]+        ]+      ]+    , [ [ EText TextNormal "Cauchy Formula" ]+      , [ EGrouped+            [ EIdentifier "f"+            , ESymbol Open "("+            , EIdentifier "z"+            , ESymbol Close ")"+            , ESpace (1 % 6)+            , ESymbol Bin "\183"+            , ESubsup (EIdentifier "Ind") (EIdentifier "\947") (EGrouped [])+            , ESymbol Open "("+            , EIdentifier "z"+            , ESymbol Close ")"+            , ESymbol Rel "="+            , EFraction+                NormalFrac+                (ENumber "1")+                (EGrouped [ ENumber "2" , EIdentifier "\960" , EIdentifier "i" ])+            , EUnderover+                False (ESymbol Op "\8750") (EIdentifier "\947") (EGrouped [])+            , EFraction+                NormalFrac+                (EGrouped+                   [ EIdentifier "f"+                   , ESymbol Open "("+                   , EIdentifier "\958"+                   , ESymbol Close ")"+                   ])+                (EGrouped+                   [ EIdentifier "\958" , ESymbol Bin "-" , EIdentifier "z" ])+            , ESpace (1 % 6)+            , EIdentifier "d"+            , EIdentifier "\958"+            ]+        ]+      ]+    , [ [ EText TextNormal "Cross Product" ]+      , [ EGrouped+            [ ESubsup (EIdentifier "V") (ENumber "1") (EGrouped [])+            , ESymbol Bin "\215"+            , ESubsup (EIdentifier "V") (ENumber "2") (EGrouped [])+            , ESymbol Rel "="+            , EDelimited+                "|"+                "|"+                [ Right+                    (EArray+                       [ AlignCenter , AlignCenter , AlignCenter ]+                       [ [ [ EIdentifier "i" ]+                         , [ EIdentifier "j" ]+                         , [ EIdentifier "k" ]+                         ]+                       , [ [ EFraction+                               NormalFrac+                               (EGrouped [ ESymbol Ord "\8706" , EIdentifier "X" ])+                               (EGrouped [ ESymbol Ord "\8706" , EIdentifier "u" ])+                           ]+                         , [ EFraction+                               NormalFrac+                               (EGrouped [ ESymbol Ord "\8706" , EIdentifier "Y" ])+                               (EGrouped [ ESymbol Ord "\8706" , EIdentifier "u" ])+                           ]+                         , [ ENumber "0" ]+                         ]+                       , [ [ EFraction+                               NormalFrac+                               (EGrouped [ ESymbol Ord "\8706" , EIdentifier "X" ])+                               (EGrouped [ ESymbol Ord "\8706" , EIdentifier "v" ])+                           ]+                         , [ EFraction+                               NormalFrac+                               (EGrouped [ ESymbol Ord "\8706" , EIdentifier "Y" ])+                               (EGrouped [ ESymbol Ord "\8706" , EIdentifier "v" ])+                           ]+                         , [ ENumber "0" ]+                         ]+                       ])+                ]+            ]+        ]+      ]+    , [ [ EText TextNormal "Vandermonde Determinant" ]+      , [ EGrouped+            [ EDelimited+                "|"+                "|"+                [ Right+                    (EArray+                       [ AlignCenter , AlignCenter , AlignCenter , AlignCenter ]+                       [ [ [ ENumber "1" ]+                         , [ ENumber "1" ]+                         , [ ESymbol Ord "\8943" ]+                         , [ ENumber "1" ]+                         ]+                       , [ [ ESubsup (EIdentifier "v") (ENumber "1") (EGrouped []) ]+                         , [ ESubsup (EIdentifier "v") (ENumber "2") (EGrouped []) ]+                         , [ ESymbol Ord "\8943" ]+                         , [ ESubsup (EIdentifier "v") (EIdentifier "n") (EGrouped []) ]+                         ]+                       , [ [ ESubsup (EIdentifier "v") (ENumber "1") (ENumber "2") ]+                         , [ ESubsup (EIdentifier "v") (ENumber "2") (ENumber "2") ]+                         , [ ESymbol Ord "\8943" ]+                         , [ ESubsup (EIdentifier "v") (EIdentifier "n") (ENumber "2") ]+                         ]+                       , [ [ ESymbol Rel "\8942" ]+                         , [ ESymbol Rel "\8942" ]+                         , [ ESymbol Rel "\8945" ]+                         , [ ESymbol Rel "\8942" ]+                         ]+                       , [ [ ESubsup+                               (EIdentifier "v")+                               (ENumber "1")+                               (EGrouped [ EIdentifier "n" , ESymbol Bin "-" , ENumber "1" ])+                           ]+                         , [ ESubsup+                               (EIdentifier "v")+                               (ENumber "2")+                               (EGrouped [ EIdentifier "n" , ESymbol Bin "-" , ENumber "1" ])+                           ]+                         , [ ESymbol Ord "\8943" ]+                         , [ ESubsup+                               (EIdentifier "v")+                               (EIdentifier "n")+                               (EGrouped [ EIdentifier "n" , ESymbol Bin "-" , ENumber "1" ])+                           ]+                         ]+                       ])+                ]+            , ESymbol Rel "="+            , EUnderover+                False+                (ESymbol Op "\8719")+                (EGrouped+                   [ ENumber "1"+                   , ESymbol Rel "\8804"+                   , EIdentifier "i"+                   , ESymbol Rel "<"+                   , EIdentifier "j"+                   , ESymbol Rel "\8804"+                   , EIdentifier "n"+                   ])+                (EGrouped [])+            , ESymbol Open "("+            , ESubsup (EIdentifier "v") (EIdentifier "j") (EGrouped [])+            , ESymbol Bin "-"+            , ESubsup (EIdentifier "v") (EIdentifier "i") (EGrouped [])+            , ESymbol Close ")"+            ]+        ]+      ]+    , [ [ EText TextNormal "Lorenz Equations" ]+      , [ EArray+            [ AlignCenter , AlignCenter , AlignCenter ]+            [ [ [ EUnderover+                    False (EIdentifier "x") (EGrouped []) (ESymbol Accent "\729")+                ]+              , [ ESymbol Rel "=" ]+              , [ EGrouped+                    [ EIdentifier "\963"+                    , ESymbol Open "("+                    , EIdentifier "y"+                    , ESymbol Bin "-"+                    , EIdentifier "x"+                    , ESymbol Close ")"+                    ]+                ]+              ]+            , [ [ EUnderover+                    False (EIdentifier "y") (EGrouped []) (ESymbol Accent "\729")+                ]+              , [ ESymbol Rel "=" ]+              , [ EGrouped+                    [ EIdentifier "\961"+                    , EIdentifier "x"+                    , ESymbol Bin "-"+                    , EIdentifier "y"+                    , ESymbol Bin "-"+                    , EIdentifier "x"+                    , EIdentifier "z"+                    ]+                ]+              ]+            , [ [ EUnderover+                    False (EIdentifier "z") (EGrouped []) (ESymbol Accent "\729")+                ]+              , [ ESymbol Rel "=" ]+              , [ EGrouped+                    [ ESymbol Bin "-"+                    , EIdentifier "\946"+                    , EIdentifier "z"+                    , ESymbol Bin "+"+                    , EIdentifier "x"+                    , EIdentifier "y"+                    ]+                ]+              ]+            ]+        ]+      ]+    , [ [ EText TextNormal "Maxwell's Equations" ]+      , [ EDelimited+            "{"+            ""+            [ Right+                (EArray+                   [ AlignCenter , AlignCenter , AlignCenter ]+                   [ [ [ EGrouped+                           [ ESymbol Ord "\8711"+                           , ESpace (0 % 1)+                           , ESymbol Bin "\215"+                           , EUnderover+                               False (EIdentifier "B") (EGrouped []) (ESymbol Accent "\8636")+                           , ESymbol Bin "-"+                           , ESpace (1 % 6)+                           , EFraction NormalFrac (ENumber "1") (EIdentifier "c")+                           , ESpace (1 % 6)+                           , EFraction+                               NormalFrac+                               (EGrouped+                                  [ ESymbol Ord "\8706"+                                  , ESpace (0 % 1)+                                  , EUnderover+                                      False (EIdentifier "E") (EGrouped []) (ESymbol Accent "\8636")+                                  ])+                               (EGrouped+                                  [ ESymbol Ord "\8706" , ESpace (0 % 1) , EIdentifier "t" ])+                           ]+                       ]+                     , [ ESymbol Rel "=" ]+                     , [ EGrouped+                           [ EFraction+                               NormalFrac+                               (EGrouped [ ENumber "4" , EIdentifier "\960" ])+                               (EIdentifier "c")+                           , ESpace (1 % 6)+                           , EUnderover+                               False (EIdentifier "j") (EGrouped []) (ESymbol Accent "\8636")+                           ]+                       ]+                     ]+                   , [ [ EGrouped+                           [ ESymbol Ord "\8711"+                           , ESpace (0 % 1)+                           , ESymbol Bin "\183"+                           , EUnderover+                               False (EIdentifier "E") (EGrouped []) (ESymbol Accent "\8636")+                           ]+                       ]+                     , [ ESymbol Rel "=" ]+                     , [ EGrouped+                           [ ENumber "4" , EIdentifier "\960" , EIdentifier "\961" ]+                       ]+                     ]+                   , [ [ EGrouped+                           [ ESymbol Ord "\8711"+                           , ESpace (0 % 1)+                           , ESymbol Bin "\215"+                           , EUnderover+                               False (EIdentifier "E") (EGrouped []) (ESymbol Accent "\8636")+                           , ESpace (1 % 6)+                           , ESymbol Bin "+"+                           , ESpace (1 % 6)+                           , EFraction NormalFrac (ENumber "1") (EIdentifier "c")+                           , ESpace (1 % 6)+                           , EFraction+                               NormalFrac+                               (EGrouped+                                  [ ESymbol Ord "\8706"+                                  , ESpace (0 % 1)+                                  , EUnderover+                                      False (EIdentifier "B") (EGrouped []) (ESymbol Accent "\8636")+                                  ])+                               (EGrouped+                                  [ ESymbol Ord "\8706" , ESpace (0 % 1) , EIdentifier "t" ])+                           ]+                       ]+                     , [ ESymbol Rel "=" ]+                     , [ EUnderover+                           False (ENumber "0") (EGrouped []) (ESymbol Accent "\8636")+                       ]+                     ]+                   , [ [ EGrouped+                           [ ESymbol Ord "\8711"+                           , ESpace (0 % 1)+                           , ESymbol Bin "\183"+                           , EUnderover+                               False (EIdentifier "B") (EGrouped []) (ESymbol Accent "\8636")+                           ]+                       ]+                     , [ ESymbol Rel "=" ]+                     , [ ENumber "0" ]+                     ]+                   ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Einstein Field Equations" ]+      , [ EGrouped+            [ ESubsup+                (EIdentifier "R")+                (EGrouped [ EIdentifier "\956" , EIdentifier "\957" ])+                (EGrouped [])+            , ESymbol Bin "-"+            , EFraction NormalFrac (ENumber "1") (ENumber "2")+            , ESpace (1 % 6)+            , ESubsup+                (EIdentifier "g")+                (EGrouped [ EIdentifier "\956" , EIdentifier "\957" ])+                (EGrouped [])+            , ESpace (1 % 6)+            , EIdentifier "R"+            , ESymbol Rel "="+            , EFraction+                NormalFrac+                (EGrouped [ ENumber "8" , EIdentifier "\960" , EIdentifier "G" ])+                (ESubsup (EIdentifier "c") (EGrouped []) (ENumber "4"))+            , ESpace (1 % 6)+            , ESubsup+                (EIdentifier "T")+                (EGrouped [ EIdentifier "\956" , EIdentifier "\957" ])+                (EGrouped [])+            ]+        ]+      ]+    , [ [ EText TextNormal "Ramanujan Identity" ]+      , [ EGrouped+            [ EFraction+                NormalFrac+                (ENumber "1")+                (EGrouped+                   [ ESymbol Open "("+                   , ESqrt (EGrouped [ EIdentifier "\966" , ESqrt (ENumber "5") ])+                   , ESymbol Bin "-"+                   , EIdentifier "\966"+                   , ESymbol Close ")"+                   , ESubsup+                       (EIdentifier "e")+                       (EGrouped [])+                       (EFraction NormalFrac (ENumber "25") (EIdentifier "\960"))+                   ])+            , ESymbol Rel "="+            , ENumber "1"+            , ESymbol Bin "+"+            , EFraction+                NormalFrac+                (ESubsup+                   (EIdentifier "e")+                   (EGrouped [])+                   (EGrouped [ ESymbol Bin "-" , ENumber "2" , EIdentifier "\960" ]))+                (EGrouped+                   [ ENumber "1"+                   , ESymbol Bin "+"+                   , EFraction+                       NormalFrac+                       (ESubsup+                          (EIdentifier "e")+                          (EGrouped [])+                          (EGrouped [ ESymbol Bin "-" , ENumber "4" , EIdentifier "\960" ]))+                       (EGrouped+                          [ ENumber "1"+                          , ESymbol Bin "+"+                          , EFraction+                              NormalFrac+                              (ESubsup+                                 (EIdentifier "e")+                                 (EGrouped [])+                                 (EGrouped [ ESymbol Bin "-" , ENumber "6" , EIdentifier "\960" ]))+                              (EGrouped+                                 [ ENumber "1"+                                 , ESymbol Bin "+"+                                 , EFraction+                                     NormalFrac+                                     (ESubsup+                                        (EIdentifier "e")+                                        (EGrouped [])+                                        (EGrouped+                                           [ ESymbol Bin "-" , ENumber "8" , EIdentifier "\960" ]))+                                     (EGrouped+                                        [ ENumber "1" , ESymbol Bin "+" , ESymbol Ord "\8230" ])+                                 ])+                          ])+                   ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Another Ramanujan identity" ]+      , [ EGrouped+            [ EUnderover+                False+                (ESymbol Op "\8721")+                (EGrouped [ EIdentifier "k" , ESymbol Rel "=" , ENumber "1" ])+                (EIdentifier "\8734")+            , EFraction+                NormalFrac+                (ENumber "1")+                (ESubsup+                   (ENumber "2")+                   (EGrouped [])+                   (EGrouped+                      [ ESymbol Open "\8970"+                      , EIdentifier "k"+                      , ESymbol Bin "\183"+                      , ESpace (0 % 1)+                      , EIdentifier "\966"+                      , ESymbol Close "\8971"+                      ]))+            , ESymbol Rel "="+            , EFraction+                NormalFrac+                (ENumber "1")+                (EGrouped+                   [ ESubsup (ENumber "2") (EGrouped []) (ENumber "0")+                   , ESymbol Bin "+"+                   , EFraction+                       NormalFrac+                       (ENumber "1")+                       (EGrouped+                          [ ESubsup (ENumber "2") (EGrouped []) (ENumber "1")+                          , ESymbol Bin "+"+                          , ESymbol Ord "\8943"+                          ])+                   ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Rogers-Ramanujan Identity" ]+      , [ EGrouped+            [ ENumber "1"+            , ESymbol Bin "+"+            , EGrouped+                [ EUnderover+                    False+                    (ESymbol Op "\8721")+                    (EGrouped [ EIdentifier "k" , ESymbol Rel "=" , ENumber "1" ])+                    (EIdentifier "\8734")+                , EFraction+                    NormalFrac+                    (ESubsup+                       (EIdentifier "q")+                       (EGrouped [])+                       (EGrouped+                          [ ESubsup (EIdentifier "k") (EGrouped []) (ENumber "2")+                          , ESymbol Bin "+"+                          , EIdentifier "k"+                          ]))+                    (EGrouped+                       [ ESymbol Open "("+                       , ENumber "1"+                       , ESymbol Bin "-"+                       , EIdentifier "q"+                       , ESymbol Close ")"+                       , ESymbol Open "("+                       , ENumber "1"+                       , ESymbol Bin "-"+                       , ESubsup (EIdentifier "q") (EGrouped []) (ENumber "2")+                       , ESymbol Close ")"+                       , ESymbol Ord "\8943"+                       , ESymbol Open "("+                       , ENumber "1"+                       , ESymbol Bin "-"+                       , ESubsup (EIdentifier "q") (EGrouped []) (EIdentifier "k")+                       , ESymbol Close ")"+                       ])+                ]+            , ESymbol Rel "="+            , EGrouped+                [ EUnderover+                    False+                    (ESymbol Op "\8719")+                    (EGrouped [ EIdentifier "j" , ESymbol Rel "=" , ENumber "0" ])+                    (EIdentifier "\8734")+                , EFraction+                    NormalFrac+                    (ENumber "1")+                    (EGrouped+                       [ ESymbol Open "("+                       , ENumber "1"+                       , ESymbol Bin "-"+                       , ESubsup+                           (EIdentifier "q")+                           (EGrouped [])+                           (EGrouped+                              [ ENumber "5" , EIdentifier "j" , ESymbol Bin "+" , ENumber "2" ])+                       , ESymbol Close ")"+                       , ESymbol Open "("+                       , ENumber "1"+                       , ESymbol Bin "-"+                       , ESubsup+                           (EIdentifier "q")+                           (EGrouped [])+                           (EGrouped+                              [ ENumber "5" , EIdentifier "j" , ESymbol Bin "+" , ENumber "3" ])+                       , ESymbol Close ")"+                       ])+                ]+            , ESymbol Pun ","+            , EText TextNormal "\8287\8202"+            , EText TextNormal "\8287\8202"+            , EGrouped [ EIdentifier "f" , EIdentifier "o" , EIdentifier "r" ]+            , ESpace (2 % 9)+            , ESymbol Op "|"+            , EIdentifier "q"+            , ESymbol Op "|"+            , ESymbol Rel "<"+            , ENumber "1"+            , EIdentifier "."+            ]+        ]+      ]+    , [ [ EText TextNormal "Commutative Diagram" ]+      , [ EArray+            [ AlignCenter , AlignCenter , AlignCenter ]+            [ [ [ EIdentifier "H" ]+              , [ ESymbol Accent "\8592" ]+              , [ EIdentifier "K" ]+              ]+            , [ [ ESymbol Rel "\8595" ]+              , [ ESpace (0 % 1) ]+              , [ ESymbol Rel "\8593" ]+              ]+            , [ [ EIdentifier "H" ]+              , [ ESymbol Accent "\8594" ]+              , [ EIdentifier "K" ]+              ]+            ]+        ]+      ]+    ]+]+>>> typst+upright("Bernoulli Trials") & P paren.l E paren.r eq lr((n / k)) p_()^k (paren.l 1 hyph.minus p paren.r)_()^(n hyph.minus k)\+upright("Cauchy-Schwarz Inequality") & lr((sum_(k eq 1)^n a_k^() b_k^()))_()^2 lt.eq lr((sum_(k eq 1)^n a_k^2)) lr((sum_(k eq 1)^n b_k^2))\+upright("Cauchy Formula") & f paren.l z paren.r thin dot.c "Ind"_gamma^() paren.l z paren.r eq frac(1, 2 pi i) integral.cont_gamma^() frac(f paren.l xi paren.r, xi hyph.minus z) thin d xi\+upright("Cross Product") & V_1^() times V_2^() eq mat(delim: "|", i, j, k; frac(diff X, diff u), frac(diff Y, diff u), 0; frac(diff X, diff v), frac(diff Y, diff 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 hyph.minus 1), v_2^(n hyph.minus 1), dots.h.c, v_n^(n hyph.minus 1)) eq product_(1 lt.eq i lt j lt.eq n)^() paren.l v_j^() hyph.minus v_i^() paren.r\+upright("Lorenz Equations") & x^˙_() & eq & sigma paren.l y hyph.minus x paren.r\+y^˙_() & eq & rho x hyph.minus y hyph.minus x z\+z^˙_() & eq & hyph.minus beta z plus x y\+upright("Maxwell's Equations") & {nabla zws times B^harpoon.lt_() hyph.minus thin 1 / c thin frac(diff zws E^harpoon.lt_(), diff zws t) & eq & frac(4 pi, c) thin j^harpoon.lt_()\+nabla zws dot.c E^harpoon.lt_() & eq & 4 pi rho\+nabla zws times E^harpoon.lt_() thin plus thin 1 / c thin frac(diff zws B^harpoon.lt_(), diff zws t) & eq & 0^harpoon.lt_()\+nabla zws dot.c B^harpoon.lt_() & eq & 0\+upright("Einstein Field Equations") & R_(mu nu)^() hyph.minus 1 / 2 thin g_(mu nu)^() thin R eq frac(8 pi G, c_()^4) thin T_(mu nu)^()\+upright("Ramanujan Identity") & frac(1, paren.l sqrt(phi sqrt(5)) hyph.minus phi paren.r e_()^25 / pi) eq 1 plus frac(e_()^(hyph.minus 2 pi), 1 plus frac(e_()^(hyph.minus 4 pi), 1 plus frac(e_()^(hyph.minus 6 pi), 1 plus frac(e_()^(hyph.minus 8 pi), 1 plus dots.h))))\+upright("Another Ramanujan identity") & sum_(k eq 1)^oo 1 / 2_()^(⌊ k dot.c zws phi ⌋) eq frac(1, 2_()^0 plus frac(1, 2_()^1 plus dots.h.c))\+upright("Rogers-Ramanujan Identity") & 1 plus sum_(k eq 1)^oo frac(q_()^(k_()^2 plus k), paren.l 1 hyph.minus q paren.r paren.l 1 hyph.minus q_()^2 paren.r dots.h.c paren.l 1 hyph.minus q_()^k paren.r) eq product_(j eq 0)^oo frac(1, paren.l 1 hyph.minus q_()^(5 j plus 2) paren.r paren.l 1 hyph.minus q_()^(5 j plus 3) paren.r) comma upright("  ") upright("  ") f o r med bar.v q bar.v lt 1 dot\+upright("Commutative Diagram") & H & arrow.l & K\+arrow.b & zws & arrow.t\+H & arrow.r & K
+ test/writer/typst/complex2.test view
@@ -0,0 +1,408 @@+<<< native+[ EArray+    [ AlignCenter , AlignCenter ]+    [ [ [ EText TextNormal "Quadratic Equation" ]+      , [ EGrouped+            [ EIdentifier "x"+            , ESymbol Rel "="+            , EFraction+                NormalFrac+                (EGrouped+                   [ ESymbol Bin "-"+                   , EIdentifier "b"+                   , ESymbol Bin "\177"+                   , ESqrt+                       (EGrouped+                          [ ESubsup (EIdentifier "b") (EGrouped []) (ENumber "2")+                          , ESymbol Bin "-"+                          , ENumber "4"+                          , EIdentifier "a"+                          , EIdentifier "c"+                          ])+                   ])+                (EGrouped [ ENumber "2" , EIdentifier "a" ])+            ]+        ]+      ]+    , [ [ EText TextNormal "DisplayQuadratic Equation" ]+      , [ EGrouped+            [ EIdentifier "x"+            , ESymbol Rel "="+            , EFraction+                NormalFrac+                (EGrouped+                   [ ESymbol Bin "-"+                   , EIdentifier "b"+                   , ESymbol Bin "\177"+                   , ESqrt+                       (EGrouped+                          [ ESubsup (EIdentifier "b") (EGrouped []) (ENumber "2")+                          , ESymbol Bin "-"+                          , ENumber "4"+                          , EIdentifier "a"+                          , EIdentifier "c"+                          ])+                   ])+                (EGrouped [ ENumber "2" , EIdentifier "a" ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Rational Function" ]+      , [ EGrouped+            [ EIdentifier "f"+            , ESymbol Open "("+            , EIdentifier "x"+            , ESymbol Close ")"+            , ESymbol Rel "="+            , EFraction+                NormalFrac+                (EGrouped+                   [ ENumber "1"+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (EGrouped []) (ENumber "2")+                   ])+                (EGrouped+                   [ ENumber "1"+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (EGrouped []) (ENumber "3")+                   ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Rational Function" ]+      , [ EGrouped+            [ EIdentifier "f"+            , ESymbol Open "("+            , EIdentifier "x"+            , ESymbol Close ")"+            , ESymbol Rel "="+            , EFraction+                NormalFrac+                (EGrouped+                   [ ESymbol Open "("+                   , ENumber "1"+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (EGrouped []) (ENumber "2")+                   , ESymbol Close ")"+                   , ESubsup (EIdentifier "x") (EGrouped []) (ENumber "3")+                   ])+                (EGrouped+                   [ ENumber "1"+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (EGrouped []) (ENumber "3")+                   ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Rational Function" ]+      , [ EGrouped+            [ EIdentifier "f"+            , ESymbol Open "("+            , EIdentifier "x"+            , ESymbol Close ")"+            , ESymbol Rel "="+            , EFraction+                NormalFrac+                (EGrouped+                   [ ESymbol Open "("+                   , ENumber "1"+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (EGrouped []) (ENumber "2")+                   , ESymbol Close ")"+                   , ESymbol Open "("+                   , ESubsup (EIdentifier "x") (EGrouped []) (ENumber "3")+                   , ESymbol Bin "-"+                   , ENumber "5"+                   , EIdentifier "x"+                   , ESymbol Close ")"+                   ])+                (EGrouped+                   [ ENumber "1"+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (EGrouped []) (ENumber "3")+                   ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Parametrize Rational Function" ]+      , [ EGrouped+            [ EIdentifier "f"+            , ESymbol Open "("+            , EIdentifier "x"+            , ESymbol Close ")"+            , ESymbol Rel "="+            , EFraction+                NormalFrac+                (EGrouped+                   [ ESymbol Open "("+                   , ESubsup (EIdentifier "a") (EIdentifier "i") (EGrouped [])+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (EGrouped []) (ENumber "2")+                   , ESubsup (ESymbol Close ")") (EGrouped []) (ENumber "5")+                   ])+                (EGrouped+                   [ ENumber "1"+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (EGrouped []) (ENumber "3")+                   ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Stacked exponents" ]+      , [ EGrouped+            [ EIdentifier "g"+            , ESymbol Open "("+            , EIdentifier "z"+            , ESymbol Close ")"+            , ESymbol Rel "="+            , ESubsup+                (EIdentifier "e")+                (EGrouped [])+                (EGrouped+                   [ ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (EGrouped []) (ENumber "2")+                   ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Stacked exponents" ]+      , [ EGrouped+            [ EIdentifier "g"+            , ESymbol Open "("+            , EIdentifier "z"+            , ESymbol Close ")"+            , ESymbol Rel "="+            , ESubsup+                (EIdentifier "e")+                (EGrouped [])+                (EGrouped+                   [ ESymbol Bin "-"+                   , ESymbol Open "("+                   , EIdentifier "z"+                   , ESymbol Bin "-"+                   , EIdentifier "a"+                   , ESubsup (ESymbol Close ")") (EGrouped []) (ENumber "2")+                   ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Stacked exponents" ]+      , [ EGrouped+            [ EIdentifier "g"+            , ESymbol Open "("+            , EIdentifier "z"+            , ESymbol Close ")"+            , ESymbol Rel "="+            , ESubsup+                (EIdentifier "e")+                (EGrouped [])+                (EGrouped+                   [ ESymbol Bin "-"+                   , EUnderover+                       False+                       (ESymbol Op "\8721")+                       (EGrouped [ EIdentifier "i" , ESymbol Rel "=" , ENumber "0" ])+                       (EIdentifier "\8734")+                   , ESubsup (EIdentifier "z") (EIdentifier "i") (ENumber "2")+                   ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Stacked exponents" ]+      , [ EGrouped+            [ EIdentifier "g"+            , ESymbol Open "("+            , EIdentifier "y"+            , ESymbol Close ")"+            , ESymbol Rel "="+            , ESubsup+                (EIdentifier "e")+                (EGrouped [])+                (EGrouped+                   [ ESymbol Bin "-"+                   , EUnderover+                       False+                       (ESymbol Op "\8721")+                       (EGrouped [ EIdentifier "i" , ESymbol Rel "=" , ENumber "0" ])+                       (EIdentifier "\8734")+                   , ESubsup (EIdentifier "y") (EIdentifier "i") (ENumber "2")+                   ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Stacked exponents" ]+      , [ EGrouped+            [ EIdentifier "g"+            , ESymbol Open "("+            , EIdentifier "z"+            , ESymbol Close ")"+            , ESymbol Rel "="+            , ESubsup+                (EIdentifier "e")+                (EGrouped [])+                (EGrouped+                   [ ESymbol Bin "-"+                   , EUnderover+                       False+                       (ESymbol Op "\8721")+                       (EGrouped [ EIdentifier "i" , ESymbol Rel "=" , ENumber "0" ])+                       (EIdentifier "\8734")+                   , ESubsup+                       (EIdentifier "z")+                       (EGrouped [])+                       (EFraction+                          NormalFrac+                          (ENumber "2")+                          (EGrouped [ EIdentifier "a" , ESymbol Bin "-" , EIdentifier "i" ]))+                   ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Cross Product" ]+      , [ EGrouped+            [ EFraction+                NormalFrac+                (EGrouped+                   [ ESubsup (EIdentifier "x") (ENumber "1") (EGrouped [])+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (ENumber "2") (EGrouped [])+                   ])+                (EGrouped+                   [ ESubsup (EIdentifier "x") (ENumber "3") (EGrouped [])+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (ENumber "4") (EGrouped [])+                   ])+            , EFraction+                NormalFrac+                (EGrouped+                   [ ESubsup (EIdentifier "x") (ENumber "1") (EGrouped [])+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (ENumber "4") (EGrouped [])+                   ])+                (EGrouped+                   [ ESubsup (EIdentifier "x") (ENumber "2") (EGrouped [])+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (ENumber "3") (EGrouped [])+                   ])+            ]+        ]+      ]+    , [ [ EText TextNormal "Cross Product" ]+      , [ EGrouped+            [ ESymbol Open "("+            , EFraction+                NormalFrac+                (EGrouped+                   [ ESubsup (EIdentifier "x") (ENumber "1") (EGrouped [])+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (ENumber "2") (EGrouped [])+                   ])+                (EGrouped+                   [ ESubsup (EIdentifier "x") (ENumber "3") (EGrouped [])+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (ENumber "4") (EGrouped [])+                   ])+            , ESymbol Close ")"+            , ESymbol Open "("+            , EFraction+                NormalFrac+                (EGrouped+                   [ ESubsup (EIdentifier "x") (ENumber "1") (EGrouped [])+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (ENumber "4") (EGrouped [])+                   ])+                (EGrouped+                   [ ESubsup (EIdentifier "x") (ENumber "2") (EGrouped [])+                   , ESymbol Bin "-"+                   , ESubsup (EIdentifier "x") (ENumber "3") (EGrouped [])+                   ])+            , ESymbol Close ")"+            ]+        ]+      ]+    , [ [ EText TextNormal "Cross Product" ]+      , [ EGrouped+            [ EDelimited+                "("+                ")"+                [ Right+                    (EFraction+                       NormalFrac+                       (EGrouped+                          [ ESubsup (EIdentifier "x") (ENumber "1") (EGrouped [])+                          , ESymbol Bin "-"+                          , ESubsup (EIdentifier "x") (ENumber "2") (EGrouped [])+                          ])+                       (EGrouped+                          [ ESubsup (EIdentifier "x") (ENumber "3") (EGrouped [])+                          , ESymbol Bin "-"+                          , ESubsup (EIdentifier "x") (ENumber "4") (EGrouped [])+                          ]))+                ]+            , EDelimited+                "("+                ")"+                [ Right+                    (EFraction+                       NormalFrac+                       (EGrouped+                          [ ESubsup (EIdentifier "x") (ENumber "1") (EGrouped [])+                          , ESymbol Bin "-"+                          , ESubsup (EIdentifier "x") (ENumber "4") (EGrouped [])+                          ])+                       (EGrouped+                          [ ESubsup (EIdentifier "x") (ENumber "2") (EGrouped [])+                          , ESymbol Bin "-"+                          , ESubsup (EIdentifier "x") (ENumber "3") (EGrouped [])+                          ]))+                ]+            ]+        ]+      ]+    , [ [ EText TextNormal "Cross Product" ]+      , [ EFraction+            NormalFrac+            (EGrouped+               [ ESymbol Open "("+               , ESubsup (EIdentifier "x") (ENumber "1") (EGrouped [])+               , ESymbol Bin "-"+               , ESubsup (EIdentifier "x") (ENumber "2") (EGrouped [])+               , ESymbol Close ")"+               , ESymbol Open "("+               , ESubsup (EIdentifier "x") (ENumber "3") (EGrouped [])+               , ESymbol Bin "-"+               , ESubsup (EIdentifier "x") (ENumber "4") (EGrouped [])+               , ESymbol Close ")"+               ])+            (EGrouped+               [ ESymbol Open "("+               , ESubsup (EIdentifier "x") (ENumber "1") (EGrouped [])+               , ESymbol Bin "-"+               , ESubsup (EIdentifier "x") (ENumber "4") (EGrouped [])+               , ESymbol Close ")"+               , ESymbol Open "("+               , ESubsup (EIdentifier "x") (ENumber "2") (EGrouped [])+               , ESymbol Bin "-"+               , ESubsup (EIdentifier "x") (ENumber "3") (EGrouped [])+               , ESymbol Close ")"+               ])+        ]+      ]+    ]+]+>>> typst+upright("Quadratic Equation") & x eq frac(hyph.minus b plus.minus sqrt(b_()^2 hyph.minus 4 a c), 2 a)\+upright("DisplayQuadratic Equation") & x eq frac(hyph.minus b plus.minus sqrt(b_()^2 hyph.minus 4 a c), 2 a)\+upright("Rational Function") & f paren.l x paren.r eq frac(1 hyph.minus x_()^2, 1 hyph.minus x_()^3)\+upright("Rational Function") & f paren.l x paren.r eq frac(paren.l 1 hyph.minus x_()^2 paren.r x_()^3, 1 hyph.minus x_()^3)\+upright("Rational Function") & f paren.l x paren.r eq frac(paren.l 1 hyph.minus x_()^2 paren.r paren.l x_()^3 hyph.minus 5 x paren.r, 1 hyph.minus x_()^3)\+upright("Parametrize Rational Function") & f paren.l x paren.r eq frac(paren.l a_i^() hyph.minus x_()^2 paren.r_()^5, 1 hyph.minus x_()^3)\+upright("Stacked exponents") & g paren.l z paren.r eq e_()^(hyph.minus x_()^2)\+upright("Stacked exponents") & g paren.l z paren.r eq e_()^(hyph.minus paren.l z hyph.minus a paren.r_()^2)\+upright("Stacked exponents") & g paren.l z paren.r eq e_()^(hyph.minus sum_(i eq 0)^oo z_i^2)\+upright("Stacked exponents") & g paren.l y paren.r eq e_()^(hyph.minus sum_(i eq 0)^oo y_i^2)\+upright("Stacked exponents") & g paren.l z paren.r eq e_()^(hyph.minus sum_(i eq 0)^oo z_()^frac(2, a hyph.minus i))\+upright("Cross Product") & frac(x_1^() hyph.minus x_2^(), x_3^() hyph.minus x_4^()) frac(x_1^() hyph.minus x_4^(), x_2^() hyph.minus x_3^())\+upright("Cross Product") & paren.l frac(x_1^() hyph.minus x_2^(), x_3^() hyph.minus x_4^()) paren.r paren.l frac(x_1^() hyph.minus x_4^(), x_2^() hyph.minus x_3^()) paren.r\+upright("Cross Product") & lr((frac(x_1^() hyph.minus x_2^(), x_3^() hyph.minus x_4^()))) lr((frac(x_1^() hyph.minus x_4^(), x_2^() hyph.minus x_3^())))\+upright("Cross Product") & frac(paren.l x_1^() hyph.minus x_2^() paren.r paren.l x_3^() hyph.minus x_4^() paren.r, paren.l x_1^() hyph.minus x_4^() paren.r paren.l x_2^() hyph.minus x_3^() paren.r)
+ test/writer/typst/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")+]+>>> typst+c eq overbrace(a_brace.b_upright("real") plus (b upright(i))_brace.b_upright("imaginary"))^upright("complex number")
+ test/writer/typst/coprod2.test view
@@ -0,0 +1,10 @@+<<< native+[ EUnderover+    False+    (ESymbol Op "\8720")+    (EGrouped [ EIdentifier "i" , ESymbol Rel "=" , ENumber "0" ])+    (EIdentifier "\8734")+, ESub (EIdentifier "x") (EIdentifier "i")+]+>>> typst+product.co_(i eq 0)^oo x_i
+ test/writer/typst/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"+]+>>> typst+B arrow.r_f^() A arrow.l_f^() C
+ test/writer/typst/deMorgans_law.test view
@@ -0,0 +1,39 @@+<<< native+[ ESymbol Op "\172"+, EDelimited+    "("+    ")"+    [ Right (EIdentifier "p")+    , Right (ESymbol Bin "\8743")+    , Right (EIdentifier "q")+    ]+, ESymbol Rel "\8660"+, EDelimited+    "(" ")" [ Right (ESymbol Op "\172") , Right (EIdentifier "p") ]+, ESymbol Bin "\8744"+, EDelimited+    "(" ")" [ Right (ESymbol Op "\172") , Right (EIdentifier "q") ]+, 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")+]+>>> typst+not lr((p and q)) arrow.l.r.double lr((not p)) or lr((not q)) (union.big_(i eq 1)^n A_i)^macron eq sect.big_(i eq 1)^n A_i^macron
+ test/writer/typst/differentiable_manifold.test view
@@ -0,0 +1,63 @@+<<< 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")+               , EDelimited "(" ")" [ Right (ENumber "0") ]+               , ESymbol Rel "="+               , ESub (EIdentifier "\947") (ENumber "2")+               , EDelimited "(" ")" [ Right (ENumber "0") ]+               , 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 (EDelimited "(" ")" [ Right (EIdentifier "t") ])+                      ])+                   (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 (EDelimited "(" ")" [ Right (EIdentifier "t") ])+                      ])+                   (EGrouped [ EIdentifier "t" , ESymbol Rel "=" , ENumber "0" ])+               ]+             ]+           ])+    ]+]+>>> typst+gamma_1 ident gamma_2 arrow.l.r.double {gamma_1 lr((0)) eq gamma_2 lr((0)) eq p comma upright(" and ")\+frac(upright(d), upright(d) t) phi.alt compose gamma_1 lr((t))\|_(t eq 0) eq frac(upright(d), upright(d) t) phi.alt compose gamma_2 lr((t))\|_(t eq 0)
+ test/writer/typst/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" ])+]+>>> typst+nabla dot.op v^⃗ eq frac(diff v_x, diff x) plus frac(diff v_y, diff y) plus frac(diff v_z, diff z)
+ test/writer/typst/double-struck.test view
@@ -0,0 +1,15 @@+<<< native+[ EStyled+    TextDoubleStruck+    [ EArray+        [ AlignLeft ]+        [ [ [ EText TextNormal "0123456789" ] ]+        , [ [ EText TextNormal "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ] ]+        , [ [ EText TextNormal "abcdefghijklmnopqrstuvwxyz" ] ]+        ]+    ]+]+>>> typst+bb(upright("0123456789")\+upright("ABCDEFGHIJKLMNOPQRSTUVWXYZ")\+upright("abcdefghijklmnopqrstuvwxyz"))
+ test/writer/typst/doubleint1.test view
@@ -0,0 +1,10 @@+<<< native+[ ESubsup (ESymbol Op "\8748") (ENumber "0") (ENumber "1")+, EIdentifier "f"+, EDelimited "(" ")" [ Right (EIdentifier "x") ]+, ESpace (1 % 9)+, ESymbol Ord "\8518"+, EIdentifier "x"+]+>>> typst+integral.double_0^1 f lr((x)) #h(0em) ⅆ x
+ test/writer/typst/genfrac.test view
@@ -0,0 +1,9 @@+<<< native+[ EDelimited+    "{"+    "}"+    [ Right (EFraction NoLineFrac (EIdentifier "x") (EIdentifier "y"))+    ]+]+>>> typst+lr({x / y})
+ test/writer/typst/largeop1.test view
@@ -0,0 +1,84 @@+<<< native+[ EArray+    [ AlignCenter , AlignCenter ]+    [ [ [ EText TextNormal "displaystyle: false largeop: false" ]+      , [ EGrouped+            [ ESymbol Op "\8896"+            , ESymbol Op "\8897"+            , ESymbol Op "\8747"+            , ESymbol Op "\8721"+            , ESymbol Op "\8719"+            , ESymbol Op "\8899"+            , ESymbol Op "\8898"+            ]+        ]+      ]+    , [ [ EText TextNormal "displaystyle: false largeop: true" ]+      , [ EGrouped+            [ ESymbol Op "\8896"+            , ESymbol Op "\8897"+            , ESymbol Op "\8747"+            , ESymbol Op "\8721"+            , ESymbol Op "\8719"+            , ESymbol Op "\8899"+            , ESymbol Op "\8898"+            ]+        ]+      ]+    , [ [ EText TextNormal "displaystyle: true largeop: false" ]+      , [ EGrouped+            [ ESymbol Op "\8896"+            , ESymbol Op "\8897"+            , ESymbol Op "\8747"+            , ESymbol Op "\8721"+            , ESymbol Op "\8719"+            , ESymbol Op "\8899"+            , ESymbol Op "\8898"+            ]+        ]+      ]+    , [ [ EText TextNormal "displaystyle: true largeop: true" ]+      , [ EGrouped+            [ ESymbol Op "\8896"+            , ESymbol Op "\8897"+            , ESymbol Op "\8747"+            , ESymbol Op "\8721"+            , ESymbol Op "\8719"+            , ESymbol Op "\8899"+            , ESymbol Op "\8898"+            ]+        ]+      ]+    , [ [ EText TextNormal "displaystyle: false largeop: default" ]+      , [ EGrouped+            [ ESymbol Op "\8896"+            , ESymbol Op "\8897"+            , ESymbol Op "\8747"+            , ESymbol Op "\8721"+            , ESymbol Op "\8719"+            , ESymbol Op "\8899"+            , ESymbol Op "\8898"+            ]+        ]+      ]+    , [ [ EText TextNormal "displaystyle: true largeop: default" ]+      , [ EGrouped+            [ ESymbol Op "\8896"+            , ESymbol Op "\8897"+            , ESymbol Op "\8747"+            , ESymbol Op "\8721"+            , ESymbol Op "\8719"+            , ESymbol Op "\8899"+            , ESymbol Op "\8898"+            ]+        ]+      ]+    ]+]+>>> 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
+ test/writer/typst/largeopPos3.test view
@@ -0,0 +1,11 @@+<<< native+[ EUnderover+    False+    (ESymbol Op "\8898")+    (EGrouped [ EIdentifier "i" , ESymbol Rel "=" , ENumber "0" ])+    (EIdentifier "\8734")+, EGrouped+    [ EIdentifier "A" , ESymbol Bin "\8745" , EIdentifier "B" ]+]+>>> typst+sect.big_(i eq 0)^oo A sect B
+ test/writer/typst/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 "."+            ]+        ]+    ]+]+>>> typst+X^2 eq y upright(" under ") H_0 upright(" except when ") x bold(" is less than ") z bold(".")
+ test/writer/typst/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" ]))+               ]+             ]+           ])+    ]+]+>>> typst+M eq mat(delim: "[", alpha_1, alpha_1^q, dots.h.c, alpha_1^q^(n minus 1); alpha_2, alpha_2^q, dots.h.c, alpha_2^q^(n minus 1); dots.v, dots.v, dots.down, dots.v; alpha_m, alpha_m^q, dots.h.c, alpha_m^q^(n minus 1))
+ test/writer/typst/nestFrac1.test view
@@ -0,0 +1,37 @@+<<< native+[ EFraction+    NormalFrac+    (ENumber "1")+    (EGrouped+       [ ESqrt (ENumber "2")+       , ESymbol Bin "+"+       , EFraction+           NormalFrac+           (ENumber "1")+           (EGrouped+              [ ESqrt (ENumber "3")+              , ESymbol Bin "+"+              , EFraction+                  NormalFrac+                  (ENumber "1")+                  (EGrouped+                     [ ESqrt (ENumber "4")+                     , ESymbol Bin "+"+                     , EFraction+                         NormalFrac+                         (ENumber "1")+                         (EGrouped+                            [ ESqrt (ENumber "5")+                            , ESymbol Bin "+"+                            , EFraction+                                NormalFrac+                                (ENumber "1")+                                (EGrouped+                                   [ ESqrt (ENumber "6") , ESymbol Bin "+" , EIdentifier "\8230" ])+                            ])+                     ])+              ])+       ])+]+>>> typst+frac(1, sqrt(2) plus frac(1, sqrt(3) plus frac(1, sqrt(4) plus frac(1, sqrt(5) plus frac(1, sqrt(6) plus dots.h)))))
+ test/writer/typst/nestScript.test view
@@ -0,0 +1,10 @@+<<< native+[ ESuper+    (EIdentifier "v")+    (ESuper+       (EIdentifier "w")+       (ESuper+          (EIdentifier "x") (ESuper (EIdentifier "y") (EIdentifier "z"))))+]+>>> typst+v^w^x^y^z
+ test/writer/typst/nestedAwidth1.test view
@@ -0,0 +1,33 @@+<<< native+[ EArray+    [ AlignCenter ]+    [ [ [ EArray+            [ AlignCenter , AlignCenter ]+            [ [ [ ENumber "1" ] , [ ENumber "2" ] ]+            , [ [ EIdentifier "x" ] , [ EIdentifier "y" ] ]+            ]+        ]+      ]+    , [ [ EArray+            [ AlignCenter , AlignCenter ]+            [ [ [ ENumber "1" ] , [ ENumber "2" ] ]+            , [ [ EIdentifier "x" ] , [ EIdentifier "y" ] ]+            ]+        ]+      ]+    , [ [ EArray+            [ AlignCenter , AlignCenter ]+            [ [ [ ENumber "1" ] , [ ENumber "2" ] ]+            , [ [ EIdentifier "x" ] , [ EIdentifier "y" ] ]+            ]+        ]+      ]+    ]+]+>>> typst+1 & 2\+x & y\+1 & 2\+x & y\+1 & 2\+x & y
+ test/writer/typst/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"+]+>>> typst+x in y and x in.not y
+ test/writer/typst/oint1.test view
@@ -0,0 +1,10 @@+<<< native+[ ESubsup (ESymbol Op "\8750") (ENumber "0") (ENumber "1")+, EIdentifier "f"+, EDelimited "(" ")" [ Right (EIdentifier "x") ]+, ESpace (1 % 9)+, ESymbol Ord "\8518"+, EIdentifier "x"+]+>>> typst+integral.cont_0^1 f lr((x)) #h(0em) ⅆ x
+ test/writer/typst/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" ]+             ]+           ])+    ]+]+>>> typst+cases(delim: "{", "div"_x u "div"^x u "div"_x^y u "div"_x^y u & upright("operatorname"), "⋆-lim'sup"_(x arrow.r 0) u "⋆-lim'sup"^w u "⋆-lim'sup"_(x arrow.r 0)^w u "⋆-lim'sup"_(x arrow.r 0)^w u & upright("operatorname*"), "⋆-lim'sup"_(x arrow.r 0) u "⋆-lim'sup"^w u "⋆-lim'sup"_(x arrow.r 0)^w u "⋆-lim'sup"_(x arrow.r 0)^w u & upright("operatorname*:nolimits"), "curl"_x v "argmax"_K u & upright("DeclareMathOperator"))
+ test/writer/typst/phantom.test view
@@ -0,0 +1,10 @@+<<< native+[ EDelimited+    "("+    ")"+    [ Right+        (EPhantom (EFraction NormalFrac (ENumber "1") (ENumber "2")))+    ]+]+>>> typst+lr((#hide[1 / 2]))
+ test/writer/typst/primes1.test view
@@ -0,0 +1,40 @@+<<< native+[ ESuper (EIdentifier "x") (ENumber "2")+, ESymbol Bin "+"+, ESuper (ENumber "2") (ENumber "2")+, ESymbol Bin "+"+, ESuper (EIdentifier "x") (ESymbol Ord "\8242")+, ESymbol Bin "+"+, ESuper (EIdentifier "x") (ESymbol Accent "'")+, ESymbol Bin "+"+, ESuper (EIdentifier "x") (EMathOperator "''")+, ESymbol Bin "+"+, EIdentifier "x"+, EIdentifier "\8242"+, ESymbol Bin "+"+, ESuper+    (ESuper (EIdentifier "x") (ESymbol Accent "'"))+    (ESymbol Accent "'")+, ESymbol Bin "+"+, ESuper+    (ESuper (EIdentifier "x") (ESymbol Accent "'")) (ENumber "2")+, ESymbol Bin "+"+, ESuper+    (EIdentifier "x")+    (EGrouped+       [ ESymbol Accent "'" , ESymbol Bin "+" , ESymbol Accent "'" ])+, ESymbol Bin "+"+, ESuper+    (ESuper (EIdentifier "x") (ESymbol Accent "'"))+    (ESymbol Accent "'")+, ESymbol Bin "+"+, ESuper+    (EIdentifier "x")+    (ESuper (ESymbol Accent "'") (ESymbol Accent "'"))+, ESymbol Bin "+"+, ESuper (ESymbol Accent "'") (ESymbol Accent "'")+, ESymbol Bin "+"+, ESuper (ESymbol Accent "'") (ESymbol Accent "'")+]+>>> typst+x^2 plus 2^2 plus x^prime plus x^quote.single plus x^"''" plus x prime plus x^quote.single^quote.single plus x^quote.single^2 plus x^(quote.single plus quote.single) plus x^quote.single^quote.single plus x^quote.single^quote.single plus quote.single^quote.single plus quote.single^quote.single
+ test/writer/typst/primes2.test view
@@ -0,0 +1,30 @@+<<< native+[ ESuper (EIdentifier "H") (ESymbol Accent "\"")+, ESuper (EIdentifier "H") (ESymbol Accent "'")+, ESuper (EIdentifier "H") (ESymbol Ord "*")+, ESuper (EIdentifier "H") (ESymbol Accent "`")+, ESuper (EIdentifier "H") (ESymbol Accent "\170")+, ESuper (EIdentifier "H") (ESymbol Ord "\176")+, ESuper (EIdentifier "H") (ESymbol Accent "\178")+, ESuper (EIdentifier "H") (ESymbol Accent "\179")+, ESuper (EIdentifier "H") (ESymbol Accent "\180")+, ESuper (EIdentifier "H") (ESymbol Accent "\185")+, ESuper (EIdentifier "H") (ESymbol Accent "\186")+, ESuper (EIdentifier "H") (ESymbol Open "\8216")+, ESuper (EIdentifier "H") (ESymbol Close "\8217")+, ESuper (EIdentifier "H") (ESymbol Accent "\8218")+, ESuper (EIdentifier "H") (ESymbol Accent "\8219")+, ESuper (EIdentifier "H") (ESymbol Open "\8220")+, ESuper (EIdentifier "H") (ESymbol Close "\8221")+, ESuper (EIdentifier "H") (ESymbol Accent "\8222")+, ESuper (EIdentifier "H") (ESymbol Accent "\8223")+, ESuper (EIdentifier "H") (ESymbol Ord "\8242")+, ESuper (EIdentifier "H") (ESymbol Accent "\8243")+, ESuper (EIdentifier "H") (ESymbol Accent "\8244")+, ESuper (EIdentifier "H") (ESymbol Accent "\8245")+, ESuper (EIdentifier "H") (ESymbol Accent "\8246")+, ESuper (EIdentifier "H") (ESymbol Accent "\8247")+, ESuper (EIdentifier "H") (ESymbol Accent "\8279")+]+>>> typst+H^quote.double H^quote.single H^ast H^grave 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^prime H^prime.double H^prime.triple H^prime.rev H^prime.double.rev H^prime.triple.rev H^prime.quad
+ test/writer/typst/prod2.test view
@@ -0,0 +1,10 @@+<<< native+[ EUnderover+    False+    (ESymbol Op "\8719")+    (EGrouped [ EIdentifier "i" , ESymbol Rel "=" , ENumber "0" ])+    (EIdentifier "\8734")+, ESub (EIdentifier "x") (EIdentifier "i")+]+>>> typst+product_(i eq 0)^oo x_i
+ test/writer/typst/schwinger_dyson.test view
@@ -0,0 +1,57 @@+<<< 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 (EDelimited "[" "]" [ Right (EIdentifier "\981") ])+                  ])+           ])+    , Right (EIdentifier "\968")+    ]+, ESymbol Rel "="+, ESymbol Bin "\8722"+, EStyled TextNormal [ EIdentifier "i" ]+, EDelimited+    "\10216"+    "\10217"+    [ Right (EIdentifier "\968")+    , Right+        (EDelimited+           "|"+           "|"+           [ Right (EStyled TextScript [ EIdentifier "T" ])+           , Right+               (EDelimited+                  "{"+                  "}"+                  [ Right (EIdentifier "F")+                  , Right (EDelimited "[" "]" [ Right (EIdentifier "\981") ])+                  , Right+                      (EFraction+                         NormalFrac+                         (EIdentifier "\948")+                         (EGrouped [ EIdentifier "\948" , EIdentifier "\981" ]))+                  , Right (EIdentifier "S")+                  , Right (EDelimited "[" "]" [ Right (EIdentifier "\981") ])+                  ])+           ])+    , Right (EIdentifier "\968")+    ]+]+>>> typst+⟨psi lr(|cal(T) lr({frac(delta, delta phi.alt) F lr([phi.alt])})|) psi⟩ eq minus upright(i) ⟨psi lr(|cal(T) lr({F lr([phi.alt]) frac(delta, delta phi.alt) S lr([phi.alt])})|) psi⟩
+ test/writer/typst/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")+]+>>> typst+sum_(i eq 1)^100 x eq frac(100 ast 101, 2)
+ test/writer/typst/sophomores_dream.test view
@@ -0,0 +1,25 @@+<<< 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+    [ ESuper+        (EDelimited+           "(" ")" [ Right (ESymbol Op "\8722") , Right (ENumber "1") ])+        (EGrouped [ EIdentifier "n" , ESymbol Bin "+" , ENumber "1" ])+    , ESpace (1 % 6)+    , ESuper+        (EIdentifier "n")+        (EGrouped [ ESymbol Op "\8722" , EIdentifier "n" ])+    ]+]+>>> typst+integral_0^1 x^x thin upright(d) x eq sum_(n eq 1)^oo lr((minus 1))^(n plus 1) thin n^(minus n)
+ test/writer/typst/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"+]+>>> typst+Y arrow.l^f X arrow.r^g Z
+ test/writer/typst/sphere_volume.test view
@@ -0,0 +1,133 @@+<<< 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)+        , EDelimited+            "("+            ")"+            [ Right (ESymbol Op "\8722")+            , Right (EMathOperator "cos")+            , Right (EIdentifier "\952")+            ]+        , 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")+        ]+      ]+    ]+]+>>> typst+S eq brace.l 0 lt.eq phi.alt lt.eq 2 pi comma med 0 lt.eq theta lt.eq pi comma med 0 lt.eq rho lt.eq R brace.r upright(V o l u m e) & eq integral.triple_S #h(-1em) rho^2 sin theta thin upright(d) rho thin upright(d) theta thin upright(d) phi.alt\+ & eq 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\+ & eq phi.alt #scale(x: 180%, y: 180%)[bar.v]_0^(2 pi) med lr((minus cos theta)) #scale(x: 180%, y: 180%)[bar.v]_0^pi med 1 / 3 rho^3 #scale(x: 180%, y: 180%)[bar.v]_0^R\+ & eq 2 pi times 2 times 1 / 3 R^3\+ & eq 4 / 3 pi R^3
+ test/writer/typst/stackrel.test view
@@ -0,0 +1,7 @@+<<< native+[ ESub (EIdentifier "u") (EIdentifier "n")+, EOver False (ESymbol Rel "\8594") (EIdentifier "w")+, EIdentifier "u"+]+>>> typst+u_n arrow.r^w u
+ test/writer/typst/substack.test view
@@ -0,0 +1,37 @@+<<< 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"+, EDelimited+    "("+    ")"+    [ Right (EIdentifier "i")+    , Right (ESymbol Pun ",")+    , Right (EIdentifier "j")+    ]+]+>>> typst+sum_0 lt i lt m\+0 lt j lt n P lr((i comma j))
+ test/writer/typst/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")+]+>>> typst+x_b^a quad x_b^a quad min_A quad max_B quad det_C quad Pr_A quad gcd_A quad u^̇^2 quad u^macron_epsilon quad underline(u)_b^a quad overbrace(a plus b)^upright("term") quad overbracket(a plus b)^c quad (a plus b)_brace.b_c quad (a plus b)_bracket.b_c quad^H e 3 quad_x A quad_x^3
+ test/writer/typst/sum1.test view
@@ -0,0 +1,10 @@+<<< native+[ EUnderover+    False+    (ESymbol Op "\8721")+    (EGrouped [ EIdentifier "i" , ESymbol Rel "=" , ENumber "0" ])+    (EIdentifier "\8734")+, ESub (EIdentifier "x") (EIdentifier "i")+]+>>> typst+sum_(i eq 0)^oo x_i
+ test/writer/typst/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"+]+>>> typst+upright("(Łukasiewicz, Gödel, and Gödel)") italic("…–“double quotes”—‘single quotes’")
+ test/writer/typst/tripleint2.test view
@@ -0,0 +1,10 @@+<<< native+[ ESubsup (ESymbol Op "\8749") (ENumber "0") (ENumber "1")+, EIdentifier "f"+, EDelimited "(" ")" [ Right (EIdentifier "x") ]+, ESpace (1 % 9)+, ESymbol Ord "\8518"+, EIdentifier "x"+]+>>> typst+integral.triple_0^1 f lr((x)) #h(0em) ⅆ x
+ test/writer/typst/unicode.test view
@@ -0,0 +1,9 @@+<<< native+[ EIdentifier "f"+, ESymbol Rel ":"+, EIdentifier "X"+, ESymbol Rel "\8594"+, EIdentifier "Y"+]+>>> typst+f colon X arrow.r Y
+ test/writer/typst/verbar2.test view
@@ -0,0 +1,9 @@+<<< native+[ EDelimited+    "|"+    "|"+    [ Right (EFraction NormalFrac (EIdentifier "H") (EIdentifier "K"))+    ]+]+>>> typst+lr(|H / K|)
texmath.cabal view
@@ -1,12 +1,12 @@ Name:                texmath-Version:             0.12.6+Version:             0.12.7 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 and to pandoc's+  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.@@ -43,6 +43,7 @@                      test/writer/mml/*.test                      test/writer/omml/*.test                      test/writer/tex/*.test+                     test/writer/typst/*.test                      test/writer/eqn/*.test                      test/reader/mml/*.test                      test/reader/tex/*.test@@ -94,6 +95,7 @@                          Text.TeXMath.Writers.OMML,                          Text.TeXMath.Writers.Pandoc,                          Text.TeXMath.Writers.TeX,+                         Text.TeXMath.Writers.Typst,                          Text.TeXMath.Writers.Eqn,                          Text.TeXMath.Unicode.ToUnicode,                          Text.TeXMath.Unicode.ToTeX,