Commit Graph

173 Commits

Author SHA1 Message Date
Laurenz 2a3d0f4b39 Set Rules Episode VII: The Set Awakens 2021-12-15 20:27:41 +01:00
Laurenz f3bdc9d3da Syntax highlighting 2021-11-30 18:55:50 +01:00
Laurenz 38c5c36241 Final touches 2021-11-08 13:06:11 +01:00
Laurenz 75fffc1f9b Fine-grained capturing 2021-11-08 11:52:09 +01:00
Laurenz 95866d5fc9 Tidy up AST 2021-11-08 01:37:49 +01:00
Laurenz 41bdafb578 Faster parser 2021-11-06 15:49:39 +01:00
Laurenz 515fe89c5e Style changes
Co-Authored-By: Martin <mhaug@live.de>
2021-11-05 13:46:42 +01:00
Martin Haug cf2e527a02 Code Review: No Patrick, question marks are not an instrument 2021-11-05 13:46:41 +01:00
Martin Haug 5c952d56d0 New error handling 2021-11-05 13:46:41 +01:00
Laurenz f0c9635db5 Notes 2021-11-05 13:46:41 +01:00
Laurenz 65fac0e57c Refactoring
Co-Authored-By: Martin <mhaug@live.de>
2021-11-05 13:46:41 +01:00
Martin Haug 49fb3cd4e2 Code Review: Life is Like a Box of Iterators 2021-11-05 13:44:50 +01:00
Martin Haug 7d34a548cc Reorganize syntax module 2021-11-05 13:44:50 +01:00
Martin Haug 2e7d359e59 Unicode escape error moved to tokenizer 2021-11-05 13:44:49 +01:00
Martin Haug c569e14c07 Improve error handling 2021-11-05 13:44:49 +01:00
Martin Haug 1c0ac793d2 Slim `NodeKind` memory footprint 2021-11-05 13:44:49 +01:00
Martin Haug 84d35efee3 Less owning, more iterating 2021-11-05 13:44:49 +01:00
Martin Haug 4875633acf Change parser 2021-11-05 13:44:49 +01:00
Laurenz 1af194f383 Dedent code blocks 2021-10-29 16:26:47 +02:00
Laurenz de6786eb28 Allow multiple template bodies 2021-10-29 16:04:55 +02:00
Laurenz 00be5d36c4 Change indent requirements to allow alignment
Previously the following wouldn't work correctly because "Fourth" would have been a child of "Third".
```
3. Third
⎵. Fourth
```
2021-10-05 17:25:58 +02:00
Laurenz 6d26e15fbe Support `else if` 2021-09-30 19:07:06 +02:00
Laurenz 9e95502622 No hashtag before else anymore 2021-09-30 18:28:25 +02:00
Laurenz ea921aca5d Blocks directly in template also scope 2021-09-15 13:12:07 +02:00
Laurenz 5de791d9e6 Rename `SyntaxTree` to `Markup`
Also `SyntaxNode` -> `MarkupNode`.
2021-09-15 13:05:01 +02:00
Laurenz c18321a4c2 Bugfix and tidying 2021-09-15 13:05:00 +02:00
Laurenz 0dd4ae0a7a Prune derives 2021-08-21 17:30:21 +02:00
Laurenz 594809e35b Library functions behave more imperatively
- Templates scope state changes
- State-modifying function operate in place instead of returning a template
- Internal template representation contains actual owned nodes instead of a pointer to a syntax tree + an expression map
- No more wide calls
2021-08-17 22:20:37 +02:00
Laurenz f6814b7732 Optimize memory sizes 2021-08-13 18:17:24 +02:00
Laurenz 6a3385e4e7 Argument collection and spreading 2021-08-13 16:55:45 +02:00
Laurenz 144f208821 Add file information to spans 2021-08-13 14:33:58 +02:00
Laurenz d002cdf451 Named arguments for user defined functions 2021-08-12 16:07:42 +02:00
Laurenz 8207c31aec Minor refactorings
- Reorder parser methods and use `Pos` everywhere
- Remove tab special handling for columns and adapt heading/list/enum indent handling
- Don't panic when a file has an empty path
2021-08-10 11:28:12 +02:00
Laurenz 3c92bad9a7 Pretty-printed diagnostics with traceback 2021-08-01 00:00:36 +02:00
Laurenz fbd3d19113 Call args span now includes parens 2021-07-31 22:41:06 +02:00
Laurenz 1ee1d078e2 Fatal errors
- Makes errors fatal, so that a phase is only reached when all previous phases were error-free
- Parsing still recovers and can produce multiple errors
- Evaluation fails fast and can thus produce only a single error (except for parse errors due to an import)
- The single error that could occur during execution is removed for now
- Removes Value::Error variant
2021-07-30 18:49:19 +02:00
Laurenz 312dcd070c Move EcoString and OptionExt into util 2021-07-29 11:35:49 +02:00
Laurenz 5edbd3a5b5 Use array's IntoIterator impl and nested or patterns
*yay*
2021-07-16 12:07:15 +02:00
Laurenz 891e0c5fa6 Remove warnings from parsing and casting 2021-07-10 23:14:46 +02:00
Laurenz 6a4823461f Reference-count complex values
Rename some nodes types
2021-07-10 23:10:17 +02:00
Laurenz 36b3067c19 Eco string 🌱 2021-07-10 13:07:39 +02:00
Laurenz 551e3af9d0 Replace using with from 2021-07-08 21:16:16 +02:00
Laurenz 5c327e249e Switch to = for headings once again 2021-07-08 20:03:13 +02:00
Laurenz c5635d8a3f Handle missing arguments to with expr 2021-07-08 18:56:52 +02:00
Laurenz 44d8028b49 Allow wide calls only directly in templates 2021-06-30 22:49:11 +02:00
Laurenz 17e8946884
Remove color literals (#39) 2021-06-30 22:32:24 +02:00
Laurenz 470f8001a1 No more collisions between syntax::Tree and layout::Tree 2021-06-30 11:40:27 +02:00
Laurenz b89cd128ae Wide calls 2021-06-29 13:49:50 +02:00
Laurenz 422b8e640f With expressions 2021-06-26 18:07:05 +02:00
Laurenz 2a30c20f0e Flip outdated expression names 2021-06-18 12:47:59 +02:00
Laurenz 4dbd9285c9 Basic enums 2021-06-11 14:00:06 +02:00
Laurenz bce553a991 Tidy up 2021-06-09 22:44:40 +02:00
Martin Haug 29cfef0a6d Add a grid layouter 2021-06-09 22:44:40 +02:00
Martin Haug 73fa2eda2c Introduce `fr`s 2021-06-09 22:44:40 +02:00
Laurenz 5afb42ad89 Lists with indent-based parsing
- Unordered lists with indent-based parsing and basic layout using stacks
- Headings are now also indent based
- Removes syntax functions since they will be superseded by select & transform
2021-06-09 00:37:13 +02:00
Laurenz d69dfa84ec Move import parser to appropriate position in the file 2021-06-08 11:51:21 +02:00
Laurenz f26526ba75 Switch back to hashtags for headings 2021-06-07 18:17:47 +02:00
Martin Haug 37e0846037 Test cases for include and import 2021-05-31 22:33:40 +02:00
Martin Haug 9f77f09aac Parse import and include expressions
Co-Authored-By: Laurenz <laurmaedje@gmail.com>
2021-05-31 22:33:40 +02:00
Laurenz 5e08028fb3 Syntax functions 🚀
This adds overridable functions that markup desugars into. Specifically:
- \ desugars into linebreak
- Two newlines desugar into parbreak
- * desugars into strong
- _ desugars into emph
- = .. desugars into heading
- `..` desugars into raw
2021-03-21 17:50:56 +01:00
Laurenz 264a7dedd4 Scheduled maintenance 🔨
- New naming scheme
  - TextNode instead of NodeText
  - CallExpr instead of ExprCall
  - ...
- Less glob imports
- Removes Value::Args variant
- Removes prelude
- Renames Layouted to Fragment
- Moves font into env
- Moves shaping into layout
- Moves frame into separate module
2021-03-19 17:57:31 +01:00
Laurenz 193734f453 Callee expressions 🍅 2021-03-03 22:33:00 +01:00
Laurenz 1cfc3c72b5 Show name of user-defined functions in representation 🦋 2021-03-03 18:15:33 +01:00
Laurenz c94a18833f Closures and function definitions 🚀
Supports:
- Closure syntax: `(x, y) => z`
- Shorthand for a single argument: `x => y`
- Function syntax: `let f(x) = y`
- Capturing of variables from the environment
- Error messages for too few / many passed arguments

Does not support:
- Named arguments
- Variadic arguments with `..`
2021-03-03 17:53:40 +01:00
Laurenz 4d90a066f1 Simplify collection parsing ♻
In preparation for closure expressions.
2021-03-02 23:20:28 +01:00
Laurenz f084165eab While loops 🔁 2021-02-24 21:29:32 +01:00
Laurenz 927341d93a Update coma example ⬆️ 2021-02-18 15:19:29 +01:00
Laurenz 84cdc85ca7 Refresh parser 🌊 2021-02-18 15:06:00 +01:00
Laurenz db1659a987 Rename any template to func template ✏ 2021-02-12 23:14:29 +01:00
Laurenz 146eda102a Move span directly into diagnostics 🚚 2021-02-11 19:26:47 +01:00
Laurenz f9197dcfef Add arguments value 🏓 2021-02-09 22:56:44 +01:00
Laurenz 06ca740d01 Split evaluation and execution 🔪 2021-02-09 19:46:57 +01:00
Laurenz d86a5e8a1f Tidy up raw blocks 🧹
- Better trimming (only trim at the end if necessary)
- Fixed block-level layouting
- Improved pretty printing
- Flip inline variable to block
- Flip inline variable to display for math formulas
2021-02-03 21:34:49 +01:00
Laurenz 89eb8bae49 New syntax 💎
- Everything everywhere!
  - Blocks with curly braces: {}
  - Templates with brackets: []
  - Function templates with hashtag: `#[f]`
- Headings with equals sign: `= Introduction`
2021-01-30 12:09:26 +01:00
Laurenz ce8138c685 Scope variables in blocks 🏔️ 2021-01-27 11:50:51 +01:00
Laurenz 710f88ccb2 For loop patterns 🦚 2021-01-26 23:30:03 +01:00
Laurenz ed929dd10c For loops 🔁
(does not support key-value patterns yet)
2021-01-26 21:16:36 +01:00
Laurenz e847082435 Multi-expression blocks 🛍️ 2021-01-26 21:13:52 +01:00
Laurenz aaa48403cd Require hashtag for all keywords 💂‍♀️ 2021-01-26 21:11:44 +01:00
Laurenz 16ac3f3ebc Small improvements ♻ 2021-01-26 13:49:04 +01:00
Laurenz ac788f2082 Many more expressions 🥗
Boolean, equality, comparison and assignment expression parsing and evaluation.
2021-01-22 17:16:42 +01:00
Laurenz 84ba547c7c If expressions 🔀 2021-01-20 21:33:13 +01:00
Laurenz dd246e5bc9 Spans for group and block contents 📐 2021-01-17 16:18:36 +01:00
Laurenz 29be90bf95 Assertions with [eq] + better tests 🩺 2021-01-17 13:53:22 +01:00
Laurenz 51efb0f4d6 Port remaining parser tests 🚚 2021-01-16 15:08:03 +01:00
Laurenz 274e008e2c Move heading tests to integration 🚚 2021-01-13 16:09:08 +01:00
Laurenz 539735e668 Basic let bindings 🎞 2021-01-13 11:54:50 +01:00
Laurenz d2ba1b705e Group and block expressions, unary plus 🧩 2021-01-12 18:55:12 +01:00
Laurenz 105cda0e69 Braced content -> Bracketed templates ✏ 2021-01-10 21:38:58 +01:00
Laurenz 3c7d249ae4 Rename token modes ✏ 2021-01-10 20:48:32 +01:00
Laurenz 515905d78d Add angle value 📐 2021-01-10 18:22:06 +01:00
Laurenz 9eac62c31a Add lots of new tokens 🍪 2021-01-10 17:52:37 +01:00
Laurenz 59d811aeba Inline literal enum into expression enum 🔀 2021-01-06 21:06:48 +01:00
Laurenz 77c06ebc24 None literal 🕳 2021-01-04 17:23:52 +01:00
Laurenz aae67bd572 Move and rename many things 🚛 2021-01-03 00:12:09 +01:00
Laurenz 1c40dc42e7 Dynamic values, Types, Arrays, and Dictionaries 🚀
- Identifiers are now evaluated as variables instead of being plain values
- Constants like `left` or `bold` are stored as dynamic values containing the respective rust types
- We now distinguish between arrays and dictionaries to make things more intuitive (at the cost of a bit more complex parsing)
- Spans were removed from collections (arrays, dictionaries), function arguments still have spans for the top-level values to enable good diagnostics
2021-01-02 19:37:10 +01:00
Laurenz 8cad78481c A few small improvements ♻ 2021-01-01 17:54:31 +01:00
Laurenz 2b6ccd8248 Better parser testing 2021-01-01 16:43:58 +01:00
Laurenz 4069f0744d Parsing improvements 🧽
- Simplified scanner code
- Peek eagerly
- Skip whitespace and comments automatically in header mode
- Parse simple block expressions
- Move literal definitions into expression module
- Raw resolving tests
2020-12-31 17:48:56 +01:00
Laurenz ba3d43f7b2 Refresh function call and dictionary syntax
- No colon between function name and arguments, just whitespace
- "Named" arguments (previously "keyword" arguments) use colon instead of equals sign
2020-12-27 20:45:20 +01:00