Commit Graph

1032 Commits

Author SHA1 Message Date
Laurenz 72eb243e26 Simplify source file loading logic 2021-09-25 23:44:33 +02:00
Laurenz 5594868f8b Prevent paragraph from overflowing due to trailing linebreak 2021-09-25 23:35:27 +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 87e776fceb Add `BoolExt` trait with `flip` method 2021-09-14 12:27:21 +02:00
Laurenz 18190f377a Reimplement `Debug` for layout nodes 2021-09-10 15:10:35 +02:00
Laurenz b0b4607725 Set the correct base for grid cells 2021-09-10 15:10:34 +02:00
Laurenz 50a464488c Fix fr rows in infinite region 2021-09-10 15:10:34 +02:00
Laurenz f592662aa0 Rename `Arguments` to `Args` 2021-09-10 12:27:33 +02:00
Laurenz d2618acd8d Bump pdf-writer 2021-09-09 12:16:55 +02:00
Laurenz 7f48e8fe66 Make user-facing "debug" representation use Debug instead of Display 2021-08-31 16:25:12 +02:00
Laurenz 3481d8cc81 More utility functions
- join("a", "b", "c", sep: ", ")
- int("12")
- float("31.4e-1")
- str(10)
- sorted((3, 2, 1))
2021-08-31 12:59:53 +02:00
Laurenz ee84bf7408 Add abs() function 2021-08-30 16:59:09 +02:00
Laurenz ff25573224 Lower- and uppercase string conversion functions 2021-08-30 16:39:16 +02:00
Laurenz e4e79990da Allow body for font function once again 2021-08-29 15:09:54 +02:00
Laurenz 411aba5b6f Subset CFF subrs referenced by FD array 2021-08-29 14:46:51 +02:00
Laurenz d101612414 Primitive CFF1 subsetting
The subsetting strategy is somewhat crazy for now: Simply zero the glyph data for all unused glyphs. While the CFF table itself doesn't shrink, the actual embedded font is compressed and greatly benefits from the repeated zeros.

This already compresses the fonts a lot (~90% for NotoSerifCJK), but they are still quite large.

