Commit Graph

421 Commits

Author SHA1 Message Date
Laurenz 5d05c3f68a Refactor and fix style folding 2022-02-05 12:41:42 +01:00
Laurenz bdb1c008f2 Allow set & show only directly in markup 2022-02-02 11:28:31 +01:00
Martin Haug fe70db1f4c New color stuff
- CMYK function
- More default colors
- Interpret RGB values as sRGB
2022-02-08 21:12:09 +01:00
Martin Haug 9a9c6f22c4 Add evasion of glyph shape for under- and overlines 2022-02-04 00:30:23 +01:00
Martin Haug e6a0447f9d Add roman numeral and footnote formatting 2022-02-03 11:32:15 +01:00
Laurenz 8d1ce390e2 Rework strong and emph
- Star and underscore not parsed as strong/emph inside of words
- Stars/underscores must be balanced and they cannot go over paragraph break
- New `strong` and `emph` classes
2022-01-30 22:46:59 +01:00
Laurenz aeb036f4dc Fix that templates don't create a scope 2022-01-29 22:32:57 +01:00
Laurenz 44ebefbec2 Add `hide` class 2022-01-29 22:32:01 +01:00
Laurenz 24d513d891 Enable for loop over captured args 2022-01-29 21:36:25 +01:00
Laurenz 5c53b9ff60 Support for `wrap` 2022-01-28 22:32:53 +01:00
Martin Haug 4f66907d08 Add Code Block syntax highlighting 2022-01-27 22:04:45 +01:00
Laurenz 3739ab7720 Export into rendered images 2022-01-24 17:39:49 +01:00
Laurenz 0c5243fa80 Basic tables 2022-01-17 16:01:01 +01:00
Laurenz e74ae6ce70 Make all nodes into classes 2022-01-08 00:20:48 +01:00
Laurenz 0b62439090 Scoped styles 2022-01-07 13:26:51 +01:00
Laurenz f7e8624b4c Refactor 2022-01-05 15:06:42 +01:00
Laurenz 5d5d8a21cf Bump and lock dependencies 2022-01-01 12:23:00 +01:00
Martin Haug 37328f11ed Adjust column size and expansion handling 2021-12-27 19:01:36 +01:00
Martin 7efdcdf247 Apply simple suggestions from code review
Co-Authored-By: Laurenz <laurmaedje@gmail.com>
2021-12-27 12:33:53 +01:00
Martin Haug b22ce6f8b8 Introduce equal-width columns 2021-12-26 15:59:24 +01:00
Laurenz 11565a40b3 Set Rules Episode IX: The Rise of Testing 2021-12-21 00:20:24 +01:00
Laurenz 244ad386ec Set Rules Episode VI: Return of the Refactor 2021-12-15 12:49:20 +01:00
Laurenz 57f5c0a1b1 Set Rules Episode V: The Tests Strike Back 2021-12-15 11:12:38 +01:00
Martin Haug f15ee7efb6 Add SVG capabilities 2021-12-06 14:58:57 +01:00
Laurenz bfa9962632 Remove baseline weirdness 2021-12-02 14:48:12 +01:00
Laurenz e4e4c1876f Fix square and circle width & height 2021-11-29 16:13:53 +01:00
Laurenz cae60ea0cc Go back to wrapping inline nodes 2021-11-29 13:12:50 +01:00
Laurenz e36b8ed374 Layout bugfixes 2021-11-29 12:06:38 +01:00
Laurenz 8a88f71cb1 Transformations 2021-11-23 22:04:08 +01:00
Laurenz c77c5a0f0a Simpler alignment resolving 2021-11-23 14:25:50 +01:00
Laurenz 0a974d86ba Welcome to Tigerland 2021-11-22 15:26:56 +01:00
Laurenz ed50661378 Castable optional and smart values 2021-11-29 16:47:35 +01:00
Laurenz cef46e6c40 Strokes 2021-11-20 15:51:07 +01:00
Laurenz 5a59bb4821 Page fill 2021-11-18 12:50:28 +01:00
Laurenz b2e6a29789 Refactoring 2021-11-18 00:58:32 +01:00
Laurenz d9c529347d Configurable paragraph alignment 2021-11-17 23:54:43 +01:00
Laurenz 095fa52be5 Placed node 2021-11-17 23:09:23 +01:00
Laurenz 89f2e71852 Align node 2021-11-17 17:09:19 +01:00
Laurenz 9a800daa82 Image fit modes 2021-11-16 21:32:29 +01:00
Laurenz 79638d4bbd Don't wrap already layoutable nodes into flows/pars unnecessarily 2021-11-16 12:47:14 +01:00
Laurenz 0e0f340502 Revert page and inline levels 2021-11-16 10:41:30 +01:00
Laurenz 0ad0fa5a05 RTL tracking test 2021-11-20 13:26:28 +01:00
Martin Haug c020707ebc Add tracking to font function 2021-11-20 12:36:03 +01:00
Laurenz 38c5c36241 Final touches 2021-11-08 13:06:11 +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 8ccb7d6f15 Smallcaps, sub- and superscript, ligature ctrls... 2021-11-02 10:39:45 +01:00
Laurenz 564cb7e989 Fix panic in pad node 2021-10-31 13:51:28 +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 d1ecb7e52e Add `move` function 2021-10-28 16:51:57 +02:00
Laurenz fb0cd3df6e Fr in stack and par 2021-10-26 14:56:10 +02:00
Laurenz 1ca4ff69e2 Trim `mailto:` and `tel:` from links 2021-10-26 14:51:57 +02:00
Laurenz c627847cb3 Remove directions from grid 2021-10-23 20:22:47 +02:00
Laurenz 6690bc2354 Revise block node contract
Frames produced by block nodes are now always treated as exactly one per
given region and a frame must not be larger than its respective region.
Any overflow must be handled internally. This means that stack and grid
don't need to search for fitting regions anymore, since the child has
already does that for them. This commit further moves stack spacing into
a new `SpacingNode`.
2021-10-23 20:22:47 +02:00
Laurenz 1e74f7c407 New `ShapeNode`
Replaces `BackgroundNode` and `FixedNode`
2021-10-23 20:22:47 +02:00
Laurenz 5f4dde0a6b Remove inline alignment from stack
The current inline alignment is very broken and leads to lots of subtle weirdness. Getting rid of it simplifies the stack's interface a lot. At a later point either:
- inline alignment will be added back in a better way, or
- all nodes will be able to expand or align themselves, meaning that the stack's children take care of their alignment
2021-10-23 20:22:47 +02:00
Laurenz b69c0355ec Don't fit images to remaining height
Makes them really small if there's only little space left ...
2021-10-05 20:05:15 +02:00
Laurenz dcdcf53831 Rename insert/ to elements/ 2021-10-05 18:51:21 +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 2818ceee44 New default fonts 2021-09-30 22:50:14 +02:00
Laurenz 6d26e15fbe Support `else if` 2021-09-30 19:07:06 +02:00
Laurenz 0e89facb53 Allow linear values for text edges 2021-09-28 10:53:54 +02:00
Laurenz ed0c804017 Add spacing capabilities to stack function
- Named argument `spacing` controls spacing between any two template arguments
- Arbitrary linears in the list can produce arbitrary spacing
2021-09-27 22:23:26 +02:00
Laurenz e10b3d838a Fix panic due to bad alignments in stack function 2021-09-27 13:45:18 +02:00
Laurenz 1982a0639e Expand all but last region for broken up auto rows 2021-09-27 11:39:31 +02:00
Laurenz 5594868f8b Prevent paragraph from overflowing due to trailing linebreak 2021-09-25 23:35:27 +02:00
Laurenz b0b4607725 Set the correct base for grid cells 2021-09-10 15:10:34 +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 17ea0d4ba9 Make font fallback disableable 2021-08-27 14:08:31 +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 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
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 9a798ce6f6 Make percentages for h and v relative to area instead of font size 2021-08-17 00:17:28 +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 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 2c6127dea6 Refactor state 2021-07-29 13:28:19 +02:00
Laurenz 891e0c5fa6 Remove warnings from parsing and casting 2021-07-10 23:14:46 +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 44d8028b49 Allow wide calls only directly in templates 2021-06-30 22:49:11 +02:00
Laurenz 45812b7001
Merge pull request #35 from typst/wide-calls
Wide calls
2021-06-30 11:04:53 +02:00
Laurenz 2f44d10aa4 Make test separators commentable 2021-06-29 16:05:05 +02:00
Laurenz b89cd128ae Wide calls 2021-06-29 13:49:50 +02:00
Martin Haug 9bd8b7ddac Code review, new stack test 2021-06-27 18:06:39 +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 bca035172c Join semantics 2021-06-18 11:59:05 +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
Martin Haug c28708aa19 Text decorations 2021-06-10 23:15:51 +02:00
Laurenz 5611c26577 Restructure tests 2021-06-10 16:46:01 +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
Laurenz c7416f18bd Move invalid syntax tests into appropriate places 2021-06-09 10:51:19 +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 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
Laurenz cd25b40281 Stack function 2021-05-23 22:36:34 +02:00
Laurenz 8b58171d7c Reorganize test cases 2021-05-18 00:36:11 +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 de20a21a58 Reshaping with unsafe-to-break
Co-Authored-By: Martin <mhaug@live.de>
2021-04-05 22:32:09 +02:00
Laurenz a86cf7bd8c Refresh all reference images 2021-04-03 21:12:32 +02:00
Laurenz bfbbe8dcf8 Better paragraph layout tests 2021-04-03 21:12:32 +02:00
Laurenz c00cca3677 Refactor ♻ 2021-03-30 16:19:16 +02:00
Laurenz 12a604fec8 BiDi tests 2021-03-30 14:31:50 +02:00
Laurenz 79948c0c5e BiDi reordering 🔃
Co-Authored-By: Martin <mhaug@live.de>
2021-03-30 14:31:50 +02:00
Laurenz 47b4dab7ed Line breaking tests
Co-Authored-By: Martin <mhaug@live.de>
2021-03-30 14:31:49 +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 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 6720520ec0 Render svg emoji 🐳 2021-03-23 15:32:36 +01:00
Laurenz 3fb1f59f1e Bump tiny-skia to 0.5 🔼 2021-03-23 13:17:00 +01:00
Laurenz 98336bfafb Better font family definitions ✒ 2021-03-22 14:08:50 +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 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
Laurenz 8cdfc7faaf Rename box to rect and color to fill ✏ 2021-03-17 22:08:44 +01:00
Laurenz f190d33d0c Better tests for pad function 2021-03-13 14:35:51 +01:00
Laurenz 1584b09708 Fix pagebreak-in-box bug ✔ 2021-03-12 18:48:11 +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 34f839c717 Improve tests 🔨 2021-03-03 22:48:54 +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 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 f084165eab While loops 🔁 2021-02-24 21:29:32 +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 05727bfc3a Reorganize tests 🔀 2021-02-20 23:34:33 +01:00
Laurenz cc5f14193c Flip test directory structure 🔃
Move full/lang/library to the top-level as that's more ergonomic to use.
2021-01-16 15:39:25 +01:00
Laurenz 51efb0f4d6 Port remaining parser tests 🚚 2021-01-16 15:08:03 +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 c36a136e6f Simpler diagnostic localization in tests ♻ 2021-01-13 17:22:33 +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 60154474ba Enable multiple tests per file 🧱 2021-01-13 14:07:38 +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 750d220bb0 Add color enum 🎨 2020-12-27 19:23:26 +01:00
Laurenz 6f111f9410 Test [font] 🧣 2020-12-17 15:43:30 +01:00
Laurenz 7e91c8dc87 Add func-prefix to library function tests ✏ 2020-12-17 13:31:34 +01:00
Laurenz 0f6c67219e Test [h] and [v] 🐈 2020-12-17 13:22:17 +01:00
Laurenz b02ba84264 Test [rgb] 🎨 2020-12-17 12:17:34 +01:00
Laurenz 0adbfe894a Test [pagebreak] 🗞 2020-12-17 11:31:07 +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 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 e30d896c7b Switch to tiny-skia 🎨 2020-11-25 18:46:47 +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 22697f0c0c Simple regression testing with file-based comparisons 2020-10-13 12:34:11 +02:00