Commit Graph

795 Commits

Author SHA1 Message Date
Martin c44ecbfbd2
Move to exclusively oneshot benchmarks with Iai fork (#41) 2021-08-18 18:12:26 +02:00
Laurenz 011865ab5c Memory loader 2021-08-18 14:25:49 +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 c53d98a22f More logical ordering and naming 2021-08-17 12:49:48 +02:00
Laurenz 9a798ce6f6 Make percentages for h and v relative to area instead of font size 2021-08-17 00:17:28 +02:00
Laurenz 9462fb17b3 Convert single-field structs to tuple structs 2021-08-16 19:15:03 +02:00
Laurenz cb0aab3cfa Change how functions are called 2021-08-16 18:14:58 +02:00
Laurenz ba6b91e2ee Editable source files 2021-08-16 14:40:02 +02:00
Laurenz 7e6e7e928c Adjust macros to new version 2021-08-14 23:53:57 +02:00
Laurenz 6ae6d86b9c Separate type for string values 2021-08-14 15:55:39 +02:00
Laurenz fcb4e45118 Fix bug on unix again 2021-08-13 19:37:51 +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 ccb4be4da4 Make range-end exclusive 2021-08-12 14:54:52 +02:00
Laurenz eaa3cbaa9c Array and dictionary indexing 2021-08-12 13:56:23 +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 3932bb2cb9 New source loading architecture 2021-08-09 11:26:41 +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 42a27b48df Change derive order 2021-07-29 22:27:10 +02:00
Laurenz 2c6127dea6 Refactor state 2021-07-29 13:28:19 +02:00
Laurenz 7d15dc634b Move font family and refactor alignment 2021-07-29 12:28:54 +02:00
Laurenz 853361338b Better addition and iteration for array, dict and template 2021-07-29 12:01:06 +02:00
Laurenz 312dcd070c Move EcoString and OptionExt into util 2021-07-29 11:35:49 +02:00
Laurenz 6ebe621834 Use last instead of next_back 2021-07-27 18:53:09 +02:00
Laurenz 39a561f2bb Slightly more expressive method name 2021-07-26 00:29:41 +02:00
Laurenz 7aa3d2c2d6 No more excessive region cloning 2021-07-26 00:29:37 +02:00
Laurenz 56cbf96fe2 Move incremental test into separate function 2021-07-26 00:08:08 +02:00
Laurenz 88d3be2581 Remove PageState::new 2021-07-25 23:41:04 +02:00
Laurenz c97b3078eb Merge font and par state into text state 2021-07-25 12:10:44 +02:00
Laurenz ec5384c97f State-based monospace handling 2021-07-25 01:16:38 +02:00
Laurenz dcfbf95220 Fix comment 2021-07-25 01:03:38 +02:00
Laurenz adb71ee040 Move and refactor 2021-07-25 01:03:38 +02:00
Laurenz 927f1154fa More efficient function representation 2021-07-21 16:55:32 +02:00
Laurenz 929f4d64fe Switch Loader from Option to io::Result 2021-07-21 12:27:40 +02:00
Laurenz b0e5212973 Fs builder methods + tidy up 2021-07-21 11:28:33 +02:00
Laurenz 9488b1b850 Main context struct 2021-07-21 11:28:29 +02:00
Laurenz 8000783f95 FileId instead of Path + FileHash 2021-07-20 18:35:05 +02:00
Laurenz 5edbd3a5b5 Use array's IntoIterator impl and nested or patterns
*yay*
2021-07-16 12:07:15 +02:00
Laurenz 81f2f8f4c3 Optimize scanner and tokenizer 2021-07-13 15:24:26 +02:00
Laurenz 9fe9b95b7f Simpler casting 2021-07-11 13:20:53 +02:00
Laurenz 891e0c5fa6 Remove warnings from parsing and casting 2021-07-10 23:14:46 +02:00
Laurenz 982ce85976 Move comparisons into standard traits 2021-07-10 23:10:35 +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 4fb58acafd Fix bound 2021-07-09 10:27:45 +02:00
Laurenz 0c74290519 Compare functions and templates by identity 2021-07-08 23:36:20 +02:00
Laurenz 02b586cc36 Add lots of Eq impls 2021-07-08 23:16:02 +02:00
Laurenz fd0b89a1d8 Rename Fill to Paint 2021-07-08 22:33:44 +02:00
Laurenz 7e2c217cbc Rename some library arguments
- font
  - color -> fill
  - shorthands for families and size
- decoration functions
  - color -> stroke
  - strength -> thickness
  - position -> offset
  - invert offsets: now positive goes downwards just like the rest of typst
2021-07-08 21:42:36 +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 f85e5aac64 URL special case for line comments 2021-07-08 19:37:38 +02:00
Laurenz 5a500fb8a7 Range operator 2021-07-08 19:12:07 +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 911b581834 Optimize scanner performance 2021-06-30 16:43:11 +02:00
Laurenz 65c0c5607e Make clippy a bit happier 2021-06-30 11:48:51 +02:00
Laurenz 470f8001a1 No more collisions between syntax::Tree and layout::Tree 2021-06-30 11:40:27 +02:00
Laurenz 45812b7001
Merge pull request #35 from typst/wide-calls
Wide calls
2021-06-30 11:04:53 +02:00
Laurenz 1c43d8af12 Bump dependencies 2021-06-30 00:52:50 +02:00
Laurenz 32a6b673bc Make use of wide calls 2021-06-29 13:49:50 +02:00
Laurenz b89cd128ae Wide calls 2021-06-29 13:49:50 +02:00
Martin Haug 21d919e2d2 Put incremental compilation behind feature 2021-06-29 12:33:24 +02:00
Laurenz 6d0911d7a8 Mutable visitor 2021-06-29 10:54:34 +02:00
Laurenz 8ea05739af Make values smaller
Reduced from 48 bytes to 32 bytes on 64-bit architectures.
2021-06-28 21:57:18 +02:00
Martin Haug e9960b8942 Code review: Reverse temperature 2021-06-27 18:58:31 +02:00
Martin 6f518c1728 Adjust comments
Co-authored-by: Laurenz <laurmaedje@gmail.com>

Update tests/typ/layout/stack.typ

Co-authored-by: Laurenz <laurmaedje@gmail.com>
2021-06-27 18:58:28 +02:00
Martin Haug 9bd8b7ddac Code review, new stack test 2021-06-27 18:06:39 +02:00
Martin 57bd3e23c7
Apply suggestions from code review
Co-authored-by: Laurenz <laurmaedje@gmail.com>
2021-06-27 17:08:40 +02:00
Martin Haug 6b6cdae7ce Testing for incremental
Also, constraint bugfixes.
2021-06-27 12:31:27 +02:00
Laurenz f64c772b6d Fix capturing bug 2021-06-27 12:05:36 +02:00
Laurenz 422b8e640f With expressions 2021-06-26 18:07:05 +02:00
Laurenz d53c933e4d Add box and block functions 2021-06-26 15:47:37 +02:00
Laurenz 784018124d Remove unused template name field 2021-06-26 15:35:37 +02:00
Laurenz 285c2f617b Cleanse library
- Remove doc-comments for Typst functions from library
- Reduce number of library source files
2021-06-26 13:06:37 +02:00
Laurenz 63cf361496 Make font take everything as keyword arguments 2021-06-25 18:14:19 +02:00
Laurenz 62ecd31af2 Streamline template evaluation 2021-06-18 13:08:39 +02:00
Martin 80a9b300d1 Ref count the frames 2021-06-18 13:01:55 +02:00
Martin 7db78d83be Levels 2021-06-18 13:00:36 +02:00
Laurenz 2a30c20f0e Flip outdated expression names 2021-06-18 12:47:59 +02:00
Laurenz bca035172c Join semantics 2021-06-18 11:59:05 +02:00
Laurenz 8b6391040e Remove eat_ prefix 2021-06-18 11:58:43 +02:00
Laurenz 6967c6c80a Len function for strings, arrays and dictionaries 2021-06-18 10:50:08 +02:00
Laurenz 2e87808cdd Setter method 2021-06-17 14:32:24 +02:00
Martin e14e804789
Constraints (#31) 2021-06-17 14:18:43 +02:00
Laurenz e2cdda67dc Refactor grid row layout 2021-06-15 16:34:41 +02:00
Laurenz a61ee46ed2 Refactor column resolving 2021-06-13 00:22:39 +02:00
Laurenz 4c37ebb936 Give up on not implementing Eq and Ord 2021-06-12 18:24:31 +02:00
Martin fec1f41106
Allow grid cells to span multiple regions. (#30) 2021-06-12 18:19:18 +02:00
Laurenz 4017b5a9f6 Push some nodes directly into the stack 2021-06-11 14:42:20 +02:00
Laurenz 4dbd9285c9 Basic enums 2021-06-11 14:00:06 +02:00
Laurenz 3330767c20 Remove props in favor of using state for everything 2021-06-11 11:30:18 +02:00
Martin Haug c28708aa19 Text decorations 2021-06-10 23:15:51 +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 9983634cd5 Add note about quadratic running times 2021-06-09 10:56:11 +02:00
Laurenz edff2ae680 Remove template pretty printing
Was buggy and pretty useless anyway since it couldn't peek into function templates.
2021-06-09 10:45:49 +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
Laurenz 7218892c72 Refactor path handling 2021-06-01 12:55:07 +02:00
Laurenz 9bdb0bdeff Fix path hash bug on unix 2021-05-31 22:33:40 +02:00
Martin Haug 37e0846037 Test cases for include and import 2021-05-31 22:33:40 +02:00
Laurenz 00ac68b845 Fix and improve
- Set context location to resolved path during module evaluation.
- Dump module diagnostics on import
- Use same-file for more robustness than fs::canonicalize
2021-05-31 22:33:40 +02:00
Laurenz e023bf2ac9 Module loading system
Detects cyclic imports and loads each module only once per compilation.
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 0bfee5b777 Refactored loading and cache architecture 2021-05-28 12:46:43 +02:00
Laurenz eabf28f081 Remove hash() from AnyNode since caching is now fully transparent 2021-05-27 14:48:55 +02:00
Laurenz b886ced408 Switch to N64 type alias 2021-05-27 14:48:45 +02:00
Laurenz 9e0a34c80f Adapt to pdf-writer update 2021-05-27 14:11:08 +02:00
Martin Haug 8e700606bb Add a cache for unchanged layouts
Co-Authored-By: Laurenz <laurmaedje@gmail.com>
2021-05-26 23:50:40 +02:00
Martin Haug e27f6c1014 Add hash impls for all nodes
This prepares the incremental PR.

Co-Authored-By: Laurenz <laurmaedje@gmail.com>
2021-05-26 22:57:29 +02:00
Laurenz 14f093bfee A few predefined colors for testing 2021-05-23 22:59:25 +02:00
Laurenz cd25b40281 Stack function 2021-05-23 22:36:34 +02:00
Laurenz 5ced5a69c0 Adapt to pdf-writer update 2021-05-22 20:18:33 +02:00
Laurenz a175d37ff2 Refactor parser a bit 2021-05-21 23:58:34 +02:00
Laurenz 6472c1e425 Rename areas to regions 2021-05-21 12:55:36 +02:00
Laurenz 1cb6328d20 Reword some doc comments 2021-05-19 00:33:50 +02:00
Laurenz 118fc1014b Leaner argument parsing 2021-05-18 21:32:40 +02:00
Laurenz 7025590405 Rename _new to new and typify to value 2021-05-18 16:53:11 +02:00
Laurenz 72434f0695 Min and max functions 2021-05-18 16:31:22 +02:00
Laurenz 6b08862b83 Streamline value comparisons 2021-05-18 15:44:49 +02:00
Laurenz 8d67c0ca5e Convert font units to lengths earlier 2021-05-17 23:06:31 +02:00
Laurenz c975d0d5e9 Tidy up layouting code 2021-05-17 22:55:31 +02:00
Laurenz 24c4a746bc Move aspect ratio into stack 2021-05-17 15:23:04 +02:00
Laurenz 1003d320d4 Rename expand to fixed and switch to bools 2021-05-17 15:00:29 +02:00
Laurenz fbb823964f Fix compilation on unix 2021-05-14 11:26:50 +02:00
Laurenz e65c2b949c Remove resource abstraction and handle images natively 2021-05-14 11:14:28 +02:00
Laurenz 33733fd1ef Expose units_per_em and raw face id 2021-05-13 11:26:51 +02:00
Laurenz 3e03667c37 Make file system loader serializable 📚 2021-05-05 22:18:33 +02:00
Laurenz 6292d25afb Reengineer font and resource loading 🏞 2021-04-23 17:46:14 +02:00
Laurenz 72478946c2 Make frames serializable 📚
This also makes serialization support non-optional since it's too much feature-management for too little benefit.
2021-04-21 21:17:25 +02:00
Laurenz 3d2ee54848 Refactor and comment ♻ 2021-04-07 01:08:07 +02:00
Laurenz 076e767b0e Do binary search and find the outermost glyph with the text index 🔍
Co-Authored-By: Martin <mhaug@live.de>
2021-04-07 00:24:42 +02:00
Laurenz 464a6ff75e Deduplicate ttf-parser and rustybuzz face 🥞 2021-04-06 15:13:20 +02:00
Laurenz de20a21a58 Reshaping with unsafe-to-break
Co-Authored-By: Martin <mhaug@live.de>
2021-04-05 22:32:09 +02:00
Laurenz 9014e83478 Fix multi-page paragraph bugs 🐞 2021-04-03 21:12:32 +02:00
Laurenz d74c9378b8 New paragraph layout 🚀
The previous paragraph layout algorithm had a couple of flaws:
- It always produced line break opportunities between runs although on
  the textual level there might have been none.
- It didn't handle trailing spacing correctly in some cases.
- It wouldn't have been easily adaptable to Knuth-Plass style optimal
  line breaking because it was fundamentally structured first-fit
  run-by-run.

The new paragraph layout algorithm fixes these flaws. It proceeds
roughly in the following stages:
1. Collect all text in the paragraph.
2. Compute BiDi embedding levels.
3. Shape all runs, layout all children and store the resulting items in
   a reusable (possibly even cacheable) `ParLayout`.
3. Iterate over all line breaks in the concatenated text.
4. Construct lightweight `LineLayout` objects for full lines instead of
   runs. These mostly borrow from the `ParLayout` and only reshape the
   first and last run if necessary. The design allows to use Harfbuzz's
   UNSAFE_TO_BREAK mechanism to make reshaping more efficient. The size
   of a `LineLayout` can be measured without building the line's frame.
5. Build only the selected line's frames and stack them.
2021-04-03 21:09:17 +02:00
Laurenz 8245b7b736 Baseline alignment ⏏ 2021-03-30 21:43:12 +02:00
Laurenz c00cca3677 Refactor ♻ 2021-03-30 16:19:16 +02:00
Laurenz 79948c0c5e BiDi reordering 🔃
Co-Authored-By: Martin <mhaug@live.de>
2021-03-30 14:31:50 +02:00
Laurenz c393eccd36 Fix space/newline trimming 🐞
Co-Authored-By: Martin <mhaug@live.de>
2021-03-30 14:31:46 +02:00
Laurenz 652986fd58 Fix double leading 🐞 2021-03-30 14:31:39 +02:00
Laurenz 88da325c7d Fixed par layouter directions 🗜 2021-03-29 15:02:15 +02:00
Laurenz 309b8f20a8 Line break iterating run shaper 🌵
Co-Authored-By: Martin <mhaug@live.de>
2021-03-29 15:02:15 +02:00
Laurenz 8c27dc1010 Write spaces and linebreaks into text runs ✒ 2021-03-29 15:02:15 +02:00
Laurenz 9c040a9d2b Move around test cases 🚚 2021-03-29 14:51:54 +02:00
Laurenz 57ca9628c1 Better space coalescing logic 🌧
This creates a smaller state machine helper type for softness coalescing, which does not own the resulting nodes. While this creates a bit more duplication in stack and par builder, it makes it a lot easier to integrate additional logic into the paragraph builder.

Furthermore:
- Line breaks are now "hard", that is, not coalesced with each other.
- Text nodes with equal style are now merged allowing for example `f{}i` to form a ligature.
2021-03-27 21:52:39 +01:00
Laurenz 76fc4cca62 Refactor alignments & directions 📐
- Adds lang function
- Refactors execution context
- Adds StackChild and ParChild enums
2021-03-25 21:32:33 +01:00
Laurenz e8057a5385 Make pdf module top-level 🧱 2021-03-24 21:48:25 +01:00
Laurenz 73615f7e3c Text shaping 🚀
- Shapes text with rustybuzz
- Font fallback with family list
- Tofus are shown in the first font

Co-Authored-By: Martin <mhaug@live.de>
2021-03-24 17:12:34 +01:00
Laurenz 98336bfafb Better font family definitions ✒ 2021-03-22 14:08:50 +01:00
Laurenz 39f55481ed More consistent documentation 📝 2021-03-22 10:48:29 +01:00
Laurenz 83fa2c075e Fix bug with line spacing after headings 2021-03-22 01:14:37 +01: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 898728f260 Square, circle and ellipse 🔵 2021-03-20 20:19:30 +01:00
Martin 6cb9fe9064
Text colors 🦩 (#18) 2021-03-19 22:36:13 +01:00
Laurenz 898dc38ec1 Better debug representations 💻 2021-03-19 21:23:03 +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 ca3df70e2a Add basic paragraph function 📑
Allows to change:
- (paragraph) spacing
- leading
- word-spacing
2021-03-19 13:32:12 +01:00
Laurenz 54a9ccb1a5 Configurable font edges ⚙
Adds top-edge and bottom-edge parameters to the font function. These define how
the box around a word is computed. The possible values are:
- ascender
- cap-height (default top edge)
- x-height
- baseline (default bottom edge)
- descender

The defaults are chosen so that it's easy to create good-looking designs with
vertical alignment. Since they are much tighter than what most other software
uses by default, the default leading had to be increased to 50% of the font size
and paragraph spacing to 100% of the font size.

The values cap-height and x-height fall back to ascender in case they are zero
because this value may occur in fonts that don't have glyphs with cap- or
x-height (like Twitter Color Emoji). Since cap-height is the default top edge,
doing no fallback would break things badly.

Removes softness in favor of a simple boolean for pages and a more finegread u8
for spacing. This is needed to make paragraph spacing consume line spacing
created by hard line breaks.
2021-03-19 13:20:58 +01:00
Martin Haug bd12d135ca Merge text and shape PDF loops 🎡 2021-03-19 11:05:23 +01:00
Laurenz 6bd1a494e0 Formatting and documentation 2021-03-17 23:29:58 +01:00
Laurenz 49bb7f9a2b Switch from name to ratio for font stretch parameter 📐 2021-03-17 23:14:19 +01:00
Laurenz 8cdfc7faaf Rename box to rect and color to fill ✏ 2021-03-17 22:08:44 +01:00
Laurenz 271b0f953b Fixes in TextMate grammar 2021-03-17 14:47:11 +01:00
Laurenz ceb00a2e77 Factor out alignment deduplication into separate function ♻ 2021-03-13 16:57:15 +01:00
Laurenz 1584b09708 Fix pagebreak-in-box bug ✔ 2021-03-12 18:48:11 +01:00
Laurenz c3acb491e3 Refactor execution context 🏗
- The execution context is a lot more structured: Instead of a magic stack of arbitrary objects there are static objects for pages, stacks and paragraphs
- Page softness/keeping mechanic is now a lot simpler than before
2021-03-12 14:16:59 +01:00
Laurenz 584a43277d Rename ChildAlign to LayoutAligns ✏ 2021-03-12 14:12:30 +01:00
Laurenz c1b1dbcc09 Better expansion behaviour 🐪
This makes expansion behaviour inheritable by placing it into the area and passing it down during layouting instead of computing some approximation of what we want during execution.
2021-03-11 10:48:29 +01:00
Laurenz 4e5f85aa4a Pad function 🔲 2021-03-10 17:42:47 +01:00
Laurenz b0446cbdd1 Move around library types 🚚 2021-03-10 17:22:44 +01:00
Laurenz bbb9ed07ff Better line spacing calculations ↕
- Only add line spacing between lines. Previously, line spacing was added below
  every line, making `#box[word]` higher than just `word`.
- Compute box height of text as `ascender - descender` so that the full word is
  contained in the box.
2021-03-10 10:20:01 +01:00
Laurenz b2b8d37ce0 Rename run to line and add some explanatory comments ✏
The name run was a relict of the time where a line consisted of a set of runs with same alignment. While these runs still exist conceptually, they are all stored flatly together in what was now renamed from `run`  to `line`.
2021-03-09 17:25:25 +01:00
Laurenz 5157c1e276 Documentation fixes ✔ 2021-03-03 23:32:29 +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 d5d187a8c2 Replace default fonts 🆕 2021-03-02 17:31:41 +01:00
Laurenz 45abcf6b2b Remove dependencies on itoa and ryu ⬇️ 2021-03-02 15:45:01 +01:00
Laurenz 742a28a57a Cleaner control flow in for loop evaluation 🧼 2021-02-24 21:32:09 +01:00
Laurenz f084165eab While loops 🔁 2021-02-24 21:29:32 +01:00
Laurenz dae3dad540 Index + value iteration for arrays 🦚 2021-02-24 18:54:06 +01:00
Laurenz de37a056ed Split pushed text at newlines ✂ 2021-02-21 11:43:25 +01:00
Laurenz 4d42c79b16 Fix spacing after raw blocks ⬇️ 2021-02-21 11:43:08 +01:00
Laurenz 927341d93a Update coma example ⬆️ 2021-02-18 15:19:29 +01:00
Laurenz ed81049ddc Show repr in monospace 📏 2021-02-18 15:06:13 +01:00
Laurenz 84cdc85ca7 Refresh parser 🌊 2021-02-18 15:06:00 +01:00
Laurenz e143fd36ef Refresh tokenizer 🌊 2021-02-18 15:05:49 +01:00
Laurenz db1659a987 Rename any template to func template ✏ 2021-02-12 23:14:29 +01:00
Laurenz 094462cbdd Make templates and strings summable 🥪 2021-02-12 23:11:47 +01:00
Laurenz 58f799c41c Early quit loop when body returns error 🛑 2021-02-12 23:06:04 +01:00