Therefore, the plan of action:
- First, find more data that can be zeroed out.
- Then _maybe_ see whether we can instead properly rebuild the subsetted font.
2021-08-28 23:53:46 +02:00
Laurenz 73b63ffb99 Refactor subsetter
- Gracefully handle failed subsetting of one table
- Remove need for creating a ttf-parser face
2021-08-27 14:11:49 +02:00
Laurenz dff2175558 Subset post table 2021-08-27 14:08:32 +02:00
Laurenz 17ea0d4ba9 Make font fallback disableable 2021-08-27 14:08:31 +02:00
Laurenz 7eeafbd464 Font family things
- Better default font family order
- Remove weird leading dots from font family names
- Public API for retrieving all found font families
2021-08-27 14:08:31 +02:00
Laurenz 0001a965d7 Parse command line arguments with pico-args 2021-08-27 14:08:17 +02:00
Laurenz 0471e51bc4 Compress all PDF streams 2021-08-25 13:45:49 +02:00
Laurenz f2882bf854 Support decoding of mac roman names
This allows discovery of Apple fonts without unicode name entries.
2021-08-25 13:24:30 +02:00
Laurenz 821536b253 Subset glyf and loca tables 2021-08-25 12:12:47 +02:00
Laurenz 6f84cf3c22 Basic subsetting architecture
Constructs a brand new font file where only necessary tables are contained.
2021-08-24 23:43:51 +02:00
Laurenz 7a2e3c80b5 PDF bug fixes
- Write correct subtype for CID Font
- Write CIDToGIDMap attribute
- Deduplicate CMap pairings
- Bump pdf-writer for string primitive fix
2021-08-24 17:18:50 +02:00
Laurenz 148a06c070 Switch from state to decorations for underline/strikethrough/overline 2021-08-24 00:41:15 +02:00
Martin d546453880
Links! (#43)
Co-authored-by: Laurenz <laurmaedje@gmail.com>
2021-08-23 23:56:33 +02:00
Laurenz 0806af4aec Kerned PDF output 2021-08-23 13:21:44 +02:00
Laurenz c0377de653 Shorter/clearer field name for geometry types
Size { width, height } => Size { w, h }
Spec { horizontal, vertical } => Spec { x, y }
Gen { cross, main } => Gen { inline, block }
2021-08-21 19:08:47 +02:00
Laurenz 0dd4ae0a7a Prune derives 2021-08-21 17:30:21 +02:00
Laurenz f38eb10c2b Make better use of existing variables in grid 2021-08-21 15:28:44 +02:00
Laurenz f71c38b38d Turn backlog into iterator 2021-08-21 15:28:26 +02:00
Laurenz a6f260ca39 Refactor layouting a bit
Notably:
- Handle aspect ratio in fixed node
- Inline constraint inflation into pad node
2021-08-19 15:52:15 +02:00
Martin fdab7158c9
Pattern properties (#42)
Included in this package are:
* Code review I: The unnamed review.
* Code Review II: How I met your review.
* Code Review III: Code, the final frontier. These are the voyages of the USS Review ...
2021-08-19 15:07:11 +02:00
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
Laurenz 790dc9e667 Cleaning 🧹 2021-02-12 22:55:26 +01:00
Laurenz a2fcc1bf28 Small fixes ♻ 2021-02-11 22:24:42 +01:00
Laurenz 146eda102a Move span directly into diagnostics 🚚 2021-02-11 19:26:47 +01:00
Laurenz 1711b67877 Move all pretty printing into one module and pretty print values 🦋 2021-02-11 17:33:13 +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 e35bbfffcb Remove captured expression 🗑️ 2021-02-07 13:39:05 +01:00
Laurenz c80e13579f Dry-clean visitor with a macro 🏜 2021-02-07 13:14:28 +01:00
Martin Haug a6cae89b47 Generalize child of NodeBackground 🍼 2021-02-06 12:54:44 +01:00
Martin Haug 80e076814d Merge `rect` and `box` 🦚 2021-02-06 12:30:44 +01:00
Martin Haug 8469bad748 Add rectangle function 🎛 2021-02-04 21:30:18 +01:00
Laurenz 8de1f8b770 Fix counting bug 2021-02-04 00:38:30 +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 6fcef9973b Refresh tests 🔄 2021-01-31 22:43:11 +01:00
Laurenz bcb2c46a10 Scoped for loop bindings 🏔️
Previously for loop bindings were leaked until after the loop.
2021-01-30 16:26:44 +01:00
Laurenz 5943f552e5 Capture variable by slot instead of value 🎣 2021-01-30 16:19:57 +01:00
Laurenz 67047047e8 Interpret two backticks as single-backtick block 2021-01-30 15:24:11 +01:00
Laurenz fe7ea53800 New display-math syntax 🧮
Changed to `$[x]$` instead of `$$x$$` because then `$$` simply is an empty formula that does not poison the whole document.
2021-01-30 12:36:41 +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 ac24075469 Moves captures visitor into separate file 🚚 2021-01-30 10:24:51 +01:00
Laurenz 2036663ed2 Capture variables in templates 🔍 2021-01-27 15:05:18 +01:00
Laurenz 2641c2d20e Always evaluate for loop to template 🔁 2021-01-27 13:55:04 +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 010ddc4795 More straightforward pretty printing tests 🧹 2021-01-26 21:57:56 +01:00
Laurenz f006636dd2 Update comments 🔄 2021-01-26 21:23:42 +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 0de4f3ed7b Reorder and fix docs ✔ 2021-01-20 21:50:51 +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 d763f0f5a6 Split state and scopes, less ref-counting 🔀 2021-01-15 16:53:02 +01:00
Laurenz 0f0416054f Move value tests + smarter number formatting 🔢 2021-01-15 15:43:59 +01:00
Laurenz 469d78d610 Move let-binding tests to integration 🚚 2021-01-14 17:41:13 +01:00
Laurenz 73b25bdad0 Move bracket function tests to integration 🚚 2021-01-14 17:30:22 +01:00
Laurenz cfcb36b159 Move test files into category subfolders 🚚 2021-01-14 16:47:29 +01:00
Laurenz 272a4c2289 Unbounded pages 🌌 2021-01-13 23:19:44 +01:00
Laurenz 1b53e27f27 Some minor improvements ♻ 2021-01-13 21:33:22 +01:00
Laurenz 2aa4c5bfc6 Move array and dictionary tests to integration 🚚 2021-01-13 17:03:10 +01:00
Laurenz 6efa6c7891 Move basic markup tests to integration 🚚 2021-01-13 16:50:43 +01:00
Laurenz 1cd687b681 Move escaping tests to integration and extend them 🚚 2021-01-13 16:37:18 +01:00
Laurenz 274e008e2c Move heading tests to integration 🚚 2021-01-13 16:09:08 +01:00
Laurenz 1d01b93f67 Move comment tests to integration 🚚 2021-01-13 15:44:41 +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 3b2a28ca8e Add angle data type 📐 2021-01-09 21:35:36 +01:00
Laurenz 8275b186ba Remove star-slash token 2021-01-07 16:13:18 +01:00
Laurenz 59d811aeba Inline literal enum into expression enum 🔀 2021-01-06 21:06:48 +01:00
Laurenz 7b4d4d6002 Pretty printing 🦋
- Syntax tree and value pretty printing
- Better value evaluation (top-level strings and content are evaluated plainly, everything else is pretty printed)
2021-01-06 01:32:59 +01:00
Laurenz 2e77b1c836 Better value representations, type function 🌐 2021-01-04 21:29:15 +01:00
Laurenz 77c06ebc24 None literal 🕳 2021-01-04 17:23:52 +01:00
Laurenz 32af3095f8 Fix performance regression 2021-01-03 00:41:12 +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
Laurenz 750d220bb0 Add color enum 🎨 2020-12-27 19:23:26 +01:00
Laurenz c44ebf876f Add error cases for [font] 🧯 2020-12-21 00:47:47 +01:00
Laurenz e59de77f96 Allow only a few predefined font classes in [font] 🚧 2020-12-21 00:40:09 +01:00
Laurenz 2b660968aa Restructure value conversions 🧱 2020-12-21 00:36:22 +01:00
Laurenz 6f111f9410 Test [font] 🧣 2020-12-17 15:43:30 +01:00
Laurenz b02ba84264 Test [rgb] 🎨 2020-12-17 12:17:34 +01:00
Laurenz 81e80ecfba Test [page] function 📕
- Make page break behaviour more consistent
- Allow skipping reference image testing for single tests with `// compare-ref: false` (useful for tests which only check error messages)
2020-12-17 00:20:27 +01:00
Laurenz 2336aeb4c3 Tweak parser error messages 🔮 2020-12-16 16:24:06 +01:00
Laurenz 6bbedeaa2c Better tokenization testing 🌋
- Better tokenization test coverage.
- Suffix testing: Each test case is tested with many different suffixes to ensure correct token ends.
- Improves expression parsing (fixes #3).
2020-12-16 15:42:02 +01:00
Laurenz 0cfce1de7e Switch to miniz_oxide 🔼 2020-12-11 12:37:20 +01:00
Laurenz 1cbd5f3051 Refine test infrastructure
- Tests diagnostics
- More and better separated image tests
2020-12-10 22:45:45 +01:00
Laurenz fdc1b378a3 Compress images in PDFs ⚙ 2020-11-30 22:07:08 +01:00
Laurenz 21857064db Export alpha channel into PDF 🧊 2020-11-28 00:04:40 +01:00
Laurenz 982e7671a6 Embed each image only once into the PDF 🥔 2020-11-27 23:17:25 +01:00
Laurenz 98f77e4d80 Fix headings that are separated by only one newline 🚧
Previously the following lead to only one line with both heading and body:
```
# Heading
Body
```
2020-11-27 23:13:59 +01:00
Laurenz 475ca7a62e Basic environment and resource loader 🏞 2020-11-27 22:35:42 +01:00
Laurenz bc997b7c33 Export images in PDF 🖼 2020-11-27 20:01:54 +01:00
Laurenz e30d896c7b Switch to tiny-skia 🎨 2020-11-25 18:46:47 +01:00
Laurenz 11e44516fa Merge some modules 🥞 2020-11-25 16:56:29 +01:00
Laurenz 761931405c Use newly stabilized intra doc links ↩ 2020-11-24 16:12:41 +01:00
Laurenz f105663037 Basic image support 🖼
- [image] function
- Image rendering in tests
- Supports JPEG and PNG
- No PDF export so far
2020-11-20 16:36:22 +01:00
Laurenz 2e6e6244cc Switch to pdf-writer ⬆️ 2020-11-19 23:46:51 +01:00
Laurenz 3a7bfd6bed Remove unused function `Spanned::value` 🗑 2020-11-16 11:08:36 +01:00
Laurenz 7ec7c49144 Don't panic 🌶 2020-11-05 13:07:13 +01:00
Laurenz e26b431bee Produce output file in current directory instead of source directory 📂 2020-11-05 12:30:46 +01:00
Laurenz ee38c6aa9a Allow configuration of directions in page and box ↗ 2020-10-19 13:05:54 +02:00
Laurenz 91e5120693 BoxAlign and Flow aliases ✏ 2020-10-13 13:51:58 +02:00
Laurenz 8680fcd490 Rename geometric eval and apply to resolve ✏ 2020-10-13 13:24:33 +02:00
Laurenz 1736bfc194 Rename typstc -> typst ✏ 2020-10-13 11:47:29 +02:00
Laurenz f29207d999 Strongly typed groups 👔 2020-10-12 22:06:28 +02:00
Laurenz dd4a4545a6 Move main back into src/ 📨 2020-10-12 21:26:58 +02:00
Laurenz 1a70cb6a33 Naming and grammar ✔ 2020-10-12 18:01:22 +02:00
Laurenz 5243878d81 Less vecs in layouting 2020-10-12 17:29:01 +02:00
Laurenz 38157b0e0c Synchronous layout 🪀 2020-10-12 17:10:01 +02:00
Laurenz e94627721d Adapt to fontdock 🔼 2020-10-12 16:59:21 +02:00
Laurenz a2a68106c0 Evaluation benchmark 🔋 2020-10-11 23:18:00 +02:00
Laurenz 1b3eb42003 Refactor paragraph layout 📰 2020-10-11 22:41:21 +02:00
Laurenz 607f4395f9 Refactor stack layout again 🧣 2020-10-11 22:38:34 +02:00
Laurenz d3bc4ec073 Refactor layouting base 🪁 2020-10-11 22:38:30 +02:00
Laurenz f04ad0ffa5 Rename LayoutItem to Layouted ✏ 2020-10-11 13:08:27 +02:00
Laurenz c216a4fc26 Flatten ast module back into syntax module 🌪 2020-10-10 22:41:56 +02:00
Laurenz 51bf3268dd Refactor text state 🆎 2020-10-10 22:35:24 +02:00
Laurenz 92c01da360 Switch back to custom geometry types, unified with layout primitives 🏞 2020-10-10 22:19:36 +02:00
Laurenz 42500d5ed8 Refactor stack ♻ 2020-10-10 12:40:11 +02:00
Laurenz 13230db68c Fix some clippy warnings ✔ 2020-10-07 19:28:34 +02:00
Laurenz d2e220245d Move deco, pass and feedback into diagnostics module ↩ 2020-10-07 18:24:47 +02:00
Laurenz 537545e7f8 Evaluation and node-based layouting 🚀 2020-10-07 17:07:44 +02:00
Laurenz ca1256c924 Remove obsolete extra variable in stack layouter 2020-10-06 20:40:37 +02:00
Laurenz 7dd78af459 Rename ast/tree -> ast/node ✏ 2020-10-06 20:27:17 +02:00
Laurenz 4252f959f7 Typesafe conversions in stack & line layouters 🍮 2020-10-06 18:27:00 +02:00
Laurenz 985fe28166 Fix bug in line layouter ✔ 2020-10-06 14:44:58 +02:00
Laurenz ef410f6877 Move multi-dir support in stack layouter 🍁 2020-10-06 14:20:28 +02:00
Laurenz c6a6870978 Rename secondary/primary to main/cross ✏ 2020-10-06 13:13:18 +02:00
Laurenz 5a7a32a9ba Streamline generic layouting primitives 🛫 2020-10-05 16:44:35 +02:00
Laurenz 93eaafb236 Tidy up align function 🧺 2020-10-05 16:06:25 +02:00
Laurenz fa3e2920c0 Remove @ syntax in diagnostics macros 🗑 2020-10-05 15:45:45 +02:00
Laurenz 2df8b964d0 Simplify shaping 🌱 2020-10-05 15:35:55 +02:00
Laurenz d1c07260c0 Move align out of BoxLayout 🍫 2020-10-05 13:39:33 +02:00
Laurenz 335fa2d118 Small improvements 🍪 2020-10-04 23:31:35 +02:00
Laurenz 605ab104c5 Better argument parsing 🥙 2020-10-04 22:36:20 +02:00
Laurenz ef8aa763fa Shorten some names ↔ 2020-10-04 20:22:11 +02:00
Laurenz a41d7ab47d Expression evaluation with Eval trait 🧮 2020-10-04 20:07:01 +02:00
Laurenz c1dd872b34 Remove unncessary wrappers and typedefs 🛑 2020-10-04 19:57:39 +02:00
Laurenz 105f70867d Add none value 🧫 2020-10-04 19:26:27 +02:00
Laurenz f4460f8abd Style nits 🎈 2020-10-04 19:21:35 +02:00
Laurenz 0f7c70fd93 Separate state and constraints 🧶 2020-10-04 19:06:20 +02:00
Laurenz 6672f8f7df Remove Typesetter in favor of typeset function 🎯 2020-10-04 18:18:55 +02:00
Laurenz 262a8fa36a Refactor and move shaping out of the layout module 2020-10-04 18:01:56 +02:00
Laurenz 54e0da59e3 Small documentation fixes 🧾 2020-10-03 18:15:09 +02:00
Laurenz 91d14d2a22 Evaluate expressions 🧮 2020-10-03 17:56:56 +02:00
Laurenz 95bae5725c Int, Float, Relative and Linear values 🍉 2020-10-03 15:07:57 +02:00
Laurenz 0fc25d732d Port to kurbo 🎋 2020-10-03 13:23:59 +02:00
Laurenz 8dbc5b60cc Update font docs 📖 2020-10-03 11:32:24 +02:00
Laurenz 75e6dbfbe6 Rename bold/italic to strong/emph ✏ 2020-10-03 11:18:25 +02:00
Laurenz 730715c064 Rename text layouting to shaping ✏ 2020-10-03 11:09:32 +02:00
Laurenz dc8d5d2f1e Small improvements 🧺 2020-10-02 20:22:08 +02:00
Laurenz 904bc392ab Remove spans from token iterator 🧽 2020-10-02 19:17:47 +02:00
Laurenz 343982c56f Optimize parser by remembering peeked token 2020-10-02 16:52:01 +02:00
Laurenz 3533268b1f Refactor parser 🏞 2020-10-02 15:43:29 +02:00
Laurenz f8770d2b2a Generalize layouting primitives 🛤 2020-10-01 15:35:09 +02:00
Laurenz e676ab53dd Rename compute to eval ✏ 2020-10-01 15:13:04 +02:00
Laurenz 7c12f0c07f Flatten compute module 2020-10-01 15:10:35 +02:00
Laurenz 7fcad452b8 Reorganize ast types 🏕 2020-10-01 15:03:37 +02:00
Laurenz aafd3c95ca Rename table to dict ✏ 2020-10-01 13:15:10 +02:00
Laurenz 885bfec5d7 Make syntax not depend on parse 📩
This would make it possible to split them into two separate crates.
2020-10-01 11:32:48 +02:00
Laurenz 16f0bd430e Rename CharParser to Scanner ✏ 2020-10-01 11:08:53 +02:00
Laurenz c0998b4802 Simplify tokenizer a bit 🔄 2020-10-01 11:03:42 +02:00
Laurenz 4b9bc66028 Implement low-level char parser 🥜 2020-10-01 01:38:18 +02:00
Laurenz 01405902ba Restructure parser files 🍔 2020-09-30 19:13:55 +02:00
Laurenz 0ddab1c00d Flatten unescape_string a bit 🥞 2020-09-30 19:07:45 +02:00
Laurenz 4077a7c11e Refactor raw blocks 💱 2020-09-30 18:59:33 +02:00
Laurenz 7cc279f7ae Replace line/column with byte positions 🔢 2020-09-30 17:25:09 +02:00
Laurenz 3c3730425f SpanWith trait ↔ 2020-09-30 14:38:46 +02:00
Laurenz 7143e10afc Streamline font handling a bit 📜 2020-09-30 13:18:42 +02:00
Laurenz 3e791e3337 Move decoration into mod.rs 🔙 2020-09-30 12:49:30 +02:00
Laurenz bc1b4216a8 Reorganize syntax types into two modules 📦 2020-09-30 12:45:33 +02:00