Commit Graph

129 Commits

Author SHA1 Message Date
Laurenz 75e6dbfbe6 Rename bold/italic to strong/emph ✏ 2020-10-03 11:18:25 +02:00
Laurenz 904bc392ab Remove spans from token iterator 🧽 2020-10-02 19:17:47 +02:00
Laurenz 3533268b1f Refactor parser 🏞 2020-10-02 15:43:29 +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 4b9bc66028 Implement low-level char parser 🥜 2020-10-01 01:38:18 +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 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
Laurenz 7f8f225cb3 Split up parser into multiple files 🧱
Splits up into:
- escaping: resolving of escape sequences
- parser: the parsing code
- tests: all integrated parsing tests

Also moves Ident from the root syntax module into the tree module.
2020-09-03 19:16:19 +02:00
Laurenz 7f575dc098 Rename `skip_white` to `skip_ws` ✒ 2020-09-02 16:54:22 +02:00
Laurenz b2f3730013 Deduplicate and flexibilize code token & node building 🧺 2020-09-01 14:57:25 +02:00
Laurenz 56acc9982c Formatting 🌿 2020-09-01 13:13:54 +02:00
Martin Haug d986bc4b0a Add section headings 👨‍🦲
Co-authored-by: Laurenz Mädje <laurmaedje@gmail.com>
2020-09-01 13:10:48 +02:00
Martin Haug 1942a25793 Move Nbsp logic to tokenizer 🚛 2020-08-31 14:47:52 +02:00
Martin Haug 08433ab79f Capability to escape the tilde symbol 💨 2020-08-31 12:20:45 +02:00
Martin Haug d0e252d116 Add non-breaking space 🔒 2020-08-31 12:11:34 +02:00
Laurenz 181f756a9e Format everything with rustfmt! 💚 2020-08-30 22:18:55 +02:00
Laurenz 0d44cf5321 Some alignment ⏭ 2020-08-30 22:15:36 +02:00
Laurenz 18c515cde5 Make some code easier for rustfmt 🍦 2020-08-30 22:09:33 +02:00
Laurenz 9861a9583e Slight simplifications 🍃 2020-08-30 15:16:55 +02:00
Martin Haug c043692c96 Also provide escapes for strings 🗒 2020-08-30 13:39:21 +02:00
Martin Haug 7041e0938d Added Unicode Escaping for body text 👙 2020-08-30 13:21:07 +02:00
Martin Haug d68367f32a Newlines are complicated, y'all 😱
Co-authored-by: laurmaedje@outlook.de <laurmaedje@outlook.de>
2020-08-29 17:20:04 +02:00
Martin Haug 1eb584e256 Fixing the build by removing P macro usage 🚑
Kids, merge with caution!
2020-08-29 14:10:56 +02:00
Martin 5e1fd35926
Merge branch 'master' into code-blocks 2020-08-29 13:58:30 +02:00
Martin Haug c2b6f2dc35 Added code blocks 🚟 2020-08-29 13:53:59 +02:00
Laurenz 236750c35f Remove par nodes in favor of parbreaks 🔄
This basically reverts the earlier change from parbreaks to par nodes because:
- It is simpler and less nested
- It works way better with functions that layout their body inline like `font`, which where buggy before, previously

The original reasons for changing to par nodes were:
- the envisioned design of the layouter at that time (based on dynamic nodes etc.), which is not relevant anymore
- possibly existing benefits with regards to incremental compilation, which are unsure and outweighed by the immediate benefits of the parbreak-representation
2020-08-29 12:02:07 +02:00
Laurenz 2a92428ff6 Do as Dolores says 2020-08-27 21:47:26 +02:00
Laurenz 37835e4d8e Better error reporting for nameless function 💡 2020-08-27 21:34:48 +02:00
Martin Haug c099b8b9b4 Fixing the regression 🩹 2020-08-27 20:56:44 +02:00
Martin Haug 3abb9ec319 Code review-tastic changes 🦪 2020-08-27 20:42:09 +02:00
Martin Haug 3de20f8d38 Add Multi-Invokation 👨‍👩‍👧‍👧 2020-08-27 17:50:57 +02:00
Laurenz 141d69cb60 Remove some obsolete stuff 2020-08-19 21:12:34 +02:00
Laurenz 77dac270a8 Make compute functions possible 💻
Ships with the amazing new `rgb` function!
2020-08-19 20:49:01 +02:00
Laurenz 3cbca56a71 Parse braced expressions and bracketed calls in headers 🗳
- Refactors the tokenizer to be lazy: It does not emit pre-parsed function tokens, but instead allows it's mode to be changed. The modes are tracked on a stack to allow nested compute/typesetting (pop/push).
- Introduces delimited groups into the parser, which make it easy to parse delimited expressions without handling the delimiters in the parsing code for the group's content. A group is started with `start_group`. When reaching the group's end (matching delimiter) the eat and peek methods will simply return `None` instead of the delimiter, stopping the content parser and bubbling up the call stack until `end_group` is called to clear up the situation.
2020-08-17 16:25:09 +02:00
Laurenz 30f16bbf64 Add Value type and replace dyn-nodes with call-exprs 🏗
- In addition to syntax trees there are now `Value`s, which syntax trees can be evaluated into (e.g. the tree is `5+5` and the value is `10`)
- Parsing is completely pure, function calls are not parsed into nodes, but into simple call expressions, which are resolved later
- Functions aren't dynamic nodes anymore, but simply functions which receive their arguments as a table and the layouting context
- Functions may return any `Value`
- Layouting is powered by functions which return the new `Commands` value, which informs the layouting engine what to do
- When a function returns a non-`Commands` value, the layouter simply dumps the value into the document in monospace
2020-08-16 22:39:21 +02:00
Laurenz 9f6137d8a8 Remove tuples and objects in favor of tables 🛢
This refactores the parser tests to make them more concise and flexible with regards to spans.
2020-08-16 14:38:30 +02:00
Laurenz 84f30fb735 Remove SpanlessEq 🎃
The new solution is slightly hacky, but way more flexible. All types that implement PartialEq can now be compared spanlessly in tests by manipulating a thread-local boolean that is read in Span's PartialEq implementation.
2020-08-15 15:01:55 +02:00
Laurenz eb9c4b1a49 Add table expressions with arg-parsing functions 🪔 2020-08-15 13:25:31 +02:00
Laurenz 4b723add38 Take references in TryFromExpr 🔭 2020-08-15 11:58:01 +02:00
Laurenz 1a0608930c Rename Value trait into TryFromExpr ✒ 2020-08-15 11:44:18 +02:00
Laurenz c8f6b5bd5c Desugar body into last argument 🍩 2020-08-14 20:43:03 +02:00
Laurenz 650c712eab Add a syntax tree expression kind 🎍
This allows bodies to be passed as regular arguments.
2020-08-14 20:19:50 +02:00