packages feed

typst 0.4 → 0.5

raw patch · 69 files changed

+717/−227 lines, 69 files

Files

CHANGELOG.md view
@@ -1,5 +1,26 @@ # Revision history for typst-hs +## 0.5++  * Support "as" keyword in imports (#21).+    [API change] In Typst.Syntax, the Imports type now contains+    fields for an optional "as" identifier.++  * Support version type (#21).+    [API change] Add VVersion constructor to Val, TVersion to ValType.+    Support the `version` constructor function and the `at` method (#21).++  * Parser: Ensure that `set` rule doesn't pick up `if` on next line (#23).++  * Parser: Allow multiline strings (#20).++  * Allow function applications in dictionary key construction (#19).+    [API change]:  in Typst.Syntax, the Dict constructor for Expr+    now takes type `[Spreadable (Expr, Expr)]` instead of+    `[Spreadable (Identifier, Expr)]`. This is because the key+    identifiers sometimes are not known at parse time and must+    be computed in Evaluate.+ ## 0.4    * `evaluateTypst` now returns a single Content instead of a sequence
src/Typst/Evaluate.hs view
@@ -482,8 +482,12 @@           ( \m v -> do               case v of                 Reg (k, e) -> do+                  k' <- case k of+                           Ident i -> pure i+                           _ -> do VString s <- evalExpr k+                                   pure $ Identifier s                   val <- evalExpr e-                  pure $ m OM.|> (k, val)+                  pure $ m OM.|> (k', val)                 Spr y -> do                   val <- evalExpr y                   case val of@@ -837,13 +841,15 @@           _ -> fail "Import requires a path or module or function"       case imports of         AllIdentifiers -> importModule modmap-        SomeIdentifiers idents -> do-          let addFromModule m ident =+        SomeIdentifiers pairs -> do+          let addFromModule m (ident, mbAs) =                 case M.lookup ident modmap of                   Nothing -> fail $ show ident <> " not defined in module"-                  Just v -> pure $ M.insert ident v m-          foldM addFromModule mempty idents >>= importModule-        NoIdentifiers -> addIdentifier modid (VModule modid modmap)+                  Just v -> pure $ M.insert (fromMaybe ident mbAs) v m+          foldM addFromModule mempty pairs >>= importModule+        NoIdentifiers mbAs -> do+          let ident = fromMaybe modid mbAs+          addIdentifier ident (VModule ident modmap)       pure VNone     Include e -> do       argval <- evalExpr e
src/Typst/Methods.hs view
@@ -19,7 +19,7 @@ import Data.List (intersperse, sort, sortOn) import qualified Data.Map as M import qualified Data.Map.Ordered as OM-import Data.Maybe (fromMaybe)+import Data.Maybe (fromMaybe, listToMaybe) import Data.Text (Text) import qualified Data.Text as T import qualified Data.Vector as V@@ -380,6 +380,12 @@         "term" -> pure $ VContent t         "description" -> pure $ VContent d         _ -> noMethod "TermItem" fld+    VVersion xs ->+      case fld of+        "at" -> pure $ makeFunction $ do+                  i <- nthArg 1+                  pure $ VInteger $ fromMaybe 0 $ listToMaybe $ drop i xs+        _ -> noMethod "Version" fld     VArray v -> do       let toPos n =             if n < 0
src/Typst/Module/Standard.hs view
@@ -16,7 +16,7 @@ import Data.Char (ord, chr) import Control.Applicative ((<|>)) import Control.Monad (mplus, unless)-import Control.Monad.Reader (lift)+import Control.Monad.Reader (lift, asks) import qualified Data.Aeson as Aeson import qualified Data.ByteString.Lazy as BL import qualified Data.Csv as Csv@@ -421,6 +421,11 @@              (val :: Int) <- nthArg 1              pure $ VString $ T.pack [chr val] )       ]+    ),+    ( "version",+        makeFunction $ do+          xs <- asks positional >>= mapM fromVal+          pure $ VVersion xs     ),     ( "symbol",       makeFunction $ do
src/Typst/Parse.hs view
@@ -912,7 +912,7 @@ pStr :: P Literal pStr = lexeme $ do   void $ char '"'-  String . T.pack <$> manyTill (pStrEsc <|> noneOf "\"\r\n") (char '"')+  String . T.pack <$> manyTill (pStrEsc <|> satisfy (/= '"')) (char '"')  pUnit :: P Unit pUnit =@@ -990,11 +990,7 @@   where     pEmptyDict = Dict mempty <$ sym ":"     pNonemptyDict = Dict <$> sepEndBy1 (pSpread <|> pPair) (sym ",")-    pPair = Reg <$> ((,) <$> pKey <*> try (sym ":" *> pExpr))-    pKey = pIdentifier <|> pStrKey-    pStrKey = do-      String t <- pStr-      pure $ Identifier t+    pPair = Reg <$> ((,) <$> pExpr <*> try (sym ":" *> pExpr))  pSpread :: P (Spreadable a) pSpread = try $ string ".." *> (Spr <$> pExpr)@@ -1124,7 +1120,11 @@ -- set-expr ::= 'set' expr args pSetExpr :: P Expr pSetExpr = do+  oldAllowNewlines <- stAllowNewlines <$> getState+  -- see #23 -- 'set' doesn't go with 'if' unless it's on the same line+  updateState $ \st -> st {stAllowNewlines = 0}   set <- pKeyword "set" *> (Set <$> pQualifiedIdentifier <*> pArgs)+  updateState $ \st -> st {stAllowNewlines = oldAllowNewlines}   addCondition <- option id $ pKeyword "if" *> ((\c x -> If [(c, x)]) <$> pExpr)   pure $ addCondition set @@ -1161,11 +1161,17 @@ pImportExpr = pKeyword "import" *> (Import <$> pExpr <*> pImportItems)   where     pImportItems =-      option NoIdentifiers $-        sym ":"+        (sym ":"           *> ( (AllIdentifiers <$ sym "*")-                 <|> (SomeIdentifiers <$> sepEndBy pIdentifier (sym ","))+                 <|> (SomeIdentifiers+                       <$> sepEndBy pIdentifierAs (sym ","))              )+        ) <|> (NoIdentifiers <$> pAs)+    pIdentifierAs = do+      ident <- pIdentifier+      mbAs <- pAs+      pure (ident, mbAs)+    pAs = option Nothing $ Just <$> (pKeyword "as" *> pIdentifier)  pBreakExpr :: P Expr pBreakExpr = Break <$ pKeyword "break"
src/Typst/Syntax.hs view
@@ -139,7 +139,7 @@   | FieldAccess Expr Expr   | Group Expr   | Array [Spreadable Expr]-  | Dict [Spreadable (Identifier, Expr)]+  | Dict [Spreadable (Expr, Expr)]   | Binding Bind   | Let Bind Expr   | LetFunc Identifier [Param] Expr@@ -159,6 +159,6 @@  data Imports   = AllIdentifiers-  | SomeIdentifiers [Identifier]-  | NoIdentifiers+  | SomeIdentifiers [(Identifier, Maybe Identifier)] -- Maybe is the 'as'+  | NoIdentifiers (Maybe Identifier)  -- Maybe is the 'as'   deriving (Show, Ord, Eq, Data, Typeable)
src/Typst/Types.hs view
@@ -112,6 +112,7 @@   | VSelector !Selector   | VModule Identifier (M.Map Identifier Val)   | VStyles -- just a placeholder for now+  | VVersion [Integer]   | VType !ValType   deriving (Show, Eq, Typeable) @@ -170,6 +171,7 @@   | TLabel   | TCounter   | TLocation+  | TVersion   | TType   | TAny   | ValType :|: ValType@@ -205,6 +207,7 @@     VModule {} -> TModule     VSelector {} -> TSelector     VStyles {} -> TStyles+    VVersion {} -> TVersion     VType {} -> TType  hasType :: ValType -> Val -> Bool@@ -376,6 +379,11 @@   comp (VString "integer") (VType TInteger) = Just EQ   comp (VType ty) (VString s) = Just $ compare (prettyType ty) s   comp (VString s) (VType ty)  = Just $ compare s (prettyType ty)+  comp (VVersion as) (VVersion bs)+    | length as > length bs =+       Just $ compare as (bs ++ replicate (length as - length bs) 0)+    | otherwise =+       Just $ compare (as ++ replicate (length as - length bs) 0) bs   comp _ _ = Nothing  instance Ord Val where@@ -861,6 +869,7 @@     VSymbol (Symbol t _ _) -> text t     VSelector _ -> mempty     VStyles -> mempty+    VVersion xs -> text $ T.intercalate "." (map (T.pack . show) xs)     VType ty -> text $ prettyType ty  prettyType :: ValType -> Text
test/out/compiler/array-13.out view
@@ -49,7 +49,7 @@               (BasicBind (Just (Identifier "tasks")))               (Dict                  [ Reg-                     ( Identifier "a"+                     ( Ident (Identifier "a")                      , Array                          [ Reg (Literal (Int 1))                          , Reg (Literal (Int 2))@@ -57,7 +57,7 @@                          ]                      )                  , Reg-                     ( Identifier "b"+                     ( Ident (Identifier "b")                      , Array                          [ Reg (Literal (Int 4))                          , Reg (Literal (Int 5))
test/out/compiler/closure-05.out view
@@ -53,7 +53,8 @@               (Block                  (CodeBlock                     [ Import-                        (Ident (Identifier "b")) (SomeIdentifiers [ Identifier "b" ])+                        (Ident (Identifier "b"))+                        (SomeIdentifiers [ ( Identifier "b" , Nothing ) ])                     , Ident (Identifier "b")                     ]))           , FuncCall
test/out/compiler/dict-00.out view
@@ -52,8 +52,8 @@     (Let        (BasicBind (Just (Identifier "dict")))        (Dict-          [ Reg ( Identifier "normal" , Literal (Int 1) )-          , Reg ( Identifier "spacy key" , Literal (Int 2) )+          [ Reg ( Ident (Identifier "normal") , Literal (Int 1) )+          , Reg ( Literal (String "spacy key") , Literal (Int 2) )           ])) , SoftBreak , Code
test/out/compiler/dict-01.out view
@@ -48,8 +48,8 @@           [ Let               (BasicBind (Just (Identifier "dict")))               (Dict-                 [ Reg ( Identifier "a" , Literal (Int 1) )-                 , Reg ( Identifier "b b" , Literal (Int 1) )+                 [ Reg ( Ident (Identifier "a") , Literal (Int 1) )+                 , Reg ( Literal (String "b b") , Literal (Int 1) )                  ])           , Assign               (FuncCall@@ -64,21 +64,21 @@               (FieldAccess                  (Ident (Identifier "state")) (Ident (Identifier "dict")))               (Dict-                 [ Reg ( Identifier "ok" , Literal (Boolean True) )-                 , Reg ( Identifier "err" , Literal (Boolean False) )+                 [ Reg ( Ident (Identifier "ok") , Literal (Boolean True) )+                 , Reg ( Ident (Identifier "err") , Literal (Boolean False) )                  ])           , FuncCall               (Ident (Identifier "test"))               [ NormalArg (Ident (Identifier "dict"))               , NormalArg                   (Dict-                     [ Reg ( Identifier "a" , Literal (Int 1) )-                     , Reg ( Identifier "b b" , Literal (Int 2) )+                     [ Reg ( Ident (Identifier "a") , Literal (Int 1) )+                     , Reg ( Literal (String "b b") , Literal (Int 2) )                      , Reg-                         ( Identifier "state"+                         ( Ident (Identifier "state")                          , Dict-                             [ Reg ( Identifier "ok" , Literal (Boolean True) )-                             , Reg ( Identifier "err" , Literal (Boolean False) )+                             [ Reg ( Ident (Identifier "ok") , Literal (Boolean True) )+                             , Reg ( Ident (Identifier "err") , Literal (Boolean False) )                              ]                          )                      ])
test/out/compiler/dict-03.out view
@@ -50,8 +50,8 @@               (FieldAccess                  (Ident (Identifier "at"))                  (Dict-                    [ Reg ( Identifier "a" , Literal (Int 1) )-                    , Reg ( Identifier "b" , Literal (Int 2) )+                    [ Reg ( Ident (Identifier "a") , Literal (Int 1) )+                    , Reg ( Ident (Identifier "b") , Literal (Int 2) )                     ]))               [ NormalArg (Literal (String "b"))               , KeyValArg (Identifier "default") (Literal (Int 3))@@ -69,8 +69,8 @@               (FieldAccess                  (Ident (Identifier "at"))                  (Dict-                    [ Reg ( Identifier "a" , Literal (Int 1) )-                    , Reg ( Identifier "b" , Literal (Int 2) )+                    [ Reg ( Ident (Identifier "a") , Literal (Int 1) )+                    , Reg ( Ident (Identifier "b") , Literal (Int 2) )                     ]))               [ NormalArg (Literal (String "c"))               , KeyValArg (Identifier "default") (Literal (Int 3))
test/out/compiler/dict-05.out view
@@ -46,9 +46,9 @@     (Let        (BasicBind (Just (Identifier "dict")))        (Dict-          [ Reg ( Identifier "a" , Literal (Int 3) )-          , Reg ( Identifier "c" , Literal (Int 2) )-          , Reg ( Identifier "b" , Literal (Int 1) )+          [ Reg ( Ident (Identifier "a") , Literal (Int 3) )+          , Reg ( Ident (Identifier "c") , Literal (Int 2) )+          , Reg ( Ident (Identifier "b") , Literal (Int 1) )           ])) , SoftBreak , Code@@ -154,8 +154,8 @@        [ NormalArg (Ident (Identifier "dict"))        , NormalArg            (Dict-              [ Reg ( Identifier "a" , Literal (Int 3) )-              , Reg ( Identifier "b" , Literal (Int 1) )+              [ Reg ( Ident (Identifier "a") , Literal (Int 3) )+              , Reg ( Ident (Identifier "b") , Literal (Int 1) )               ])        ]) , ParBreak
test/out/compiler/field-00.out view
@@ -46,8 +46,8 @@     (Let        (BasicBind (Just (Identifier "dict")))        (Dict-          [ Reg ( Identifier "nothing" , Literal (String "ness") )-          , Reg ( Identifier "hello" , Literal (String "world") )+          [ Reg ( Ident (Identifier "nothing") , Literal (String "ness") )+          , Reg ( Ident (Identifier "hello") , Literal (String "world") )           ])) , SoftBreak , Code
test/out/compiler/for-00.out view
@@ -61,8 +61,8 @@           , Simple (Just (Identifier "v"))           ])        (Dict-          [ Reg ( Identifier "Name" , Literal (String "Typst") )-          , Reg ( Identifier "Age" , Literal (Int 2) )+          [ Reg ( Ident (Identifier "Name") , Literal (String "Typst") )+          , Reg ( Ident (Identifier "Age") , Literal (Int 2) )           ])        (Block           (Content
test/out/compiler/for-01.out view
@@ -101,8 +101,8 @@     (For        (BasicBind (Just (Identifier "v")))        (Dict-          [ Reg ( Identifier "a" , Literal (Int 4) )-          , Reg ( Identifier "b" , Literal (Int 5) )+          [ Reg ( Ident (Identifier "a") , Literal (Int 4) )+          , Reg ( Ident (Identifier "b") , Literal (Int 5) )           ])        (Block           (CodeBlock@@ -123,8 +123,8 @@           , Simple (Just (Identifier "v"))           ])        (Dict-          [ Reg ( Identifier "a" , Literal (Int 6) )-          , Reg ( Identifier "b" , Literal (Int 7) )+          [ Reg ( Ident (Identifier "a") , Literal (Int 6) )+          , Reg ( Ident (Identifier "b") , Literal (Int 7) )           ])        (Block           (CodeBlock
test/out/compiler/import-00.out view
@@ -56,7 +56,10 @@     ( line 9 , column 2 )     (Import        (Literal (String "module.typ"))-       (SomeIdentifiers [ Identifier "fn" , Identifier "value" ]))+       (SomeIdentifiers+          [ ( Identifier "fn" , Nothing )+          , ( Identifier "value" , Nothing )+          ])) , SoftBreak , Code     "test/typ/compiler/import-00.typ"@@ -79,7 +82,8 @@     ( line 15 , column 2 )     (Import        (Literal (String "module.typ"))-       (SomeIdentifiers [ Identifier "a" , Identifier "c" ]))+       (SomeIdentifiers+          [ ( Identifier "a" , Nothing ) , ( Identifier "c" , Nothing ) ])) , Text "bye" , ParBreak ]
test/out/compiler/import-01.out view
@@ -45,7 +45,7 @@     ( line 3 , column 2 )     (Import        (Literal (String "module.typ"))-       (SomeIdentifiers [ Identifier "item" ]))+       (SomeIdentifiers [ ( Identifier "item" , Nothing ) ])) , SoftBreak , Code     "test/typ/compiler/import-01.typ"
test/out/compiler/import-02.out view
@@ -47,7 +47,7 @@     ( line 5 , column 2 )     (Import        (Ident (Identifier "enum"))-       (SomeIdentifiers [ Identifier "item" ]))+       (SomeIdentifiers [ ( Identifier "item" , Nothing ) ])) , SoftBreak , Code     "test/typ/compiler/import-02.typ"
test/out/compiler/import-03.out view
@@ -43,7 +43,7 @@ , Code     "test/typ/compiler/import-03.typ"     ( line 3 , column 2 )-    (Import (Literal (String "module.typ")) NoIdentifiers)+    (Import (Literal (String "module.typ")) (NoIdentifiers Nothing)) , SoftBreak , Code     "test/typ/compiler/import-03.typ"
test/out/compiler/import-05.out view
@@ -51,7 +51,8 @@     ( line 6 , column 2 )     (Import        (Literal (String "module.typ"))-       (SomeIdentifiers [ Identifier "a" , Identifier "c" ]))+       (SomeIdentifiers+          [ ( Identifier "a" , Nothing ) , ( Identifier "c" , Nothing ) ])) , ParBreak ] --- evaluated ---
test/out/compiler/import-06.out view
@@ -43,28 +43,29 @@ , Code     "test/typ/compiler/import-06.typ"     ( line 3 , column 2 )-    (Import (Ident (Identifier "enum")) NoIdentifiers)+    (Import (Ident (Identifier "enum")) (NoIdentifiers Nothing)) , SoftBreak , Code     "test/typ/compiler/import-06.typ"     ( line 4 , column 2 )     (Let        (BasicBind (Just (Identifier "d")))-       (Dict [ Reg ( Identifier "e" , Ident (Identifier "enum") ) ]))+       (Dict+          [ Reg ( Ident (Identifier "e") , Ident (Identifier "enum") ) ])) , SoftBreak , Code     "test/typ/compiler/import-06.typ"     ( line 5 , column 2 )     (Import        (FieldAccess (Ident (Identifier "e")) (Ident (Identifier "d")))-       NoIdentifiers)+       (NoIdentifiers Nothing)) , SoftBreak , Code     "test/typ/compiler/import-06.typ"     ( line 6 , column 2 )     (Import        (FieldAccess (Ident (Identifier "e")) (Ident (Identifier "d")))-       (SomeIdentifiers [ Identifier "item" ]))+       (SomeIdentifiers [ ( Identifier "item" , Nothing ) ])) , ParBreak , Code     "test/typ/compiler/import-06.typ"
test/out/compiler/let-16.out view
@@ -51,9 +51,9 @@           , WithKey (Identifier "x") (Just (Identifier "c"))           ])        (Dict-          [ Reg ( Identifier "a" , Literal (Int 1) )-          , Reg ( Identifier "b" , Literal (Int 2) )-          , Reg ( Identifier "x" , Literal (Int 3) )+          [ Reg ( Ident (Identifier "a") , Literal (Int 1) )+          , Reg ( Ident (Identifier "b") , Literal (Int 2) )+          , Reg ( Ident (Identifier "x") , Literal (Int 3) )           ])) , SoftBreak , Code
test/out/compiler/let-17.out view
@@ -50,9 +50,9 @@           , Sink (Just (Identifier "b"))           ])        (Dict-          [ Reg ( Identifier "a" , Literal (Int 1) )-          , Reg ( Identifier "b" , Literal (Int 2) )-          , Reg ( Identifier "c" , Literal (Int 3) )+          [ Reg ( Ident (Identifier "a") , Literal (Int 1) )+          , Reg ( Ident (Identifier "b") , Literal (Int 2) )+          , Reg ( Ident (Identifier "c") , Literal (Int 3) )           ])) , SoftBreak , Code@@ -63,8 +63,8 @@        [ NormalArg (Ident (Identifier "b"))        , NormalArg            (Dict-              [ Reg ( Identifier "b" , Literal (Int 2) )-              , Reg ( Identifier "c" , Literal (Int 3) )+              [ Reg ( Ident (Identifier "b") , Literal (Int 2) )+              , Reg ( Ident (Identifier "c") , Literal (Int 3) )               ])        ]) , ParBreak
test/out/compiler/let-18.out view
@@ -51,9 +51,9 @@           , WithKey (Identifier "c") Nothing           ])        (Dict-          [ Reg ( Identifier "a" , Literal (Int 1) )-          , Reg ( Identifier "b" , Literal (Int 2) )-          , Reg ( Identifier "c" , Literal (Int 3) )+          [ Reg ( Ident (Identifier "a") , Literal (Int 1) )+          , Reg ( Ident (Identifier "b") , Literal (Int 2) )+          , Reg ( Ident (Identifier "c") , Literal (Int 3) )           ])) , SoftBreak , Code@@ -62,7 +62,8 @@     (FuncCall        (Ident (Identifier "test"))        [ NormalArg (Ident (Identifier "b"))-       , NormalArg (Dict [ Reg ( Identifier "b" , Literal (Int 2) ) ])+       , NormalArg+           (Dict [ Reg ( Ident (Identifier "b") , Literal (Int 2) ) ])        ]) , ParBreak ]
test/out/compiler/let-19.out view
@@ -49,7 +49,7 @@           [ WithKey (Identifier "a") Nothing           , Sink (Just (Identifier "b"))           ])-       (Dict [ Reg ( Identifier "a" , Literal (Int 1) ) ]))+       (Dict [ Reg ( Ident (Identifier "a") , Literal (Int 1) ) ])) , SoftBreak , Code     "test/typ/compiler/let-19.typ"
test/out/compiler/let-21.out view
@@ -48,8 +48,8 @@        (DestructuringBind           [ Simple (Just (Identifier "a")) , Sink Nothing ])        (Dict-          [ Reg ( Identifier "a" , Literal (Int 1) )-          , Reg ( Identifier "b" , Literal (Int 2) )+          [ Reg ( Ident (Identifier "a") , Literal (Int 1) )+          , Reg ( Ident (Identifier "b") , Literal (Int 2) )           ])) , SoftBreak , Code
test/out/compiler/ops-01.out view
@@ -179,16 +179,16 @@        (Ident (Identifier "test"))        [ NormalArg            (Plus-              (Dict [ Reg ( Identifier "a" , Literal (Int 1) ) ])+              (Dict [ Reg ( Ident (Identifier "a") , Literal (Int 1) ) ])               (Dict-                 [ Reg ( Identifier "b" , Literal (Int 2) )-                 , Reg ( Identifier "c" , Literal (Int 3) )+                 [ Reg ( Ident (Identifier "b") , Literal (Int 2) )+                 , Reg ( Ident (Identifier "c") , Literal (Int 3) )                  ]))        , NormalArg            (Dict-              [ Reg ( Identifier "a" , Literal (Int 1) )-              , Reg ( Identifier "b" , Literal (Int 2) )-              , Reg ( Identifier "c" , Literal (Int 3) )+              [ Reg ( Ident (Identifier "a") , Literal (Int 1) )+              , Reg ( Ident (Identifier "b") , Literal (Int 2) )+              , Reg ( Ident (Identifier "c") , Literal (Int 3) )               ])        ]) , ParBreak
test/out/compiler/ops-08.out view
@@ -142,7 +142,8 @@        (Ident (Identifier "test"))        [ NormalArg            (Equals-              (Dict []) (Dict [ Reg ( Identifier "a" , Literal (Int 1) ) ]))+              (Dict [])+              (Dict [ Reg ( Ident (Identifier "a") , Literal (Int 1) ) ]))        , NormalArg (Literal (Boolean False))        ]) , SoftBreak@@ -155,12 +156,14 @@            (Equals               (Dict                  [ Reg-                     ( Identifier "a" , Minus (Literal (Int 2)) (Literal (Float 1.0)) )-                 , Reg ( Identifier "b" , Literal (Int 2) )+                     ( Ident (Identifier "a")+                     , Minus (Literal (Int 2)) (Literal (Float 1.0))+                     )+                 , Reg ( Ident (Identifier "b") , Literal (Int 2) )                  ])               (Dict-                 [ Reg ( Identifier "b" , Literal (Int 2) )-                 , Reg ( Identifier "a" , Literal (Int 1) )+                 [ Reg ( Ident (Identifier "b") , Literal (Int 2) )+                 , Reg ( Ident (Identifier "a") , Literal (Int 1) )                  ]))        , NormalArg (Literal (Boolean True))        ])
test/out/compiler/ops-13.out view
@@ -131,7 +131,8 @@        [ NormalArg            (InCollection               (Literal (String "key"))-              (Dict [ Reg ( Identifier "key" , Literal (String "value") ) ]))+              (Dict+                 [ Reg ( Ident (Identifier "key") , Literal (String "value") ) ]))        , NormalArg (Literal (Boolean True))        ]) , SoftBreak@@ -143,7 +144,8 @@        [ NormalArg            (InCollection               (Literal (String "value"))-              (Dict [ Reg ( Identifier "key" , Literal (String "value") ) ]))+              (Dict+                 [ Reg ( Ident (Identifier "key") , Literal (String "value") ) ]))        , NormalArg (Literal (Boolean False))        ]) , SoftBreak
test/out/compiler/show-selector-00.out view
@@ -55,12 +55,13 @@           [ KeyValArg (Identifier "radius") (Literal (Numeric 2.0 Pt))           , KeyValArg               (Identifier "outset")-              (Dict [ Reg ( Identifier "y" , Literal (Numeric 2.5 Pt) ) ])+              (Dict+                 [ Reg ( Ident (Identifier "y") , Literal (Numeric 2.5 Pt) ) ])           , KeyValArg               (Identifier "inset")               (Dict-                 [ Reg ( Identifier "x" , Literal (Numeric 3.0 Pt) )-                 , Reg ( Identifier "y" , Literal (Numeric 0.0 Pt) )+                 [ Reg ( Ident (Identifier "x") , Literal (Numeric 3.0 Pt) )+                 , Reg ( Ident (Identifier "y") , Literal (Numeric 0.0 Pt) )                  ])           , KeyValArg               (Identifier "fill")@@ -92,7 +93,7 @@               (Identifier "stroke")               (Dict                  [ Reg-                     ( Identifier "left"+                     ( Ident (Identifier "left")                      , Plus                          (Literal (Numeric 1.5 Pt))                          (FuncCall@@ -108,7 +109,8 @@        (Ident (Identifier "page"))        [ KeyValArg            (Identifier "margin")-           (Dict [ Reg ( Identifier "top" , Literal (Numeric 12.0 Pt) ) ])+           (Dict+              [ Reg ( Ident (Identifier "top") , Literal (Numeric 12.0 Pt) ) ])        ]) , SoftBreak , Code
test/out/compiler/spread-03.out view
@@ -97,8 +97,8 @@           [ Let               (BasicBind (Just (Identifier "more")))               (Dict-                 [ Reg ( Identifier "c" , Literal (Int 3) )-                 , Reg ( Identifier "d" , Literal (Int 4) )+                 [ Reg ( Ident (Identifier "c") , Literal (Int 3) )+                 , Reg ( Ident (Identifier "d") , Literal (Int 4) )                  ])           , LetFunc               (Identifier "tostr")
test/out/compiler/string-13.out view
@@ -70,10 +70,10 @@               ])        , NormalArg            (Dict-              [ Reg ( Identifier "start" , Literal (Int 4) )-              , Reg ( Identifier "end" , Literal (Int 8) )-              , Reg ( Identifier "text" , Literal (String "time") )-              , Reg ( Identifier "captures" , Array [] )+              [ Reg ( Ident (Identifier "start") , Literal (Int 4) )+              , Reg ( Ident (Identifier "end") , Literal (Int 8) )+              , Reg ( Ident (Identifier "text") , Literal (String "time") )+              , Reg ( Ident (Identifier "captures") , Array [] )               ])        ]) , ParBreak@@ -105,17 +105,17 @@            (Array               [ Reg                   (Dict-                     [ Reg ( Identifier "start" , Literal (Int 0) )-                     , Reg ( Identifier "end" , Literal (Int 3) )-                     , Reg ( Identifier "text" , Literal (String "Day") )-                     , Reg ( Identifier "captures" , Array [] )+                     [ Reg ( Ident (Identifier "start") , Literal (Int 0) )+                     , Reg ( Ident (Identifier "end") , Literal (Int 3) )+                     , Reg ( Ident (Identifier "text") , Literal (String "Day") )+                     , Reg ( Ident (Identifier "captures") , Array [] )                      ])               , Reg                   (Dict-                     [ Reg ( Identifier "start" , Literal (Int 7) )-                     , Reg ( Identifier "end" , Literal (Int 10) )-                     , Reg ( Identifier "text" , Literal (String "Day") )-                     , Reg ( Identifier "captures" , Array [] )+                     [ Reg ( Ident (Identifier "start") , Literal (Int 7) )+                     , Reg ( Ident (Identifier "end") , Literal (Int 10) )+                     , Reg ( Ident (Identifier "text") , Literal (String "Day") )+                     , Reg ( Ident (Identifier "captures") , Array [] )                      ])               ])        ])
test/out/compute/data-08.out view
@@ -132,8 +132,8 @@               (Ident (Identifier "inline_table")) (Ident (Identifier "data")))        , NormalArg            (Dict-              [ Reg ( Identifier "first" , Literal (String "amazing") )-              , Reg ( Identifier "second" , Literal (String "greater") )+              [ Reg ( Literal (String "first") , Literal (String "amazing") )+              , Reg ( Literal (String "second") , Literal (String "greater") )               ])        ]) , SoftBreak
test/out/compute/data-10.out view
@@ -117,8 +117,8 @@               (Ident (Identifier "mapping")) (Ident (Identifier "data")))        , NormalArg            (Dict-              [ Reg ( Identifier "1" , Literal (String "one") )-              , Reg ( Identifier "2" , Literal (String "two") )+              [ Reg ( Literal (String "1") , Literal (String "one") )+              , Reg ( Literal (String "2") , Literal (String "two") )               ])        ]) , SoftBreak
test/out/compute/data-12.out view
@@ -59,42 +59,47 @@            (Array               [ Reg                   (Dict-                     [ Reg ( Identifier "tag" , Literal (String "data") )-                     , Reg ( Identifier "attrs" , Dict [] )+                     [ Reg ( Ident (Identifier "tag") , Literal (String "data") )+                     , Reg ( Ident (Identifier "attrs") , Dict [] )                      , Reg-                         ( Identifier "children"+                         ( Ident (Identifier "children")                          , Array                              [ Reg (Literal (String "\n  "))                              , Reg                                  (Dict-                                    [ Reg ( Identifier "tag" , Literal (String "hello") )+                                    [ Reg ( Ident (Identifier "tag") , Literal (String "hello") )                                     , Reg-                                        ( Identifier "attrs"-                                        , Dict [ Reg ( Identifier "name" , Literal (String "hi") ) ]+                                        ( Ident (Identifier "attrs")+                                        , Dict+                                            [ Reg+                                                ( Ident (Identifier "name")+                                                , Literal (String "hi")+                                                )+                                            ]                                         )                                     , Reg-                                        ( Identifier "children"+                                        ( Ident (Identifier "children")                                         , Array [ Reg (Literal (String "1")) ]                                         )                                     ])                              , Reg (Literal (String "\n  "))                              , Reg                                  (Dict-                                    [ Reg ( Identifier "tag" , Literal (String "data") )-                                    , Reg ( Identifier "attrs" , Dict [] )+                                    [ Reg ( Ident (Identifier "tag") , Literal (String "data") )+                                    , Reg ( Ident (Identifier "attrs") , Dict [] )                                     , Reg-                                        ( Identifier "children"+                                        ( Ident (Identifier "children")                                         , Array                                             [ Reg (Literal (String "\n    "))                                             , Reg                                                 (Dict                                                    [ Reg-                                                       ( Identifier "tag"+                                                       ( Ident (Identifier "tag")                                                        , Literal (String "hello")                                                        )-                                                   , Reg ( Identifier "attrs" , Dict [] )+                                                   , Reg ( Ident (Identifier "attrs") , Dict [] )                                                    , Reg-                                                       ( Identifier "children"+                                                       ( Ident (Identifier "children")                                                        , Array [ Reg (Literal (String "World")) ]                                                        )                                                    ])@@ -102,12 +107,12 @@                                             , Reg                                                 (Dict                                                    [ Reg-                                                       ( Identifier "tag"+                                                       ( Ident (Identifier "tag")                                                        , Literal (String "hello")                                                        )-                                                   , Reg ( Identifier "attrs" , Dict [] )+                                                   , Reg ( Ident (Identifier "attrs") , Dict [] )                                                    , Reg-                                                       ( Identifier "children"+                                                       ( Ident (Identifier "children")                                                        , Array [ Reg (Literal (String "World")) ]                                                        )                                                    ])
test/out/layout/page-03.out view
@@ -73,8 +73,8 @@        , KeyValArg            (Identifier "margin")            (Dict-              [ Reg ( Identifier "top" , Literal (Numeric 10.0 Pt) )-              , Reg ( Identifier "rest" , Literal Auto )+              [ Reg ( Ident (Identifier "top") , Literal (Numeric 10.0 Pt) )+              , Reg ( Ident (Identifier "rest") , Literal Auto )               ])        , BlockArg [ Text "Hi" ]        ])
test/out/layout/page-margin-01.out view
@@ -59,7 +59,8 @@                  (Ident (Identifier "page"))                  [ KeyValArg                      (Identifier "margin")-                     (Dict [ Reg ( Identifier "left" , Literal (Numeric 0.0 Pt) ) ])+                     (Dict+                        [ Reg ( Ident (Identifier "left") , Literal (Numeric 0.0 Pt) ) ])                  ])           , Space           , Code@@ -84,7 +85,8 @@                  (Ident (Identifier "page"))                  [ KeyValArg                      (Identifier "margin")-                     (Dict [ Reg ( Identifier "right" , Literal (Numeric 0.0 Pt) ) ])+                     (Dict+                        [ Reg ( Ident (Identifier "right") , Literal (Numeric 0.0 Pt) ) ])                  ])           , Space           , Code@@ -109,7 +111,8 @@                  (Ident (Identifier "page"))                  [ KeyValArg                      (Identifier "margin")-                     (Dict [ Reg ( Identifier "top" , Literal (Numeric 0.0 Pt) ) ])+                     (Dict+                        [ Reg ( Ident (Identifier "top") , Literal (Numeric 0.0 Pt) ) ])                  ])           , Space           , Code@@ -132,7 +135,8 @@                  (Ident (Identifier "page"))                  [ KeyValArg                      (Identifier "margin")-                     (Dict [ Reg ( Identifier "bottom" , Literal (Numeric 0.0 Pt) ) ])+                     (Dict+                        [ Reg ( Ident (Identifier "bottom") , Literal (Numeric 0.0 Pt) ) ])                  ])           , Space           , Code@@ -159,8 +163,8 @@                  [ KeyValArg                      (Identifier "margin")                      (Dict-                        [ Reg ( Identifier "rest" , Literal (Numeric 0.0 Pt) )-                        , Reg ( Identifier "left" , Literal (Numeric 20.0 Pt) )+                        [ Reg ( Ident (Identifier "rest") , Literal (Numeric 0.0 Pt) )+                        , Reg ( Ident (Identifier "left") , Literal (Numeric 20.0 Pt) )                         ])                  ])           , Space
test/out/layout/page-marginals-00.out view
@@ -48,8 +48,8 @@        , KeyValArg            (Identifier "margin")            (Dict-              [ Reg ( Identifier "x" , Literal (Numeric 15.0 Pt) )-              , Reg ( Identifier "y" , Literal (Numeric 30.0 Pt) )+              [ Reg ( Ident (Identifier "x") , Literal (Numeric 15.0 Pt) )+              , Reg ( Ident (Identifier "y") , Literal (Numeric 30.0 Pt) )               ])        , KeyValArg            (Identifier "header")@@ -344,8 +344,8 @@        , KeyValArg            (Identifier "margin")            (Dict-              [ Reg ( Identifier "top" , Literal (Numeric 15.0 Pt) )-              , Reg ( Identifier "bottom" , Literal (Numeric 25.0 Pt) )+              [ Reg ( Ident (Identifier "top") , Literal (Numeric 15.0 Pt) )+              , Reg ( Ident (Identifier "bottom") , Literal (Numeric 25.0 Pt) )               ])        ]) , SoftBreak
test/out/layout/par-justify-cjk-03.out view
@@ -52,7 +52,8 @@            (Plus (Literal (Numeric 170.0 Pt)) (Literal (Numeric 10.0 Pt)))        , KeyValArg            (Identifier "margin")-           (Dict [ Reg ( Identifier "x" , Literal (Numeric 5.0 Pt) ) ])+           (Dict+              [ Reg ( Ident (Identifier "x") , Literal (Numeric 5.0 Pt) ) ])        ]) , SoftBreak , Code
test/out/meta/counter-page-00.out view
@@ -50,8 +50,8 @@        , KeyValArg            (Identifier "margin")            (Dict-              [ Reg ( Identifier "bottom" , Literal (Numeric 20.0 Pt) )-              , Reg ( Identifier "rest" , Literal (Numeric 10.0 Pt) )+              [ Reg ( Ident (Identifier "bottom") , Literal (Numeric 20.0 Pt) )+              , Reg ( Ident (Identifier "rest") , Literal (Numeric 10.0 Pt) )               ])        ]) , SoftBreak
@@ -47,9 +47,9 @@        (Ident (Identifier "link"))        [ NormalArg            (Dict-              [ Reg ( Identifier "page" , Literal (Int 1) )-              , Reg ( Identifier "x" , Literal (Numeric 10.0 Pt) )-              , Reg ( Identifier "y" , Literal (Numeric 20.0 Pt) )+              [ Reg ( Ident (Identifier "page") , Literal (Int 1) )+              , Reg ( Ident (Identifier "x") , Literal (Numeric 10.0 Pt) )+              , Reg ( Ident (Identifier "y") , Literal (Numeric 20.0 Pt) )               ])        , BlockArg            [ Text "Back"
test/out/meta/query-before-after-00.out view
@@ -49,8 +49,8 @@        , KeyValArg            (Identifier "margin")            (Dict-              [ Reg ( Identifier "bottom" , Literal (Numeric 1.0 Cm) )-              , Reg ( Identifier "rest" , Literal (Numeric 0.5 Cm) )+              [ Reg ( Ident (Identifier "bottom") , Literal (Numeric 1.0 Cm) )+              , Reg ( Ident (Identifier "rest") , Literal (Numeric 0.5 Cm) )               ])        ]) , ParBreak
test/out/meta/query-before-after-01.out view
@@ -49,8 +49,8 @@        , KeyValArg            (Identifier "margin")            (Dict-              [ Reg ( Identifier "bottom" , Literal (Numeric 1.0 Cm) )-              , Reg ( Identifier "rest" , Literal (Numeric 0.5 Cm) )+              [ Reg ( Ident (Identifier "bottom") , Literal (Numeric 1.0 Cm) )+              , Reg ( Ident (Identifier "rest") , Literal (Numeric 0.5 Cm) )               ])        ]) , ParBreak
test/out/meta/query-figure-00.out view
@@ -49,8 +49,8 @@        , KeyValArg            (Identifier "margin")            (Dict-              [ Reg ( Identifier "bottom" , Literal (Numeric 1.0 Cm) )-              , Reg ( Identifier "rest" , Literal (Numeric 0.5 Cm) )+              [ Reg ( Ident (Identifier "bottom") , Literal (Numeric 1.0 Cm) )+              , Reg ( Ident (Identifier "rest") , Literal (Numeric 0.5 Cm) )               ])        ]) , ParBreak
test/out/meta/query-header-00.out view
@@ -48,8 +48,8 @@        , KeyValArg            (Identifier "margin")            (Dict-              [ Reg ( Identifier "y" , Literal (Numeric 1.0 Cm) )-              , Reg ( Identifier "x" , Literal (Numeric 0.5 Cm) )+              [ Reg ( Ident (Identifier "y") , Literal (Numeric 1.0 Cm) )+              , Reg ( Ident (Identifier "x") , Literal (Numeric 0.5 Cm) )               ])        , KeyValArg            (Identifier "header")
+ test/out/regression/issue19.out view
@@ -0,0 +1,89 @@+--- parse tree ---+[ Code+    "test/typ/regression/issue19.typ"+    ( line 1 , column 2 )+    (Let+       (BasicBind (Just (Identifier "test")))+       (FuncExpr+          [ NormalParam (Identifier "x") , NormalParam (Identifier "y") ]+          (Block+             (CodeBlock+                [ If+                    [ ( Equals (Ident (Identifier "x")) (Ident (Identifier "y"))+                      , Block (Content [ Text "\9989" ])+                      )+                    , ( Literal (Boolean True)+                      , Block+                          (Content+                             [ Text "\10060"+                             , Text "("+                             , Code+                                 "test/typ/regression/issue19.typ"+                                 ( line 1 , column 47 )+                                 (FuncCall+                                    (Ident (Identifier "repr"))+                                    [ NormalArg (Ident (Identifier "x")) ])+                             , Space+                             , Text "/"+                             , Text "="+                             , Space+                             , Code+                                 "test/typ/regression/issue19.typ"+                                 ( line 1 , column 59 )+                                 (FuncCall+                                    (Ident (Identifier "repr"))+                                    [ NormalArg (Ident (Identifier "y")) ])+                             , Text ")"+                             ])+                      )+                    ]+                ]))))+, SoftBreak+, Code+    "test/typ/regression/issue19.typ"+    ( line 2 , column 2 )+    (Let+       (BasicBind (Just (Identifier "nums")))+       (Array+          [ Reg (Literal (Int 1))+          , Reg (Literal None)+          , Reg (Literal (Int 2))+          ]))+, SoftBreak+, Code+    "test/typ/regression/issue19.typ"+    ( line 3 , column 2 )+    (FuncCall+       (FieldAccess+          (Ident (Identifier "map")) (Ident (Identifier "nums")))+       [ NormalArg+           (FuncExpr+              [ NormalParam (Identifier "num") ]+              (Block+                 (CodeBlock+                    [ If+                        [ ( Equals (Ident (Identifier "num")) (Literal None)+                          , Block (CodeBlock [ Return (Just (Literal (Int 1))) ])+                          )+                        ]+                    , Return+                        (Just+                           (Dict+                              [ Reg+                                  ( FuncCall+                                      (Ident (Identifier "str"))+                                      [ NormalArg (Ident (Identifier "num")) ]+                                  , Literal (Int 1)+                                  )+                              ]))+                    ])))+       ])+, ParBreak+]+--- evaluated ---+document(body: { text(body: [+]), +                 text(body: [+]), +                 text(body: [((1: 1), 1, (2: 1))]), +                 parbreak() })
+ test/out/regression/issue20.out view
@@ -0,0 +1,63 @@+--- parse tree ---+[ Code+    "test/typ/regression/issue20.typ"+    ( line 1 , column 2 )+    (Let+       (BasicBind (Just (Identifier "test")))+       (FuncExpr+          [ NormalParam (Identifier "x") , NormalParam (Identifier "y") ]+          (Block+             (CodeBlock+                [ If+                    [ ( Equals (Ident (Identifier "x")) (Ident (Identifier "y"))+                      , Block (Content [ Text "\9989" ])+                      )+                    , ( Literal (Boolean True)+                      , Block+                          (Content+                             [ Text "\10060"+                             , Text "("+                             , Code+                                 "test/typ/regression/issue20.typ"+                                 ( line 1 , column 47 )+                                 (FuncCall+                                    (Ident (Identifier "repr"))+                                    [ NormalArg (Ident (Identifier "x")) ])+                             , Space+                             , Text "/"+                             , Text "="+                             , Space+                             , Code+                                 "test/typ/regression/issue20.typ"+                                 ( line 1 , column 59 )+                                 (FuncCall+                                    (Ident (Identifier "repr"))+                                    [ NormalArg (Ident (Identifier "y")) ])+                             , Text ")"+                             ])+                      )+                    ]+                ]))))+, SoftBreak+, Code+    "test/typ/regression/issue20.typ"+    ( line 2 , column 2 )+    (Let+       (BasicBind (Just (Identifier "a")))+       (Literal (String "\nThis is a\nmultiline string\n")))+, SoftBreak+, Code+    "test/typ/regression/issue20.typ"+    ( line 6 , column 2 )+    (FuncCall+       (FieldAccess (Ident (Identifier "len")) (Ident (Identifier "a")))+       [])+, ParBreak+]+--- evaluated ---+document(body: { text(body: [+]), +                 text(body: [+]), +                 text(body: [28]), +                 parbreak() })
+ test/out/regression/issue21.out view
@@ -0,0 +1,68 @@+--- parse tree ---+[ Code+    "test/typ/regression/issue21.typ"+    ( line 1 , column 2 )+    (Let+       (BasicBind (Just (Identifier "test")))+       (FuncExpr+          [ NormalParam (Identifier "x") , NormalParam (Identifier "y") ]+          (Block+             (CodeBlock+                [ If+                    [ ( Equals (Ident (Identifier "x")) (Ident (Identifier "y"))+                      , Block (Content [ Text "\9989" ])+                      )+                    , ( Literal (Boolean True)+                      , Block+                          (Content+                             [ Text "\10060"+                             , Text "("+                             , Code+                                 "test/typ/regression/issue21.typ"+                                 ( line 1 , column 47 )+                                 (FuncCall+                                    (Ident (Identifier "repr"))+                                    [ NormalArg (Ident (Identifier "x")) ])+                             , Space+                             , Text "/"+                             , Text "="+                             , Space+                             , Code+                                 "test/typ/regression/issue21.typ"+                                 ( line 1 , column 59 )+                                 (FuncCall+                                    (Ident (Identifier "repr"))+                                    [ NormalArg (Ident (Identifier "y")) ])+                             , Text ")"+                             ])+                      )+                    ]+                ]))))+, SoftBreak+, Code+    "test/typ/regression/issue21.typ"+    ( line 2 , column 2 )+    (FuncCall+       (Ident (Identifier "version"))+       [ NormalArg (Literal (Int 1)) , NormalArg (Literal (Int 2)) ])+, SoftBreak+, Code+    "test/typ/regression/issue21.typ"+    ( line 3 , column 2 )+    (FuncCall+       (FieldAccess+          (Ident (Identifier "at"))+          (FuncCall+             (Ident (Identifier "version"))+             [ NormalArg (Literal (Int 1)) , NormalArg (Literal (Int 2)) ]))+       [ NormalArg (Literal (Int 3)) ])+, ParBreak+]+--- evaluated ---+document(body: { text(body: [+]), +                 text(body: [1.2]), +                 text(body: [+]), +                 text(body: [0]), +                 parbreak() })
+ test/out/regression/issue21b.out view
@@ -0,0 +1,83 @@+--- parse tree ---+[ Code+    "test/typ/regression/issue21b.typ"+    ( line 1 , column 2 )+    (Let+       (BasicBind (Just (Identifier "test")))+       (FuncExpr+          [ NormalParam (Identifier "x") , NormalParam (Identifier "y") ]+          (Block+             (CodeBlock+                [ If+                    [ ( Equals (Ident (Identifier "x")) (Ident (Identifier "y"))+                      , Block (Content [ Text "\9989" ])+                      )+                    , ( Literal (Boolean True)+                      , Block+                          (Content+                             [ Text "\10060"+                             , Text "("+                             , Code+                                 "test/typ/regression/issue21b.typ"+                                 ( line 1 , column 47 )+                                 (FuncCall+                                    (Ident (Identifier "repr"))+                                    [ NormalArg (Ident (Identifier "x")) ])+                             , Space+                             , Text "/"+                             , Text "="+                             , Space+                             , Code+                                 "test/typ/regression/issue21b.typ"+                                 ( line 1 , column 59 )+                                 (FuncCall+                                    (Ident (Identifier "repr"))+                                    [ NormalArg (Ident (Identifier "y")) ])+                             , Text ")"+                             ])+                      )+                    ]+                ]))))+, SoftBreak+, Code+    "test/typ/regression/issue21b.typ"+    ( line 2 , column 2 )+    (Import+       (Literal (String "issue19.typ"))+       (NoIdentifiers (Just (Identifier "zeke"))))+, SoftBreak+, Code+    "test/typ/regression/issue21b.typ"+    ( line 3 , column 2 )+    (FieldAccess+       (Ident (Identifier "nums")) (Ident (Identifier "zeke")))+, SoftBreak+, Code+    "test/typ/regression/issue21b.typ"+    ( line 4 , column 2 )+    (Import+       (Literal (String "issue20.typ"))+       (SomeIdentifiers+          [ ( Identifier "a" , Just (Identifier "multiline") ) ]))+, SoftBreak+, Code+    "test/typ/regression/issue21b.typ"+    ( line 5 , column 2 )+    (Ident (Identifier "multiline"))+, ParBreak+]+--- evaluated ---+document(body: { text(body: [+]), +                 text(body: [+]), +                 text(body: [(1, none, 2)]), +                 text(body: [+]), +                 text(body: [+]), +                 text(body: [+This is a+multiline string+]), +                 parbreak() })
+ test/out/regression/issue23.out view
@@ -0,0 +1,77 @@+--- parse tree ---+[ Code+    "test/typ/regression/issue23.typ"+    ( line 1 , column 2 )+    (Let+       (BasicBind (Just (Identifier "test")))+       (FuncExpr+          [ NormalParam (Identifier "x") , NormalParam (Identifier "y") ]+          (Block+             (CodeBlock+                [ If+                    [ ( Equals (Ident (Identifier "x")) (Ident (Identifier "y"))+                      , Block (Content [ Text "\9989" ])+                      )+                    , ( Literal (Boolean True)+                      , Block+                          (Content+                             [ Text "\10060"+                             , Text "("+                             , Code+                                 "test/typ/regression/issue23.typ"+                                 ( line 1 , column 47 )+                                 (FuncCall+                                    (Ident (Identifier "repr"))+                                    [ NormalArg (Ident (Identifier "x")) ])+                             , Space+                             , Text "/"+                             , Text "="+                             , Space+                             , Code+                                 "test/typ/regression/issue23.typ"+                                 ( line 1 , column 59 )+                                 (FuncCall+                                    (Ident (Identifier "repr"))+                                    [ NormalArg (Ident (Identifier "y")) ])+                             , Text ")"+                             ])+                      )+                    ]+                ]))))+, SoftBreak+, Code+    "test/typ/regression/issue23.typ"+    ( line 2 , column 2 )+    (LetFunc+       (Identifier "fn")+       []+       (Block+          (CodeBlock+             [ Set+                 (Ident (Identifier "text"))+                 [ KeyValArg (Identifier "fill") (Ident (Identifier "red")) ]+             , If+                 [ ( Literal (Boolean True)+                   , Block (Content [ SoftBreak , Text "test" , ParBreak ])+                   )+                 , ( Literal (Boolean True)+                   , Block (Content [ SoftBreak , Text "test2" , ParBreak ])+                   )+                 ]+             ])))+, ParBreak+, Code+    "test/typ/regression/issue23.typ"+    ( line 11 , column 2 )+    (FuncCall (Ident (Identifier "fn")) [])+, ParBreak+]+--- evaluated ---+document(body: { text(body: [+]), +                 parbreak(), +                 text(body: [+test], +                      fill: rgb(100%,25%,21%,100%)), +                 parbreak(), +                 parbreak() })
test/out/regression/issue3.out view
@@ -46,10 +46,10 @@        (BasicBind (Just (Identifier "alpha")))        (Dict           [ Reg-              ( Identifier "named"+              ( Ident (Identifier "named")               , Dict-                  [ Reg ( Identifier "a" , Literal (Int 1) )-                  , Reg ( Identifier "b" , Literal (Int 2) )+                  [ Reg ( Ident (Identifier "a") , Literal (Int 1) )+                  , Reg ( Ident (Identifier "b") , Literal (Int 2) )                   ]               )           ]))@@ -61,7 +61,7 @@        [ Spr            (FieldAccess               (Ident (Identifier "named")) (Ident (Identifier "alpha")))-       , Reg ( Identifier "c" , Literal (Int 3) )+       , Reg ( Ident (Identifier "c") , Literal (Int 3) )        ]) , ParBreak ]
test/out/text/features-07.out view
@@ -63,7 +63,7 @@        (Ident (Identifier "text"))        [ KeyValArg            (Identifier "features")-           (Dict [ Reg ( Identifier "liga" , Literal (Int 0) ) ])+           (Dict [ Reg ( Ident (Identifier "liga") , Literal (Int 0) ) ])        , BlockArg [ Text "No" , Space , Text "fi" ]        ]) , ParBreak
test/out/text/raw-code-04.out view
@@ -61,8 +61,8 @@        [ KeyValArg            (Identifier "inset")            (Dict-              [ Reg ( Identifier "x" , Literal (Numeric 4.0 Pt) )-              , Reg ( Identifier "y" , Literal (Numeric 5.0 Pt) )+              [ Reg ( Ident (Identifier "x") , Literal (Numeric 4.0 Pt) )+              , Reg ( Ident (Identifier "y") , Literal (Numeric 5.0 Pt) )               ])        , KeyValArg (Identifier "radius") (Literal (Numeric 4.0 Pt))        , KeyValArg
test/out/visualize/shape-ellipse-01.out view
@@ -173,8 +173,8 @@               , KeyValArg                   (Identifier "outset")                   (Dict-                     [ Reg ( Identifier "top" , Literal (Numeric 3.0 Pt) )-                     , Reg ( Identifier "rest" , Literal (Numeric 5.5 Pt) )+                     [ Reg ( Ident (Identifier "top") , Literal (Numeric 3.0 Pt) )+                     , Reg ( Ident (Identifier "rest") , Literal (Numeric 5.5 Pt) )                      ])               ])        ])
test/out/visualize/shape-fill-stroke-02.out view
@@ -62,10 +62,10 @@        [ KeyValArg            (Identifier "stroke")            (Dict-              [ Reg ( Identifier "left" , Ident (Identifier "red") )-              , Reg ( Identifier "top" , Ident (Identifier "yellow") )-              , Reg ( Identifier "right" , Ident (Identifier "green") )-              , Reg ( Identifier "bottom" , Ident (Identifier "blue") )+              [ Reg ( Ident (Identifier "left") , Ident (Identifier "red") )+              , Reg ( Ident (Identifier "top") , Ident (Identifier "yellow") )+              , Reg ( Ident (Identifier "right") , Ident (Identifier "green") )+              , Reg ( Ident (Identifier "bottom") , Ident (Identifier "blue") )               ])        , KeyValArg (Identifier "radius") (Literal (Numeric 100.0 Percent))        , NormalArg
test/out/visualize/shape-rect-01.out view
@@ -191,8 +191,8 @@               , KeyValArg                   (Identifier "radius")                   (Dict-                     [ Reg ( Identifier "left" , Literal (Numeric 10.0 Pt) )-                     , Reg ( Identifier "right" , Literal (Numeric 5.0 Pt) )+                     [ Reg ( Ident (Identifier "left") , Literal (Numeric 10.0 Pt) )+                     , Reg ( Ident (Identifier "right") , Literal (Numeric 5.0 Pt) )                      ])               ])        , NormalArg@@ -202,10 +202,12 @@               , KeyValArg                   (Identifier "radius")                   (Dict-                     [ Reg ( Identifier "top-left" , Literal (Numeric 2.0 Pt) )-                     , Reg ( Identifier "top-right" , Literal (Numeric 5.0 Pt) )-                     , Reg ( Identifier "bottom-right" , Literal (Numeric 8.0 Pt) )-                     , Reg ( Identifier "bottom-left" , Literal (Numeric 11.0 Pt) )+                     [ Reg ( Ident (Identifier "top-left") , Literal (Numeric 2.0 Pt) )+                     , Reg ( Ident (Identifier "top-right") , Literal (Numeric 5.0 Pt) )+                     , Reg+                         ( Ident (Identifier "bottom-right") , Literal (Numeric 8.0 Pt) )+                     , Reg+                         ( Ident (Identifier "bottom-left") , Literal (Numeric 11.0 Pt) )                      ])               ])        ])@@ -218,7 +220,8 @@        (Ident (Identifier "rect"))        [ KeyValArg            (Identifier "stroke")-           (Dict [ Reg ( Identifier "right" , Ident (Identifier "red") ) ])+           (Dict+              [ Reg ( Ident (Identifier "right") , Ident (Identifier "red") ) ])        ]) , SoftBreak , Code@@ -231,8 +234,8 @@        , KeyValArg            (Identifier "stroke")            (Dict-              [ Reg ( Identifier "x" , Literal (Numeric 5.0 Pt) )-              , Reg ( Identifier "y" , Literal (Numeric 1.0 Pt) )+              [ Reg ( Ident (Identifier "x") , Literal (Numeric 5.0 Pt) )+              , Reg ( Ident (Identifier "y") , Literal (Numeric 1.0 Pt) )               ])        ]) , ParBreak
test/out/visualize/stroke-00.out view
@@ -96,9 +96,9 @@        , KeyValArg            (Identifier "stroke")            (Dict-              [ Reg ( Identifier "paint" , Ident (Identifier "red") )-              , Reg ( Identifier "thickness" , Literal (Numeric 1.0 Pt) )-              , Reg ( Identifier "dash" , Literal (String "dashed") )+              [ Reg ( Ident (Identifier "paint") , Ident (Identifier "red") )+              , Reg ( Ident (Identifier "thickness") , Literal (Numeric 1.0 Pt) )+              , Reg ( Ident (Identifier "dash") , Literal (String "dashed") )               ])        ]) , SoftBreak@@ -117,9 +117,9 @@        , KeyValArg            (Identifier "stroke")            (Dict-              [ Reg ( Identifier "paint" , Ident (Identifier "red") )-              , Reg ( Identifier "thickness" , Literal (Numeric 4.0 Pt) )-              , Reg ( Identifier "cap" , Literal (String "round") )+              [ Reg ( Ident (Identifier "paint") , Ident (Identifier "red") )+              , Reg ( Ident (Identifier "thickness") , Literal (Numeric 4.0 Pt) )+              , Reg ( Ident (Identifier "cap") , Literal (String "round") )               ])        ]) , ParBreak
test/out/visualize/stroke-01.out view
@@ -48,10 +48,11 @@        [ KeyValArg            (Identifier "stroke")            (Dict-              [ Reg ( Identifier "paint" , Ident (Identifier "red") )-              , Reg ( Identifier "thickness" , Literal (Numeric 1.0 Pt) )-              , Reg ( Identifier "cap" , Literal (String "butt") )-              , Reg ( Identifier "dash" , Literal (String "dash-dotted") )+              [ Reg ( Ident (Identifier "paint") , Ident (Identifier "red") )+              , Reg ( Ident (Identifier "thickness") , Literal (Numeric 1.0 Pt) )+              , Reg ( Ident (Identifier "cap") , Literal (String "butt") )+              , Reg+                  ( Ident (Identifier "dash") , Literal (String "dash-dotted") )               ])        ]) , SoftBreak@@ -91,7 +92,7 @@        [ KeyValArg (Identifier "length") (Literal (Numeric 60.0 Pt))        , KeyValArg            (Identifier "stroke")-           (Dict [ Reg ( Identifier "dash" , Literal None ) ])+           (Dict [ Reg ( Ident (Identifier "dash") , Literal None ) ])        ]) , ParBreak ]
test/out/visualize/stroke-02.out view
@@ -66,12 +66,12 @@        , KeyValArg            (Identifier "stroke")            (Dict-              [ Reg ( Identifier "rest" , Ident (Identifier "red") )+              [ Reg ( Ident (Identifier "rest") , Ident (Identifier "red") )               , Reg-                  ( Identifier "top"+                  ( Ident (Identifier "top")                   , Dict-                      [ Reg ( Identifier "paint" , Ident (Identifier "blue") )-                      , Reg ( Identifier "dash" , Literal (String "dashed") )+                      [ Reg ( Ident (Identifier "paint") , Ident (Identifier "blue") )+                      , Reg ( Ident (Identifier "dash") , Literal (String "dashed") )                       ]                   )               ])@@ -93,8 +93,8 @@        , KeyValArg            (Identifier "stroke")            (Dict-              [ Reg ( Identifier "thickness" , Literal (Numeric 5.0 Pt) )-              , Reg ( Identifier "join" , Literal (String "round") )+              [ Reg ( Ident (Identifier "thickness") , Literal (Numeric 5.0 Pt) )+              , Reg ( Ident (Identifier "join") , Literal (String "round") )               ])        ]) , ParBreak
test/out/visualize/stroke-03.out view
@@ -49,10 +49,10 @@        , KeyValArg            (Identifier "stroke")            (Dict-              [ Reg ( Identifier "paint" , Ident (Identifier "red") )-              , Reg ( Identifier "thickness" , Literal (Numeric 1.0 Pt) )+              [ Reg ( Ident (Identifier "paint") , Ident (Identifier "red") )+              , Reg ( Ident (Identifier "thickness") , Literal (Numeric 1.0 Pt) )               , Reg-                  ( Identifier "dash"+                  ( Ident (Identifier "dash")                   , Array                       [ Reg (Literal (String "dot")) , Reg (Literal (Numeric 1.0 Pt)) ]                   )@@ -74,10 +74,10 @@        , KeyValArg            (Identifier "stroke")            (Dict-              [ Reg ( Identifier "paint" , Ident (Identifier "red") )-              , Reg ( Identifier "thickness" , Literal (Numeric 1.0 Pt) )+              [ Reg ( Ident (Identifier "paint") , Ident (Identifier "red") )+              , Reg ( Ident (Identifier "thickness") , Literal (Numeric 1.0 Pt) )               , Reg-                  ( Identifier "dash"+                  ( Ident (Identifier "dash")                   , Array                       [ Reg (Literal (String "dot"))                       , Reg (Literal (Numeric 1.0 Pt))@@ -103,13 +103,13 @@        , KeyValArg            (Identifier "stroke")            (Dict-              [ Reg ( Identifier "paint" , Ident (Identifier "red") )-              , Reg ( Identifier "thickness" , Literal (Numeric 1.0 Pt) )+              [ Reg ( Ident (Identifier "paint") , Ident (Identifier "red") )+              , Reg ( Ident (Identifier "thickness") , Literal (Numeric 1.0 Pt) )               , Reg-                  ( Identifier "dash"+                  ( Ident (Identifier "dash")                   , Dict                       [ Reg-                          ( Identifier "array"+                          ( Ident (Identifier "array")                           , Array                               [ Reg (Literal (String "dot"))                               , Reg (Literal (Numeric 1.0 Pt))@@ -117,7 +117,7 @@                               , Reg (Literal (Numeric 2.0 Pt))                               ]                           )-                      , Reg ( Identifier "phase" , Literal (Numeric 5.0 Pt) )+                      , Reg ( Ident (Identifier "phase") , Literal (Numeric 5.0 Pt) )                       ]                   )               ])@@ -138,9 +138,9 @@        , KeyValArg            (Identifier "stroke")            (Dict-              [ Reg ( Identifier "paint" , Ident (Identifier "red") )-              , Reg ( Identifier "thickness" , Literal (Numeric 1.0 Pt) )-              , Reg ( Identifier "dash" , Array [] )+              [ Reg ( Ident (Identifier "paint") , Ident (Identifier "red") )+              , Reg ( Ident (Identifier "thickness") , Literal (Numeric 1.0 Pt) )+              , Reg ( Ident (Identifier "dash") , Array [] )               ])        ]) , SoftBreak@@ -159,10 +159,10 @@        , KeyValArg            (Identifier "stroke")            (Dict-              [ Reg ( Identifier "paint" , Ident (Identifier "red") )-              , Reg ( Identifier "thickness" , Literal (Numeric 1.0 Pt) )+              [ Reg ( Ident (Identifier "paint") , Ident (Identifier "red") )+              , Reg ( Ident (Identifier "thickness") , Literal (Numeric 1.0 Pt) )               , Reg-                  ( Identifier "dash"+                  ( Ident (Identifier "dash")                   , Array                       [ Reg (Literal (Numeric 1.0 Pt))                       , Reg (Literal (Numeric 3.0 Pt))
test/out/visualize/stroke-04.out view
@@ -53,9 +53,9 @@               [ KeyValArg                   (Identifier "stroke")                   (Dict-                     [ Reg ( Identifier "thickness" , Literal (Numeric 4.0 Pt) )-                     , Reg ( Identifier "paint" , Ident (Identifier "blue") )-                     , Reg ( Identifier "join" , Literal (String "round") )+                     [ Reg ( Ident (Identifier "thickness") , Literal (Numeric 4.0 Pt) )+                     , Reg ( Ident (Identifier "paint") , Ident (Identifier "blue") )+                     , Reg ( Ident (Identifier "join") , Literal (String "round") )                      ])               , NormalArg                   (Array@@ -84,9 +84,9 @@               [ KeyValArg                   (Identifier "stroke")                   (Dict-                     [ Reg ( Identifier "thickness" , Literal (Numeric 4.0 Pt) )-                     , Reg ( Identifier "paint" , Ident (Identifier "blue") )-                     , Reg ( Identifier "join" , Literal (String "bevel") )+                     [ Reg ( Ident (Identifier "thickness") , Literal (Numeric 4.0 Pt) )+                     , Reg ( Ident (Identifier "paint") , Ident (Identifier "blue") )+                     , Reg ( Ident (Identifier "join") , Literal (String "bevel") )                      ])               , NormalArg                   (Array@@ -115,9 +115,9 @@               [ KeyValArg                   (Identifier "stroke")                   (Dict-                     [ Reg ( Identifier "thickness" , Literal (Numeric 4.0 Pt) )-                     , Reg ( Identifier "paint" , Ident (Identifier "blue") )-                     , Reg ( Identifier "join" , Literal (String "miter") )+                     [ Reg ( Ident (Identifier "thickness") , Literal (Numeric 4.0 Pt) )+                     , Reg ( Ident (Identifier "paint") , Ident (Identifier "blue") )+                     , Reg ( Ident (Identifier "join") , Literal (String "miter") )                      ])               , NormalArg                   (Array@@ -146,10 +146,10 @@               [ KeyValArg                   (Identifier "stroke")                   (Dict-                     [ Reg ( Identifier "thickness" , Literal (Numeric 4.0 Pt) )-                     , Reg ( Identifier "paint" , Ident (Identifier "blue") )-                     , Reg ( Identifier "join" , Literal (String "miter") )-                     , Reg ( Identifier "miter-limit" , Literal (Float 20.0) )+                     [ Reg ( Ident (Identifier "thickness") , Literal (Numeric 4.0 Pt) )+                     , Reg ( Ident (Identifier "paint") , Ident (Identifier "blue") )+                     , Reg ( Ident (Identifier "join") , Literal (String "miter") )+                     , Reg ( Ident (Identifier "miter-limit") , Literal (Float 20.0) )                      ])               , NormalArg                   (Array
test/out/visualize/stroke-07.out view
@@ -103,10 +103,10 @@        , KeyValArg            (Identifier "stroke")            (Dict-              [ Reg ( Identifier "paint" , Ident (Identifier "red") )-              , Reg ( Identifier "thickness" , Literal (Numeric 0.0 Pt) )+              [ Reg ( Ident (Identifier "paint") , Ident (Identifier "red") )+              , Reg ( Ident (Identifier "thickness") , Literal (Numeric 0.0 Pt) )               , Reg-                  ( Identifier "dash"+                  ( Ident (Identifier "dash")                   , Array                       [ Reg (Literal (String "dot")) , Reg (Literal (Numeric 1.0 Pt)) ]                   )
+ test/typ/regression/issue19.typ view
@@ -0,0 +1,7 @@+#let nums = (1, none, 2)+#nums.map(num => {+  if num == none {+    return 1+  }+  return ((str(num)): 1)+})
+ test/typ/regression/issue20.typ view
@@ -0,0 +1,5 @@+#let a = "+This is a+multiline string+"+#a.len()
+ test/typ/regression/issue21.typ view
@@ -0,0 +1,2 @@+#version(1,2)+#version(1,2).at(3)
+ test/typ/regression/issue21b.typ view
@@ -0,0 +1,4 @@+#import "issue19.typ" as zeke+#zeke.nums+#import "issue20.typ": a as multiline+#multiline
+ test/typ/regression/issue23.typ view
@@ -0,0 +1,10 @@+#let fn() = {+  set text(fill: red)+  if true [+    test+  ] else [+    test2+  ]+}++#fn()
typst.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.4 name:               typst-version:            0.4+version:            0.5 synopsis:           Parsing and evaluating typst syntax. description:        A library for parsing and evaluating typst syntax.                     Typst (<https://typst.app>) is a document layout and