76 Commits

Author SHA1 Message Date
Laurenz
7218892c72 Refactor path handling 2021-06-01 12:55:07 +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
Laurenz
0bfee5b777 Refactored loading and cache architecture 2021-05-28 12:46:43 +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
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
c975d0d5e9 Tidy up layouting code 2021-05-17 22:55:31 +02:00
Laurenz
e65c2b949c Remove resource abstraction and handle images natively 2021-05-14 11:14:28 +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
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
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
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
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
3c74e4566a Faster compile times and test execution
- Optimize only dependencies, not the main crate
- Don't generate debug info
- Don't generate PDFs for all tets by default
2021-03-13 14:18:31 +01:00
Laurenz
ffcb8cd97a Fix test false positive for empty output ✔ 2021-03-12 13:57:47 +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
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
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
05727bfc3a Reorganize tests 🔀 2021-02-20 23:34:33 +01:00
Laurenz
ed81049ddc Show repr in monospace 📏 2021-02-18 15:06:13 +01:00
Laurenz
2f4dc99cec Refresh tests 🌊 2021-02-17 21:30:20 +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
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
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
e3139ed3ee Allow shortening locations from 1:x-1:y to x-y 🩳 2021-01-30 16:46:16 +01:00
Laurenz
5943f552e5 Capture variable by slot instead of value 🎣 2021-01-30 16:19:57 +01:00
Laurenz
7ced99bcd7 Line information for assertion failures 📍 2021-01-26 20:58:19 +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
29be90bf95 Assertions with [eq] + better tests 🩺 2021-01-17 13:53:22 +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
d763f0f5a6 Split state and scopes, less ref-counting 🔀 2021-01-15 16:53:02 +01:00
Laurenz
469d78d610 Move let-binding tests to integration 🚚 2021-01-14 17:41:13 +01:00