1038 Commits

Author SHA1 Message Date
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
8b58171d7c Reorganize test cases 2021-05-18 00:36:11 +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
Martin
df58a4d89b
Merge pull request #19 from typst/shape-runs 🔀
Text work
2021-04-07 13:50:21 +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
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
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
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
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
Martin Haug
318eb9021e Side by side testing 👣 2021-03-29 14:56:42 +02:00
Laurenz
9c040a9d2b Move around test cases 🚚 2021-03-29 14:51:54 +02:00
Laurenz
df7ba36474 Benchmark multiple test cases 2021-03-29 12:02:43 +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
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
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