From 1bae296f235302143df456dfb7c3cbaafdd7b5f0 Mon Sep 17 00:00:00 2001 From: "Guilherme D. Garcia" Date: Sat, 27 Jun 2026 15:41:17 -0400 Subject: [PATCH] synkit:0.0.41 --- packages/preview/synkit/0.0.41/LICENSE | 21 + packages/preview/synkit/0.0.41/README.md | 104 + packages/preview/synkit/0.0.41/_symbols.typ | 83 + packages/preview/synkit/0.0.41/eg.typ | 313 ++ .../preview/synkit/0.0.41/gallery/tree_1.png | Bin 0 -> 48407 bytes .../preview/synkit/0.0.41/gallery/tree_1.typ | 14 + .../preview/synkit/0.0.41/gallery/tree_2.png | Bin 0 -> 169172 bytes .../preview/synkit/0.0.41/gallery/tree_2.typ | 50 + .../preview/synkit/0.0.41/gallery/tree_3.png | Bin 0 -> 17069 bytes .../preview/synkit/0.0.41/gallery/tree_3.typ | 28 + .../preview/synkit/0.0.41/gallery/tree_4.png | Bin 0 -> 69720 bytes .../preview/synkit/0.0.41/gallery/tree_4.typ | 23 + .../preview/synkit/0.0.41/gallery/tree_5.png | Bin 0 -> 42605 bytes .../preview/synkit/0.0.41/gallery/tree_5.typ | 13 + .../preview/synkit/0.0.41/gallery/tree_6.png | Bin 0 -> 19003 bytes .../preview/synkit/0.0.41/gallery/tree_6.typ | 10 + packages/preview/synkit/0.0.41/gloss.typ | 300 ++ packages/preview/synkit/0.0.41/lib.typ | 95 + packages/preview/synkit/0.0.41/movement.typ | 573 ++++ packages/preview/synkit/0.0.41/syntax.typ | 2681 +++++++++++++++++ packages/preview/synkit/0.0.41/typst.toml | 13 + 21 files changed, 4321 insertions(+) create mode 100644 packages/preview/synkit/0.0.41/LICENSE create mode 100644 packages/preview/synkit/0.0.41/README.md create mode 100644 packages/preview/synkit/0.0.41/_symbols.typ create mode 100644 packages/preview/synkit/0.0.41/eg.typ create mode 100644 packages/preview/synkit/0.0.41/gallery/tree_1.png create mode 100644 packages/preview/synkit/0.0.41/gallery/tree_1.typ create mode 100644 packages/preview/synkit/0.0.41/gallery/tree_2.png create mode 100644 packages/preview/synkit/0.0.41/gallery/tree_2.typ create mode 100644 packages/preview/synkit/0.0.41/gallery/tree_3.png create mode 100644 packages/preview/synkit/0.0.41/gallery/tree_3.typ create mode 100644 packages/preview/synkit/0.0.41/gallery/tree_4.png create mode 100644 packages/preview/synkit/0.0.41/gallery/tree_4.typ create mode 100644 packages/preview/synkit/0.0.41/gallery/tree_5.png create mode 100644 packages/preview/synkit/0.0.41/gallery/tree_5.typ create mode 100644 packages/preview/synkit/0.0.41/gallery/tree_6.png create mode 100644 packages/preview/synkit/0.0.41/gallery/tree_6.typ create mode 100644 packages/preview/synkit/0.0.41/gloss.typ create mode 100644 packages/preview/synkit/0.0.41/lib.typ create mode 100644 packages/preview/synkit/0.0.41/movement.typ create mode 100644 packages/preview/synkit/0.0.41/syntax.typ create mode 100644 packages/preview/synkit/0.0.41/typst.toml diff --git a/packages/preview/synkit/0.0.41/LICENSE b/packages/preview/synkit/0.0.41/LICENSE new file mode 100644 index 0000000000..a3b5d38d51 --- /dev/null +++ b/packages/preview/synkit/0.0.41/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Guilherme D. Garcia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/preview/synkit/0.0.41/README.md b/packages/preview/synkit/0.0.41/README.md new file mode 100644 index 0000000000..46bb2a7b17 --- /dev/null +++ b/packages/preview/synkit/0.0.41/README.md @@ -0,0 +1,104 @@ +
+ + + + synkit logo + +
+ +
+ +![Typst Package](https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2Fguilhermegarcia%2Fsynkit%2Fmain%2Ftypst.toml&query=%24.package.version&prefix=v&logo=typst&label=package&color=239DAD) +![MIT license badge](https://img.shields.io/badge/license-MIT-blue) +[![PDF manual badge](https://img.shields.io/badge/manual-.pdf-purple)](https://doi.org/10.5281/zenodo.19405774) + +
+ +`synkit` is a Typst package for drawing syntax trees from bracket notation. It focuses on fast authoring, clean output, and the kinds of features syntacticians and semanticists actually need in day-to-day work. + +## Philosophy + +There are two key design choices for this package. First, the syntax should be minimal, intuitive, and readable. As a result, a tree is separated from its add-ons (arrows, highlights, etc.) inside the `#tree()` function. Second, functions should be smart enough to detect patterns, which helps minimize the amount of code you have to type. These two points are clearly connected to each other. + +Here are some examples illustrating this philosophy. + +1. Labels are automatically created. Every word or node you add to a tree automatically becomes a label that can later be targeted by an arrow, an annotation, or by an aesthetic adjustment (color, highlight, etc.). +2. Triangles are automatically added to trees. `[XP content]` will trigger a triangle, but `[XP [X' [X content ] ] ]` will not. So, while you _can_ add triangles manually, you will likely never have to do that. +3. Terminal branches aren't displayed by default (e.g., no line/link between a terminal node and its content `[X content]`). You can activate them if you so choose, but by default they won't be there. +4. When you define a tree, spaces don't matter so much: `[NP[Det][N]]` is the same as `[NP [Det ] [N] ]` or any other equivalent string. Thus, you will no longer get syntax errors if you forget a space between two `]]` (cf. `tikz-qtree` in LaTeX). + +## Some examples + + + + + + + + + + + + +
+ Syntax tree with movement arrows +
Tree with arrows indicating movement +
+ Syntax tree with semantic annotation and multidominance +
Semantic annotation and multidominance +
+ Two syntax trees linked by equivalence lines +
Equivalences between two different trees +
+ Styled syntax tree with color and emoji +
Adjust color, font, and add emojis for less serious trees +
+ Numbered example with inline movement notation +
In-line movement with minimal syntax +
+ Numbered examples and interlinear glosses +
Examples and glosses +
+ +## Installation + +```typst +#import "@preview/synkit:0.0.41": * +``` + +If you are working from a local clone instead, import `lib.typ` directly: + +```typst +#import "synkit/lib.typ": * +``` + +## Highlights + +- Draw syntax trees with flexible bracket notation using `#tree()` +- Add movement arrows, curved paths, delinking, and trace targeting +- Don't worry about creating triangles manually: they are automatically added based on phrase structure +- Add multidominance and cross-tree equivalence lines between two trees using `#garden()` +- Add semantic annotation between node labels and branches +- Create numbered examples with `#eg()` and interlinear glosses with `#gloss()` +- Adjust spacing, direction, scale, highlighting, numbering, and colors with lightweight arguments +- Smart labels ensure that you never have to create labels yourself: every word, node and even emoji is its own label + +Literal square brackets inside labels can be written as `\[` and `\]`, which is useful for Adger-style feature bundles such as `DP_i\[wh, ~uOP~: INT\]`. + +## Manual + +Download the [**manual**](https://doi.org/10.5281/zenodo.19405774) for a comprehensive description of each function available. + +## Repository + +- GitHub: + +## Author + +**Guilherme D. Garcia** +Email: +Website: + +## License + +MIT diff --git a/packages/preview/synkit/0.0.41/_symbols.typ b/packages/preview/synkit/0.0.41/_symbols.typ new file mode 100644 index 0000000000..4295516218 --- /dev/null +++ b/packages/preview/synkit/0.0.41/_symbols.typ @@ -0,0 +1,83 @@ +// Shared symbol map (LaTeX-style shortcuts → Unicode) +// Used by syntax.typ and movement.typ + +#let symbol-map = ( + // Greek lowercase + "\\alpha": "α", + "\\beta": "β", + "\\gamma": "γ", + "\\delta": "δ", + "\\epsilon": "ε", + "\\zeta": "ζ", + "\\eta": "η", + "\\theta": "θ", + "\\iota": "ι", + "\\kappa": "κ", + "\\lambda": "λ", + "\\mu": "μ", + "\\nu": "ν", + "\\xi": "ξ", + "\\pi": "π", + "\\rho": "ρ", + "\\sigma": "σ", + "\\tau": "τ", + "\\upsilon": "υ", + "\\phi": "φ", + "\\chi": "χ", + "\\psi": "ψ", + "\\omega": "ω", + // Greek uppercase + "\\Alpha": "Α", + "\\Beta": "Β", + "\\Gamma": "Γ", + "\\Delta": "Δ", + "\\Epsilon": "Ε", + "\\Zeta": "Ζ", + "\\Eta": "Η", + "\\Theta": "Θ", + "\\Iota": "Ι", + "\\Kappa": "Κ", + "\\Lambda": "Λ", + "\\Mu": "Μ", + "\\Nu": "Ν", + "\\Xi": "Ξ", + "\\Pi": "Π", + "\\Rho": "Ρ", + "\\Sigma": "Σ", + "\\Tau": "Τ", + "\\Upsilon": "Υ", + "\\Phi": "Φ", + "\\Chi": "Χ", + "\\Psi": "Ψ", + "\\Omega": "Ω", + // Common symbols + "\\emptyset": "∅", + "\\varnothing": "∅", + "\\forall": "∀", + "\\exists": "∃", + "\\rightarrow": "→", + "\\leftarrow": "←", + "\\infty": "∞", + "\\root": "√", + // Logical operators + "\\wedge": "∧", + "\\land": "∧", + "\\vee": "∨", + "\\lor": "∨", + "\\neg": "¬", + "\\to": "→", + "\\iff": "⇔", + "\\models": "⊨", + "\\proves": "⊢", +) + +// Apply symbol substitutions to a string +#let apply-symbols(s) = { + let result = s + for (key, val) in symbol-map { + if result.contains(key) { + result = result.replace(key, val) + } + } + result +} diff --git a/packages/preview/synkit/0.0.41/eg.typ b/packages/preview/synkit/0.0.41/eg.typ new file mode 100644 index 0000000000..df4814b517 --- /dev/null +++ b/packages/preview/synkit/0.0.41/eg.typ @@ -0,0 +1,313 @@ +// Linguistic example environment with automatic numbering +// Similar to linguex's \ex. command in LaTeX +// +// Create a numbered linguistic example +// +// Generates numbered examples (1), (2), etc. similar to linguex in LaTeX. +// +// Arguments: +// - body (content): The example content +// - number-dy (length): Vertical offset for the number (optional; default: 0.4em) +// - caption (string): Caption for outline (hidden in document; optional) +// - title (content): Optional title shown on the same line as the number +// - labels (array): Optional labels for sub-examples in list mode (e.g., (, )) +// +// Returns: Numbered example that can be labeled and referenced +// +// Smart modes — detected automatically from body content: +// +// Single item (auto-numbered): +// #eg[#move("[CP Who ...]", arrows: (...))] +// +// Sub-examples with list syntax (auto-lettered): +// #eg[ +// - Who do you think saw Mary? +// - #move("[CP Who ...]", arrows: (...)) +// ] +// +// Sub-examples with labels: +// #eg(labels: (, ))[ +// - Who do you think saw Mary? +// - #move("[CP Who ...]", arrows: (...)) +// ] +// +// Legacy table mode (when body is a table — backward compatible): +// #eg()[ +// #table( +// columns: 3, +// stroke: none, +// align: (left + bottom, left + bottom, left + top), +// [#eg-num-label()], [#subex-label()], [sentence a], +// [], [#subex-label()], [sentence b], +// ) +// ] + +// Counters +#let example-counter = counter("linguistic-example") +#let subex-counter = counter("linguistic-subexample") + +// Alphabet for sub-example lettering (a, b, c...) +#let letters = "abcdefghijklmnopqrstuvwxyz" + +// Classify body content to determine rendering mode +// Typst's `- item` syntax creates list.item elements in a sequence (not wrapped in a list) +#let _classify-body(body) = { + if body.func() == list.item { return "list" } + if body.func() == table { return "legacy" } + if body.has("children") { + for child in body.children { + if child.func() == list.item { return "list" } + if child.func() == table { return "legacy" } + } + } + "single" +} + +// Extract list items from body (may be nested in a sequence) +#let _extract-items(body) = { + if body.func() == list.item { return (body,) } + if body.has("children") { + return body.children.filter(c => c.func() == list.item) + } + () +} + +// Build a grid from list items with auto numbering and lettering +#let _build-subex-grid(items, labels, numbered: true) = { + let cells = () + for (i, item) in items.enumerate() { + // Column 1: example number on first row only (skip when title handles numbering) + if numbered { + let num-cell = if i == 0 { + context { + subex-counter.update(0) + example-counter.step() + [(#(example-counter.get().first() + 1))] + } + } else { [] } + cells.push(num-cell) + } + + // Column 2: sub-example letter (a., b., c.) + let letter-fig = figure( + box(baseline: 0pt, context { + set par(first-line-indent: 0em) + subex-counter.step() + let n = subex-counter.get().first() + [#letters.at(n).] + }), + kind: "linguistic-subexample", + supplement: none, + numbering: none, + ) + // Attach label if provided (label must immediately follow figure, no whitespace) + let letter-cell = if labels != () and i < labels.len() { + [#letter-fig#labels.at(i)] + } else { + letter-fig + } + + cells.push(letter-cell) + cells.push(item.body) + } + + let col-spec = if numbered { + (2em, 2em, 1fr) + } else { + (2em, 1fr) + } + + grid( + columns: col-spec, + row-gutter: 1em, + align: left + bottom, + ..cells, + ) +} + +// Main example function +#let eg( + number-dy: 0.4em, + caption: none, + title: none, + labels: (), + body, +) = { + // Build the smart body content (list or plain) + // numbered: false when title branch handles the example number + let _build-smart-body(body, labels, numbered: true) = { + let mode = _classify-body(body) + if mode == "list" { + let items = _extract-items(body) + _build-subex-grid(items, labels, numbered: numbered) + } else { + body + } + } + + let content = if title != none { + // Title case: (num | title) / ([] | smart body) + let num = context { + subex-counter.update(0) + example-counter.step() + [(#(example-counter.get().first() + 1))] + } + let smart-body = _build-smart-body(body, labels, numbered: false) + grid( + columns: (auto, 1fr), + column-gutter: 0.75em, + row-gutter: 0.3em, + align: (left + top, left + top), + num, title, + [], smart-body, + ) + } else { + let mode = _classify-body(body) + if mode == "list" { + // List mode: auto number + auto letter sub-examples + let items = _extract-items(body) + _build-subex-grid(items, labels) + } else if mode == "single" { + // Single-item mode: auto number to the left + let num = context { + subex-counter.update(0) + example-counter.step() + [(#(example-counter.get().first() + 1))] + } + grid( + columns: (auto, 1fr), + column-gutter: 0.75em, + align: (left + bottom, left + bottom), + num, body, + ) + } else { + // Legacy table mode: user manages numbering via eg-num-label() / subex-label() + let step = context { + subex-counter.update(0) + example-counter.step() + [] + } + grid( + columns: (auto, 1fr), + column-gutter: 0pt, + align: (left + top, left + top), + step, body, + ) + } + } + figure( + align(left, content), + caption: if caption != none { caption } else { none }, + outlined: caption != none, + kind: "linguistic-example", + supplement: none, + numbering: "(1)", + placement: none, + gap: 0pt, + ) +} + +// Display the current example number inside an eg() body. +// +// Use as the first-column cell of a 3-column table (num | sub-label | content) +// when no title is provided. Because it lives in the same table, it can share +// bottom alignment with the sub-example labels and the sentence text. +// +// Example: +// #eg(caption: "Example")[ +// #table( +// columns: 3, +// stroke: none, +// align: (left + bottom, left + bottom, left + top), +// [#eg-num-label()], [#subex-label()], [sentence a], +// [], [#subex-label()], [sentence b], +// ) +// ] +#let eg-num-label() = { + // No figure wrapper — a plain box behaves consistently with subex-label() + // in table cells without requiring explicit bottom alignment. + box(baseline: 0pt, context { + set par(first-line-indent: 0em) + let n = example-counter.get().first() + [(#n)] + }) +} + +// Create a sub-example label for use in tables +// +// Generates automatic lettering (a., b., c., ...) for table rows. +// Place in the first column of each row and attach a label after it. +// +// Returns: Labelable letter marker (a., b., c., ...) +// +// Example: +// #eg(caption: "A syntax example")[ +// #table( +// columns: 4, +// stroke: none, +// align: left, +// [#subex-label()], [sentence a], +// [#subex-label()], [sentence b], +// ) +// ] +// +// See @eg-syn, @eg-a, and @eg-b. +#let subex-label() = { + // Figure must be outermost so labels attach to it (not to context) + // Box with baseline ensures proper vertical alignment in table cells + // Reset first-line-indent to avoid misalignment in documents with paragraph indentation + figure( + box(baseline: 0pt, context { + set par(first-line-indent: 0em) + subex-counter.step() + let n = subex-counter.get().first() + // get() returns value BEFORE step, so n=0,1,2... gives a,b,c... + [#letters.at(n).] + }), + kind: "linguistic-subexample", + supplement: none, + numbering: none, + ) +} + +// Show rules for linguistic examples +// +// Apply this to enable proper reference formatting for eg() and subex-label(). +// References render as (1), (1a), (1b), etc. +// +// Usage: #show: eg-rules +#let eg-rules(doc) = { + show ref: it => { + let el = it.element + if el != none and el.func() == figure { + if el.kind == "linguistic-example" { + // Reference to main example: (1) + // at() returns value before step, so add 1 + link(el.location(), context { + let loc = el.location() + let num = example-counter.at(loc).first() + 1 + [(#num)] + }) + } else if el.kind == "linguistic-subexample" { + // Reference to sub-example: (1a) + // Subex is inside parent eg, so example-counter already stepped (no +1) + // Subex counter: at() returns value before step (0,1,2...) + link(el.location(), context { + let loc = el.location() + let parent-num = example-counter.at(loc).first() + let letter-num = subex-counter.at(loc).first() + let letter = letters.at(letter-num) + [(#parent-num#letter)] + }) + } else { + it + } + } else { + it + } + } + // Hide captions in document (they still appear in outline) + show figure.where(kind: "linguistic-example"): it => it.body + show figure.where(kind: "linguistic-subexample"): it => it.body + doc +} diff --git a/packages/preview/synkit/0.0.41/gallery/tree_1.png b/packages/preview/synkit/0.0.41/gallery/tree_1.png new file mode 100644 index 0000000000000000000000000000000000000000..833269d805739e3685db64771322c7a8c356b15f GIT binary patch literal 48407 zcmeFYWmFwqw=P&nfZ*=72@u>NxD(u+;O_3ali;qw-Q9_x!68U+x8R--2o7E3eZRh^ zN007v{@p*f#$Z#mYRWU8IoGOHRjVRYl%&y+iID*SK$De`R09B{Fz~M#2@Y)eR@&GG z0I>He3K~+6kB^(1n_gaCt*x!W!NJqh({JCtefRENP*4ymDyp%uaa2^4xw*NTnwqAj zrjCw|uCA`Owzh_bhN`OS&!0aP6chvm1Y%=jx3;z{EG(?8t?ljYz9|8wY9ZZS6B4(^gBB{i;IinCd4w|84x zo2{*FcX#*U;bCcMX?l9PgM-7@uU{)FDojjFhKGlzrlz{Ox_Wzi0|Ej90|PlYI66B! zt*orU3$>+8b8!ra{4s;a8g)Kq+Y{5NmjL`FtF zfBqaD9UU7RJ1#B`6BF~rix&_Ggn)nm7Z;a?h6W1@i<+96goI>ZV1SgAl#Gmwf`a1N zvuCidurM$%aBy(nzkjEqqC!DIK}19(CMKq&q$DRNCn6$3LPA1AL(|jKV_{+8=H~YB z@Nji?{r2q}JUo0sL4lv2pO24^rKP2)sHm{8@aX7hQBhGxM@N2s{-;l$78VxR*w~nu zm~L-xzkK4Vk{JHx@<8J; zBB-Y9q<{6Ub} z(Tce~iEE1)#}8=0FXy$9^XVash0^SAR+q=+%-lTO$=h4X>~Rnl3* z=A-AO!Fp?YWj7^POcS}crgjI7a1LI5`7gq3UpvZfQ){l7_eyJ)YD%Z^0KMIOOI5F3 z%D2PPFJ4Q39Y&ApT$Go3Q|fyf#p1FxMZ}qT6fZ}lIkWqt6s`j1Q3Ak3>2zpJ{4wdp zndys5cJ0I2m?!7&QCe=Df1Uodr6cOS@Nz#Q-(@mZRtZ3barB2);caGnGyZkJe z8fI_gW9g=r?%mH7F;2U-vOMP#8MR{!@rvHED@@F6;L zN6|f;Jf7uJY;1o`Oezw;<6t58Qf)YJ>L(ihL7podQGmy>mtb9KwJ`CHUwrYtTzm3y*qaCdSp~M#^;hX$u#z>ypHw#D>j0@KRiqcK9Q*^-$Nn*&Mh5TaE?aMJ(X&K6H{~C z546iDSy-V>v`esvEU~@YEQl8)U`oQJnGLmAcTS5G6oWwvB)&0z>!yn36Np;u{Ifn> zU%G|aB{AXSiXxy?<*N4lL@ah+EKzw4PDhoVx>ZF|J|;I(xHu=bv1_{+SMB^5yu9N{MihYN z@D;LmtpF^!I1-H`hW}z!GT)XvoeinA=7gZtQkW(J|0�ybLXaXI-!HBn&Qob~t7e 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 AxBvhE literal 0 HcmV?d00001 diff --git a/packages/preview/synkit/0.0.41/gallery/tree_1.typ b/packages/preview/synkit/0.0.41/gallery/tree_1.typ new file mode 100644 index 0000000000..4745c652f4 --- /dev/null +++ b/packages/preview/synkit/0.0.41/gallery/tree_1.typ @@ -0,0 +1,14 @@ +#import "@preview/synkit:0.0.41": * +#set page(height: auto, width: auto, margin: (bottom: 1em, top: 1em, x: 1em)) + +Tree from Carnie (2013). + +#tree( + "[ CP [] [ C' [ C Ø_{\[+Q\]+T+Mangez} ] [ TP [ DP vous ] [ T' [ T *t*_i ] [ VP [ *t*_{DP} ] [ V' [V *t*_i ] [DP des pommes] ] ] ] ] ] ]", + arrows: ( + (from: "trace3", to: "T1"), + (from: "trace2", to: "DP1"), + (from: "trace1", to: "C1"), + ), + curved: true, +) diff --git a/packages/preview/synkit/0.0.41/gallery/tree_2.png b/packages/preview/synkit/0.0.41/gallery/tree_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c8eea9bc3c7aafca4cd0f8e7471299148d1074fc GIT binary patch literal 169172 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 z zJ1XOTUg}k+(BzbLhG?n?dMHq=lC3PsDSlmqyUUoBe#zf8R2CxEr_=Dx3aUBRVb-DB>MUKtF1jX=1 zrWgGqelt%<(3P1tvT#+>ey1p6xo%Q+G22Xb zGeE?28azb5s}ZkDE67m;-{@EiJ0#-Pm!KqWADDu=k?=dl zO(-GRQGPn6xINWtFu&-oqi!0(t>kU&5ky)9UY-<1Q#@kV@`DaAzg4-A zmSZfm`o>jk72{+<5loylPZhXbVf`%$%9k6uk?ba^PyV$+ zTIx$()S8_@PXb7feJD+mD}wxKN&zE1B`gO%{b?$2A1UBJy&b^qwvdBD5eci zpu z4-4U8!qY*?Pc}5jtV$}r7|czIZPg=vf@=}H4q)1YI5j85owP)!VE_&D0f(KRF*0C* z=ok!kH2RGlhlZ}G_F0m|F9*$RM%w5cP4t6(AVjh5f8xAX3$_e+js-z>k! zB@4ZHDuB9~XYQra%jd;|3Q&z|#rdJwgy7QL%xp97Uoq3kc2{gpl@5$fsV@jU*N57w z?L1nLL@6%Ppcax@&1%T!nE@u>05`G=8&@zvw`7A;k~GPilC;j7mD@It|7{@J9;RGd zXcBeMC#S?aj*SguxY&Q4NXn(&lsnP!3p*AKeMB`FfT3dfPeQ6o5ND{?h9Sw4rd;f( zi?!OsQXl8XX7t~yWGnCWy>Ysa@qHyt8(O)l{4s#(}vD7r?dx(B*NGq^+wks-TQW(JBLcv2!%a1X3@?#9=FAz2;Kwc!e*v%{dTl$_z-=ZV_ zDVOxXbI`d$N=X1WG0)>Fns7@5bHF5Uv4(_gc$25i5gskS7C#7qW{=yhjR%7VK|K$a z$U>uO8Pyh$`d+CauGsc)lO zx%mz^KgehjMY_C*5?&P18xsoQBR*|ooR7oIBzmSxOJb}4SJc#gemx+9)lAIX$jE5% z;*|9)3=1&y<#Q(DzC37>DEv+UQ{&VD&E|)sU$YC~16F=)eunAEjD0dJNEZEd&v|bklBQw4f zuyS#U1)p~Coml4h4Qx#WZo52v>WgG0Q%4(zx@Uc zt@LEh)Bd?oAwTce^tQSYQX^Y}MdDJ)^jzmuLDat6=98~a_5R+s%a)$wImu}b-6UR? z;l$~YZ2qkQWCD?yxDHFDi&lFn4`nl|#y;FQNZ zkP1dO7^iQOI~M*Tm*Ii{aMKYd>m4cyNIs@!meI|)z1h}QC7FF2zx_mD_SmUoB<_6Q z+~+gFHV^r+X$z;O8F{|W^O?hvJ~9y}2Ve3|ZuC)o5@Xn74Or0M{O1)@>T8OmyPV7z zMpvNwf@W9)Pi@Ivp(8r%J&)Z8cLCy%O?1;HSoBj-QNI0E{W&k0B~ioe!HJJ=tJQe0 zR@Te5ZlG<3dfLk6ND+R_}B7;;`Y3xcbo(#xZUJe7?k?{$d3hO z_6TihEp;sJM#y=MmG-Rq>);TpZt8CxQSfUmvkZI&$D~EIxE3ZpMg%T^TDX^ti}}Ph z$(?g;g!Pg4(1DgDVov+X$Mv-ltG%JI?0Gbnd-W(OH~^-g$9D2ue&*=c>eNMYQnc2! z=+Ui-q3NHcx>t+G3cl`I2Y*lf_50k4Z_nSWCvs^nI0?%u#2quVHzPM0>e)z`7_S7m z9%^%Y*F0KoPhSDHs_}_VIgfcUO=_cXsW0SdGItQF zVNsLGc5nbn5$m!utO8OcM!5Xn3%<=G|IL5zHlr!?mOd0jq=?L`6)*}xVbl1P%=9S- zMvhwcRnElDU1yUh0vB7!Qph)x=JJ>yqT#PBUyTT8tOiZm+w(hcETE$wL~ayO`u+pP zXmC>nf(9iKtex;Fs)qU<_D)>vl zL*L(n$@3!!-;)O-IOhH_1e$gIv$}ERAY7TxLXD7G#u!(ZbVT&G z#$e_lElGssY*-dQ3R5du@d^-21Q0SOKUaD3eAo|ZZ!ZqTT{8${%e@aiwwBfesn>a` z;R=(0*~G`S1AtH_1e&Pjp6Il}^}I&31}}65wcO_3QjZFuZw&J00FgWxMN6v1oI7~3 zdb}G}BBq8csfK%Cv z8Z_Wa-eFmrgA*Qa@rx=nexqA5iyZ&YwNU_hWksnkoQopq(!?Mv-F1hB+{ukJXiDB) zXb*Pf=cN~S3FAFFkhEw}MnqNig{1p2*U0Onf~bFN)*I+BjDxDK5?LQMY27yTvGf<{ zx2kQfq*HwTFj!EjFUECF*({kQs0b-$3kCo9WF%KmiQ5cztwSxgmES9tzO$Q1xK)BB zC6e#BppA%F6MxR}fl}0{!j_o>g<6W16X@e-gN8|gT2`%||NlT1BA%gKer);!&HN24 z)pbZkL$a7Eh?}Q(3@!5mr|HR(ACF`sa_-0y!1V(@YlXNVIn+S#8u{Xmxfc$w9@v==9Ym`{SxCSO_k22f>V zA2r3TyxS@dBa%xKtZYbGb0c1|WAh>-BctL;FC(u4pqyx zPb{j2hZ9X{PahhJY})T~7{-hIe&Yepf1(eOpp&5XY%JU@CAyH+ltM?^KAA@68!=h$ zl!W8D#K#@NU+O`#+7Y-XOP9eK-tW#fhNDt#IwHxmJ|Ii`PXv@M&1cAd;x9b-X;P!d zpdeh=7~_&|BEFKvUiMjNovv_ zbz%5Zfk1CMcT_m9Lgyc~KZ_qEz!%ZPN2hrUoxs-s1hHX6ruodmbE9^x%FdmBT6v-v z!a@Z3K;Q)ly#g0DlBY}_DpF|GXhAFa*%BzFSnAbmB-Ewl1&6gf`191@Ph`i=7>LNY zNc*Ib!h1PY-T$Ln8TutGfs7?g-^y!A3LdHkxp70}lnVTuLm%4d;rbTIr9~{gxkl#P z<6PP!96twS$9EazK@Gr`QTst;GEL-Ye;;oAW`2JnPz2T{CT(u`Q_>Sqfdd{h!MS`fr=Tz;4khfz}P3(J{OBzvaMf8m&a#*vA&=3PBsY=qr6dC!IDu zH1&;hBq*rj=~|c@ULklOg3W|u$rkKHM?|lEL{PBM&x#L?n21NdVmcsYY}r?*Ay3J+ zbToOoDpsJF{uMSyi5FYQ$xB%PqW%vG1#m|1xXL>;?fj9b^a2wgZ_NpvRzYoA;rWf4 z-h#u?X5KCIO_!FPTfHQ7I0jOz=x|@1M&$*By~seNLu~n75q9YWZAna5x09v-T)$vk zXod%OggX0By+}5B!yKh43CdJz?S5ZWA#jmgj6}hm_H~p)D)NzIc@q)6jS@Wj`; z>0IAXNq!^;PLrD|{}TEp4?7@Y=}c)tY!mSKEPZnf@5m#^i_8Wk^QtF(mAFy*C;__a zM7!Z;8B7b_qRS!N~B!3ovDb8)zfE&=$8!uog^Nak9v&?8s-h zC@!J26R1lFf9B=(kctvJ*66Unwmb+O1cqR2wM)1!%Kc5vycZ@HN5Da)5*#GReL;)HU%VRf9+7bnu;?c@iItO^E#d&$ z9N<85B*eW%XUjY)0DOuHKd!5(+Z2_=ysYs;3A`ckh7U)Rj-qQ>x)T-0Vid@8aR3zW z2|pz_orqKT=FCOJbzbP;rdYiYG2JkD+Oll_+YfD&NPvsi0LwSb=7da`BS|pqoMK%| zup`Aqg$D!=!^5-VU-gaEyx(N6Aj*pMoCpsic9vur4D@e@sr?DWKgaw`=xiVwND0$@ z_kG)yxdSxy#N;}Q0=bonDI%Rc!0TNPTiY)gnV`_vt3rBYSV#`v{0g9*j+#6EVHgOY_ss^vvPJ0)GhiJ2j#7&8 z#%JZ}ynZvd+dj^2XE3RIMuBDm+~L4~P?)I-TehJ-g_d{~QHmC_0USpN4PY4?%^fQu zKb=}yOpE}G$uap-Ilt*5>OI4l6J~DGrNmc!1qWrl97ZTq|kNG}1$aZ3rT$ zV=jA=vBssot`^Wz!Qd3=pq_u`SG)N|?M>eT{8gdof&j@;%s-@6Fge*8K>=Y&73SL|1;h9HYXPtD{R8w;>OkExFQ$`)ZpTG`X)UDhSx zCGXeJYNYD#mvxzU>3vmsdA79jv}<;J7GSqTVyWKg0`PM_P&OdtEKv4kV(+?z>Vs8* zA>WD|SA{5i#(+mM z^GtSc<*1TRk2r7X5w_HbUHAx1?Gt}aMt=Xze^A>kvlz6^0dIMiEsbAyKPqxYIk1YZ zNbp@iftuEcdLNILf)M5Nb4I`|w@YI~LFgpwq%btXMPYKjR;9~6n-WFH!R>Z)Ed!AP z${BP5KzA_d!cK+vg}k^+`bKMBj%M*yszI(Z@%BRb>v?R~!r=63!ny6v#)*k$MO;O}^e zk4Sy%`Id1}9hTYQ?ac~peou}~^S12W4=0j8mUK_^Z87r5nI0t>lieFRV6U5uLKA;? z`V01qF5dS=y(?dcHfat14ZkaTtJw;5H>;D~k5l`!CQvePPq-klKsA!VHoHv^mU41N zNl}?1prn8eP8P7+_xBYC=c3KOEqK&US9mbV`f#9zXNN)4|C$O?) z=<|-nAos_C)m?o+QeaIc%Z|UasKT3qu(ok`(B8fdoM0mTFdI;p`YD+Pcg-nleSJ%7 zzUBEVzGQav&ek}O&!`ZOg~JR1A%0av2O_k{sa*h`g15yp4ly^|*RCvXoOST6zyg zO5hDhjq!cEr10#~&Ob6-g_$8Pz#SmX!DQ67&m3#ZV}Jw+jlTdTO0ql(o=NfP$ z8O96=a8)7%h@2;d>#oryMYQxuSC@{8x{ZntPl@+O*ixvo(2c+FmAQlhr`B;{;5Dg%mnuLbdM! zvxDo62pl=E1wT<_FU5cOIt0S3k*W}UmDXBheSZ9I+~Ro!$IpcAXG`c2DDC}Ev2Nt5 z8a)0ITOE|bIx;$x2PNFL=HbD$J-yZ3P6(OSm7zRCkT+q%*0X%zwe!7RAU1;&;^z;| zS)BAdLMSdz*zDQ$xy?BaP7YBE8xJ;21{^p6eX$1z2`hEE2y>i}>rEtFZJb0RXR_*- zoZHuv(jE7*f%QIovGi3U__Oeat`lFH13DD0zf-!|hnWAqoee&zjpL7~^Y;-^ctt}-3^iNmxET8^3!%Gq z5#86o^1_=G3(2K{4dIgVeegO>oSNp1ARFj#r3gO@0$Np2QHvpp4tCZXq^Knj!d*jJ)Pn4l6*X^z4+s@wUWN02)Ov!yGR+6a#mkWR*W9PYb--xtYt2QT+ zQaj#x{R~D{Jll^ANXEXBvhSYhXMOFz*prI9Bf}zeNYvl&QfHBIC`wgXeP-eTg{U58 z!5HMn`r7Q{)}~`&-s1W2(tkCTrUZPR1M`UTB1mwZURwx#1J#EobZc`lrzO0J2sRO} z4U^d3C;>Yof~)a`QY5ljS$GL%qi6qQfcU`Hy&5E^h+ZDt8Mad@m_ z0s^eH^0SK#~0%iE|VD^Wy zK4mIrjJ>;@&#EEhggUg;YNmFS*I@Ep4gYchC8w83E4U_eJ0A)EIGvcR<^RtvYjHyg zZ)Dm@@tPVh6~^*Hd92ABZZO3=#)iaD=X4ZV=6ZotpYE0|*)2H}{10*oBx+j&JpUB) zMpRBYfgHIJW5bTIEm6poP_DMk36g;2R4gt6f~aDtU=_i;MqhEEL@1X)Z<@){Oe~L+0aEx+VP+13ecB98ztY?$+SmUr=cV?_wv~5xh-1 z-t7|Z0096+aCDKt@Zxv}?r0jO)0emHUC|G`#AL!Si#-hMbMA7%vz_O}-?gFq(EcP@ zMJFzipID#;rl?0WYyJs3xUl*+XzZgQeO4a)L}OH6@IN!enO@Ji^=n@`kJ&KcQrB%1 ze+A=%|J9<<8ll@HuTxt1$jC8`Lmpa(Wy6EaqpSw7B2yhM?COE)o9MajEulK#0}ncA z5&YQBkNI}U0DwrX*BI7xPBD;xNRtLT()ROUk-pJ4YqE=u>n9F*F5od<*tbpXxdi)_ zg(*Qg0)eb~W4=F7=9xC<_5E{sY|dKlQXo*#+R11}ZWdXQLXu7a9_+ak@e)f-ELA3? zQ1w@yuYhE4(&2^OXQr!eBp1O4vMx-$NzwFKcgbSOvRudOWS-cIYvqPL{z^UyAaKEY z)WvwZj0+hcq8WDRc!9=$GA{O4xFh-o1%MBqn}J~{4;s9TgkOaI(e&R4O$#TkwrOzAD)>VTQE%pB%B^0NM+YQUxK=Z4c-YcfuMq+O+2-YI_iYch-VPrM^#Bwk_Yts)f>rR? zWtMBGxH>lwxZ3Hx4azWyqb*z`vDVrzzxmlCp`p+a&4cVODSNLS|4CpPsZ%+BdTV>> zY)O4J_p9as8mWv7d{NCaclcTG2XO|Fl6ybyEiDUC95Z(I{U6`0aBl8pngS9%a&n!% zR`a`lcs81a0xZ9uOgtYE{EuE0bIJb!txDXkiluEb3(5HPoHF4Qe0Ul~yrHG6$}&BD ztHRJeiC74I6xm$A8&5irg)(z`=_F+DEk|EBg+J^5Kc+*t6oq!etunkpyTQTdW1-x? zx=gU8(`T$L5l-b+evgf_nV%#pB){xx?N&-`JmnJFLE8;UhLW*tB3zR+CS1i-$=k0* zYmKkJ=pmk3sj5Oeg$#7#O*k|8OZTq5|G%D0Gp`kR-_>|^-!3Ij+(P!2a zldYQluMcF^(G1=hG_^SDas44<;t73HTp{k!9CuQk-G<~hSX2`{S=P=Spk`Y1@7qqY zjvwLjpB4!Vb2F9;GJ~%+pK$(rZDD)ds0<%OzM;`H_}V)m=pxH8s#2_t!iX2aHYP>9 zVu3NxMGq~AvNZc8HK&mO(oJDwwo7J9h@Wd(+ZzI5t$#|N~ zg)d3?sieZ^^Rw{hK?Dp|=4G7Pze6>icDz{h*H7Y)Fp#6*A^Eb>YC}Fa;RgMjXA%C( zj|ubQvn()v23_kB8uW^Afvy9t7iXzU)`=IH#<>uT`X4YYaqNUstL!ryakKQFmXu$d zfemG5orOAhN_d#@V-DkqGx&3IH8sJ*pJn7edsCP8i!#_I%dGq?BYSORB+b3!s3rPo zxGF60Asom%)a|s-nxc&i9wyABr)X!&u|#@->3wCtOx-4C6b+DAc>2&=v=chM6%%On z^}?KUa1V}RPXw*()=}IW61J|95gKD zXjAO7v%H|8S!*zuPk`$4vFat3dvcv`j%lBrU2;CoQO(!ZikUH;(J&tv92TW+>hRjJl>plGoaUM z9k0Fo$5x}7jx|}Y*##N73MqI_Mxz7fDu;~o^igI1*pKc0eJZQ1EWJi}t8r}ruf~0I zd^OEaiaZlJ>ma%@TSdRqBGCq1_LhP!o`kSbN{@F&{x~bw}!sl$z}6u z;g?DaduSR*`O&Y+YvruYr{6l}+ubmhe1!kZPiFm#zWrhe5F+fPXiZFNk+8`gRT9=* z=ge!-BVDvOfQgX#D!zWSSsGH%a-iCxS986l(X@kJU4SMY>e{=f1z#zNd=n%9K6Qgx zbT@NPOWnCgU7tNE_uQ3ZOU{%&o;dV{>z`bW{i6(GSdX=!W+&F48i*kqn?jL&l(Mq^ zNnvzXD_|nzYwYo%F=FRx(s|Kciz|AxsePf^=^9&jgXHU}`WOwIuJBzcWw!&JFZNPh zmyDT7NVPflEZvdc=|n>RL5(Oqf9Q@zmN33k1C7i3 z9ovQ3jOFS@kN8>OH)9Gd{IzECn{Sz_e=iqMkf&z5Q-P4m7!yr;Y}74Y_`Fa(VUWBH zll2A$B)NUHdWK2N;m)wNua)~78evAg;zt@dh%NF>rmE-1xuA_vnhpb@k8XUy;GOF5 zv@(PmsuV-eSB{2jr2h8&;O;GexPV$59K1>L z-~k$$jchdTDec~v97;$^&YhN~2J-j7*wA!gW=VW8hSQ`B`~d)wK&@}(25R`Sxmu><--rX zA49H+&Pr`t2iJsJp7GCtYWuZH*e*JEs$e`tV<7?#_Be}<9x*$0jTNtnkwR%lDI~-7 zaB~^nz@A7kpO@dtbVKZ?B*EQ{Rhp-7L=tV{0a9LK3%ljAl&B<>ihV@ZD`d_%wUcj1 zK{b_{oY>e`#DtQydV^!Do^vT7qjiuCUw6CHDNq3M3p{Vl8h5gT0y72Y0TG7&oMYk- zcT>cWu2U}n13?l2>y-U)lU0RMMl4oKKNmMUvj`F-{YK|mpa6Y@1yRV-aFc2~pA5y$ zG}(Ya$Pqb^XgUeVTfZb8m2Z^#h*)9~AZkvjiP11Cp0Xs#)`mwn=WOQB9gu`Ly^Z3b zg%d-bH6*il2{r#s#za=lK7N=D$Dt)`&I0Ff<)JNML^=>cZ@CyKB;Tvv1?9B8V z%Xs+--(XmyE^&&U`MxqpFg4JimAI2Y29dU-=Ny?g;3f@~D%J*~;KEh#3$s!W6sA7pQ9I;+Jr zK8O&#LXgq$h=m(_qQE>CH=R%`La}(X42R#X(k1@q1OA0C>b*02KYb9XdR{rcvBL*F z7>IEQr=@uXqK~UKs6{PM#)@DDIsm}vSX7DAAyFO`@cTfu@2rFR#Tq1go`CyVQBRf*SGXM_*d-$YYoy;RI>sqw6sJmdjF6ArLK1hIK7IvgjxwQ* zc}SP;)okDliOrW?;wM?qqgHwcXBQL+K4M+0KUuxG7d$ZEY49awE;WrIS%cErx=32d zHjGUu_TC+6jXs2Lv!jvi2O3jN>`Kg_2uoG^gzG(5DEw3DHdp+Tn1?bH*s@0WjKi&C zy!>OgRHX7G!2TsJ66ob^D{+0F?-n1|zYPFs;ez0|R?BhT?)I%#o5~n_PVwstD6vJm=>HzVDxCpLDm8QeC>@6}bvr??c zSAVp`eY0n^a660ycFN7mj@)0g!=}HdiHEz5qIP?H{jg#r6!Qme?h$M4=yt!~+Ov%Q zkPo_{m|#)z8qwK{-7_0%gKQD}Ge<3YoIhkD<|_)84DKx!@Q^BjawM{k9#_d<(Bnxp zLA=(~Gr?Yb8OONrn6NQSUPYu}cWh~)C}yFGJPS-LU0UlcdS42$$d_LEQXE@F90!L% z%q!M}T^Yg_p0gW}aSM-!GEjk@*w_D16{qX)|MB#dVNrG8+e1r(gwov|(%s!C($d}C zh=eplNh94kbSgP?3Jk4;#DLV$@D9)Kz5aYXhrRY*>%P~4ReR@6%DPVhOuBkx<*z%k z4#pazLzK8`hV{o^)JZUt7&hu#dh+^IH2c^S!o zY=8QKY;&q_heKmtUEjv}Oe7|!*g`h<75|Yy>yPj@5K6B5^q4*?f!@o7;L_1MP{nsC z<#!C*CH3nov>+tj>XFSJ^(ps8OXM+p%*KN<Wk@k(4nW|N8;v@c=zgx(3^N4F%1uk zvNfE(S&6tJ2PSeU5i-n*vLG=MQ%3?3LAiIng~gA2RUB@}bo8MSrjp4I1Wz3^;v0AdB~jNyB7pvpuaz}E$bv5Z{;Pr| z^*o!;K+CqxW4KWNs1SJnUR(AsSW&c>NO3zGMd^>W2(9l)x9O~l#I*W}WU3SDT;SmZ z5LG1OE(R7y|2(g7U%0Ra-Os-w)*gTc=#4kAAC<+yvh*;w2L|x*St42gxPX9SI2GdT z()A;9gY-TR!%@@qG?0bM9+zB@By_mZx zS5Ptg2e~Jl=h;L-W}LbSMF(&EVW-u=$D&6jU@=~^gp3AMPUJ!(j{y_sO`G}|2{cnV zziC$D?YhPL!n+ldvei1p7C0weTJ1u=RFQ;`^O4b0?&GMLpW+;rHen7g6;Xa3xmY5E zl5H|nCy85IxB-fSQ!Bo^>GcxOWIi;#mYQl&=u!r=a8Jaw?}$R&b>uwW+$Q?G^Yk+y zSI10&6s^*Eb&K3}$_MU#Y}z`x2}xa1q7y2PAwRe1@nkofr7XJpp>V(DIrK3c5-E{& zRnfNWY4b6|dfj+dBJoi6Mw^!Q9SwDRw~hE%v4}c=Tczv=Gx0kD%4)fimcH2#S0Z7n zg0DZqyXJZUT7jOUC!7_bJP=3u5;D_8+H<4LS;{edZ=S!Bki|7YPx*ysJ=%m}g7p#+ z{(}H{Q5Xj!U1%k8L&aw`qYvVNqupm(y~RCrGUpWuFlpN_6~8EN=67opdn`0_tUqRW z^T`LYEOK9hLGvi)l@Bw4jt36rs?whT!}W5HuPImMt@I>|A6F31UD3D;XY*_MkhIv! zfN}d4aE+D3aDQo^+}pj6gIRhw6~*Mj4WaOKb|@jxi>c04IM(h0kHM*?3p(7Lu_~0& zB}B-M#tQ$Vg4$$eeQ*Nd@`f|Xwe+{;zt{E=uX@?ayj)jhZSy~CXLgzo7bJiL{1i9b zDKKffio7*-U5}Jp?EM?)cP?-dC6*J&Y{s9gFhrvX2MHhg%;doGdpOqcuOMU^3_E9& zxAKecvoph&so&%f6r^Cl(D0d_ctel*d5I08*(?y~M*~*UP^FvuDC;`6hrbHQ?9*%se5r5mp?WKIN@NMr-9A*jMyuQj)>paHD^(f)ft^M3I1lao$Svb`E_2 zaaI16t2fj7lIqqXN_sx)D2)%M(pBiH2z3PsDhLruZFQ(qD4j|nfbX6Z?x`wGL9-Gu z$WdQA3B$}bCaJoPZ<}9`{a}Yneexb?MqQV@^HwNP*O?=ls#tDkHT9g&H)3F@VD!CT zF7Z3cI`56ziDL9OWmNO_@8YB7uKEP)+LEB zQhXAmB{>SocbkZ;1n8$*hW7-aNL_PQ?+anNTfmA>FpI7iM9{JEp*tD3A5wl(3erpx z#;ET}K4^>g@C$Tl^CZ~ut z3$hdqe~u)?!ynAxg5+Ug{9CR;E3p0BE;-utc8Kx@`X6uL{gz+E&il6rRkz$xsSh{` zk;=A$G1CJ#GeNjRo8L6vdUkVNzrFo%c|Z;>qP7rWRgyp~R+4MlzT zs^snA_qoUSM2}vJ{BFEuCudX8>4`L@&<1YON$15ZfMlV^KNca;aZ0m6)7X-WljzrN zTvDXaj}xn}M*M&&Iwd{|a>Twr8_gWlh^EU%1?X99+Oc_XiBnwZY~F%13F^OQ_WNxH zZj0#c1YbkglzNdYQNi7XS(Imbovhz^(L%#>6D1~#ve8F=U{xv3vPmB6b>i2|ow-lX zZ>bDE=t&W6%-VL!`8ra1>{ z+uzui5Z=$3cJo_H64vVObdD{4Dlo@+KVXa*LRNY9swBXYtP4`WhK)CoQ5#2=N?IUX|C zfDF&KXUV#jf$I}=USxFNLbvD6-)K3-63|jfmvKE35Z+A{f1#%u@0(=?u zu@eH~M|lZqJhvyY1uyXO;RST*<3Au{=^20DS$a|~qyHeq=T~e{!Ey+dIu<7jyF#lh z0+u8WRD(1mG1T=w6!w0PK}c+9GOJcefd8`@|6UilITa5@l8#UODm=Mqxbz-j2lV)q znoL_CjAB1403=7z#pU`+XF_Pop~)nN^f|G5z(wC44WA;$@RgGj-tT|H%!d%l5e)mo z!w`VcdqE5qMiE)Y-ssU89YfoUO%4)CN=!Uq8 z#Y5+x5v9FDAsX^Y$BF*-F50DK^q~w8>+5*RvO5KOTUF?avYf8&q&cQ~`rxspt@EIp zaPL8+OqKudBebn;zcyDy13Yj+_uERjs7Zj^p&4z!2Y7`~oCH@%Vp4F(mN5h@^yApt z-XAbmZuUlJ8{}pF_$EpS7}Aqr8u!#9{*HcK)g%Wg$5p>EnVl&(_cPZ!ApQDoD>-2N z*Ul+j>$Kw?(lJTn`Wwq8&ve&6No_Q_auzEi#UVynj#-lF20_J^yaL~V6rX45Qk_5$ z(44r8LxmZpy*5f?VuU5xF+Z4C8bh(|*MVYQ+c4&@Xu+~N#k`8evX|h1LM2CBj_m2Uh~pd4*P^lnO|q>Bqr}oa zd|UW5DS$ek8EVB?5`CE>Ux{^@s#{(H4EtAocd!`;kJFOm1yGRXIyDW`-GUJSDY#B{F z5}}(P%N|5I)-2-N_J;v>d>Q{_r~ILk(N07;f|b+j8a~J1kcG-VHrtY=KhK8*PTj4P z`Y*APV!gY~6$-YV@*l(xe^hu#Uyoz`3UZ|kQ$HzIjv5?9whU>;M`+D&i}S@HY*Anz zIl8hH^rGECGa>!Sor9I|&V`x2tm_Yx$rv*28fCeD-%oS#Lw7O+{lV9&w_liSy623V zb1*oTt^>`e2O(<~YOJdK^yPltnrFa-IxE?tAAjwukof$?H9D$WO34PS`TceLG=1 z8$s3I<1tf>y0e6~UECQDgqsOJ=t|~~-fh)dZ9w7^)W_bHXnM4^hkg-WAXHq>L6~r3 z(Z*hDXGnf{ZuFJpQXh5)j7TP7uJQk*R*J;=UP38zW)Z0s5K|=U$AZUO!yUEA(kb_i z0^_;(6%qj<#!t|+tuBkmC8nsA&GuSzLaznH<|{#~IQB;Us(JL;#zlW7*Yy6qoL5|{ z>^ZLY1wqKs&QrS(8e4S1Vom#$q=d6E>nWN1&cVL!iDG9GlVnKprb6cR6_Gtm70GRnvZua#?A#Fhyp3&B`h$;RXP9t>z|3!FXRpt0J!HmttDi%drHQ zv{H4DOc$YB0$R~NIzI6ikiQ| zA+W%zQuBzcQ;L4kTEifAIESx1XAS^J`#OKPRw9dMYNEZ^#?iFB`_cKs!}k+OxX&5H#3WWR}tId_&`eNWabMHIkRs333m+Z;PeD#t^!Zis3k z;8HB9lF#pPHq(+~Cv4tXV=z@GrhJl}m`MZx=*Kykif;{KKx)Dbz*7C{hrg$d004xU zpx@hMC@CL&nYVfWLyQ$ZKdd1Rec>ZZrQT0?NcigImAs)x^L*|CYf2*c)6wWRyyXzg z!*0?7f4!G!V@c=>CCERk1(*hHME}L*1^RzwjUNzt%4w`r{_Kz?Eyof2(@oo1Mu{XX zmY1keUA`n;qt=5?iN&jURI}lZTllgEmOK|H?DUGk?0^ zpV%qp>7KtlJgfS|h0dMdQpmm+=4UDo&;Q26)NmM~B!d9fBM2ZxB6uDW|Kq#`>bGg5 zhG9U}L7m$askGtJw_iKSAk`hmf&5xHMx;&Vm;8gHBf zT)DI@*mCtG$L9nWGLhLNe{*Uf5gP%N?2=e%X+H_*{)lB8 z`x!TN>1O8pr2OVz(;CKZyXU`$nFGrKsfTQpWPm=BQ{u<1HSxn3SOq+FZ&R6PHYa7M z?007I4aZ0amD@HX&2?2!+%Dfq$#XtK49(9ba>>v4Id|+$vlIC!L#^GQ0Fquc2|WAW z64*~OwDlvLs^sX&`h$JQB_jI8@Apx$#jqve!fA{;F(fhlN1a1XtvCfgJf zu|X`TxO?V(9OJ#ked|GX0K1%bxDo@3M!%Ma{$!ZrVCYv#9$Mr8hHGNl0~d6z=-{W~ z?YeI5@Im;%5qqe+rz%PBG$b_{f6KFsvL=YzYxaf3Xx7vb;Rf}e;S$qt1-|~#3Zep@ zFnDoqY>bi}7DdO-G4~Qq;UaCh_4SwL#fJ)nkQEW3v>Ks%kY3d+?%zSgw6~n zh%JBP69HM;>F|ny+MT-D=M3bx(}riPlL+p?Pt5QG zC3|P^*9L$DjdsKkC9&b)fp#F=9hN3C}}WZroz!;HtC zO8o(!j+?jYDk7$WUm)jlQ_ZJmHJ&s@mjA0b|2y{2)GWu*EeHGuYlR6W)o%i~yKjOv z)<5jKP5Ez)NABm|pwu+2$jYJJTs9%{3Mna>s~crg7Y(U*8^!YsU!J-dzulWTp{B(> zpV3NQ_0hmf$zZdRo~bzfuH zXByo(#ZCAKQyR?sA#D#`RPQDO;jgRh!$u-w7(t=Kofp|L$D^{=(lUWcOW%7OnvN_& z#orW6*+u-D=J)#1ASHwU>|`6yQ)X#a6%TI5OVg9hp4r>v~)W#Y@BBXvDXtqL*@Ddpw1dRY7(gb)zDrY4ue)}|0;>pipAm>^I zmp5NkhYR0Zxe8+k0~eWaX~TixcHq^vA2*4PWQ0qNRjpH1p3JX`^X;l>qcx*Bi8vxd z2K%U(Ddj4YFxDFQwd5FuOf$j4R~%j4L{m`Q$5NP=%?w?Wjx%pnGX?^8DXOS?S@vsx z^S7U`y1Gl}t-T_3uBmgWJR}@HS5030t*l?mXpZ+SUH*vsWS82bUEzXjdiJqwqlJ2j zLU`}WI|=!a=e=F&NRA}79nbMC3{MX3K=P7LM(d?o-5 zd2sHPF?^pDv5%QB{d{D8P=^Pmllq{dMC$zN?L=#0o*w<+mE9f%xqaRW{L%-2cw1pm z=@F?1MP7#_1HDGhRCUzeS%n8-L*(J4O2>9Fuli3?ib?_5oPczBP#J0 z0OUXz%D+h1#}ga+90g*^Ps=vPZ?I#)}Z zJNmw0sJ9az`h=lpNY~MUhC-iQIQRE@3a*Ht$SR$Aml)m>7VxZ^-6`NR8LbW*aSw_S zDOQ%BXO&~aES@lTwAiBs85%@}mPVG{HoVQD)b&+5y;z$WFGTB4FJ z(-gn6@BKsJtoW7H|K{S#9vMiM*jWgKi6wf9tgYM8$D&hs@a;nzrseARDdhhJ5gwR^ zVtMK_-6F3V!{@%-B=v{}er1h?JDk*h7CPY1LfV>&25T=TF1y)6rN2LXsDQDKL-EMF zvT;z5=G7@ZP+K`$WmjmEOZ)YnY+3jo7RQO#i7;PkSw=nG{ssT$_{5s0F!{}-8!<1F z=It_LQ^xS?6)X;Oj7u`yup={!?u!dFWy(O>x}IBkFBH-{IeNagGc12bP}gbpZKIWc z|AP_DA=DaLjnDw#NyW3+3}wqW4U|TZktl0AYfd+3i6$u*gv3t%5}ud zL*Nh zO%dZHD(!_KY1@9p0bgr~bGG~jU_R@4-z=PNYD3g_Xxys@bj*P!@xKHC0>od!ey{E^Ya5<86T_MAI)!Dct^2 z7_i-oK52itv4fN>QA7N^lQ}zf9au3Dv#;0S<@$T8Z2Y-k{zP(FW_Q1C#@qZ z8i8slCsX?RkZrcJS0{@>!I}m92H4=rFhF$Y+@acsz?@Pl!Ozvsm?zD=YN5He?w&ce zuuOopUdDTRNUG5L#^+t|a15;HD}bU%AJBff?4AkI5z`A`IKa9}KGtj&e~HGZ=NIMe ztOlTBdW)Qy4}Mg&-pRA8(PAfYwY}g6u2?fy-Ca!kU~BGYe?B7vd-1R;Wsf(d?(i$W zLTo3JlkL#J{Qi)}bBa#m_~&WY)bprtlxSuLYyWMEuAPFfTfM5# zrTrB@|D+c`>~M`_!YH?%Ov59nOqrze)4??PTY}5c1=7bo1f3>5F?RPB8X~HZ`Q0{p zvcx-1;-lrMZAFb;r0;ANYu=$BR@^gdHV%j?PU%Umbk3Il7nQSOg?#;0w|TsN|3TlH za^wtGgT90qqCO9D(oq~_f9F_MdG=aBkJC6Yv+O4rFES$C`Z_Mr@MA`(x<=V+tap z1iVPt?cM1Djf2jn`1p@d+9{`ISbn=8A}_9&;wqbY0p0_-r z08bUMdA5%H6Eb#HP}+DkV#PwdMlV9%vpD8QR%fHkwC#}Y1xQ2(P7R#pmauIZYFhFe zGbvO4h+LRkMw>PzmCeIp6edb+hDWa}&&&d1?4H9WxFT)Q5>~d0daMY*#oWK#2c+p! znd}QrB@qRFHi`)d8-r};M`hbucIUP!CAa2wm6k&_bl5tL=?;W9)5&q4+{JL0-~qX9 zh_VNpF&jhrn}HUkIT0Zj#siZvL{iM-pQ?)c_sWOe81`&zOH;*$@C0JkRY{)XRu=W? zK|o4L<`yZdC1HRO-5S}?h=cj+0mM3blL4$~H#rb< z%)U)!hm`kU#h1L<>Ref+qw*4P3mRK6XAD*I&^@;c#mp~@q|ce1H=@5VLY(cT3j#f- z?C{(yq{K(Y`*h2kj~^}-RCS}n&C#frk>H|zmDF<%1XYWY0GbZO+zcJ0$D5R9hK2n+}-dn!6f7$Oa>}}{5 zfzd&bCT2CpblLivK0=nfQxaBl0JIl$SwaAfDeJhRS2ie!EMtM(XMvkQIg z&hU=jtYa6fZQ1JFbDo;in!CQ%S$jEG+*9*7vaYtA{Mk-Y`p+jX(ZvS$*DInB+vp^i z2oU!&=yHloMnP0$%w8;FX4X_(1HH?%w!OmcxpANWpU;gL7t7qM5dz>8h1}Ybh=lf> z)*w+;2g~lP1aQa8D@)!Z#l+X1@ko#t)ry87w?5UYZhb@lg=&_?kGiB+uR0g(`gpo@ z4<~}5AirdHsjB1x=!ZY5nCuoXdT1iH7yB|MhUV%e-`S0j0A)$> zKXiT}U$R>=xudweQAgud?8^Hu@yja=v7Hl29kX+t^fjWkp6!ja0-?LhPwxEQj;U@> zgYs}_1KGAb?}}PS%&&Av`{3s--i6_&C$G2Jg=!6-ZhID#sBmRo!?B4Z^i#K=7I@8Y z7{JXb3;H7uWWzKUqxPO^9p}vRQp-$`P4&IDG>Ph+gr)E98|!yL_N9tKlE&lfmlTw+Qb5o4`+tCG$d@V{CDU&K{ZKA zV@JB6Og-QlO2O&p5xWf;-d{16YlvH0yg)vlROfc`*5U0XZgr96%y0(M4Q4fx- zzrwuliqJV)%58}udKhn~z{?7~B6GDf?TSLgD+B#3P3Z#o`k^3xK z;-?X3Hvmhuz`M{pG)Y9;sSSirbPkolk244`B3Jgg; zf=kcYQ0DwcKW^Gux2OP6ItogwB#(~B`mdM{U3?cx%Ewakvmp? z2R#$K;yt3IEws8PhAmNvKvSNH{q%995iOq-xC;N6oU63IM>VVCm(n33=TH@1t^F|8{coOC_ZJ9lwu?9w&!-wstqP1)SQ_+_@_WSHQ7vJ62Z$v7=e-ncf!2e zq1pM4D-Np+Yb1-SU% zZHRJ ztErn$+fhC7W^^}j#yYyhIzg!@fKJjZ@k^$1NJ=E8D0`(Ox$l9v*UI7jI?BU`IRk2; z51oi1bd0y6y`U^7wuns(lB5CmNUSNvesWUWpZa*ql#700J5*bTZ@L#;89J79H94E_ zE#@>dED&3evN)LBZ;JotPUiZBfH^otKAy*k>}`#UI7`lVlJL8`=Bx-u5FQ-4^zevK zf$~;quqq)#4(2XaS~^dXw5;aLkDav*oUC#Qrhg-wp37dXa+Zu@pm=VY*|*2VxPV%P zIgqJ}JzHMg!aRcHqoYTS+A4l`cfdT(Fmur!E4vzb+L1fj5}e8f85z7 zSdJ#QZhe^2Q2zZu^cvGjSR(tCfz0LtV{h0_(Y^Pl_dMoJqn^&h-Mhc z%#{48%T$da8-@e+wK|w3I1hfW8u-S>D^BP0S`hwGW)Z)XM>|D_(3N6#rBW#KIhOLQ zM#?#LlfOk#&1dk;0FwC4VmCL~(Y;x;Y%&4MQNB`9- zm3gcyxDFYhX*a~;5VwvrLq1aJoY39tQ6ByjIjZAuj2@>W@aYnv-Sk2WH1s0}a2`J$ zqHPg56++F=KpXy0R3EWE_mN)Z;z-yCwR=hy-yt=f0{nH+wPI+GB)CIXlqv2H;B(LJ z&X7(C{b9vID`jv{RzfvtCA;%k!C;tYw>n5ZI@g~Y`eul#_@97>-&NR7*E<}*Py$vP z?a&pg8K`od=EJYw*;V-h$xhhPj*`m?48Qc}6V)Vae+bN;P_@@Z%gL3gb_eX^^ZrBb zi|eZ5jPbGjd2qN?EQ-;pO~xjGYW`7Np{cGASIBpDIx2WH&5y-nA`TR*_qomKu#&l4 z2PSm8K20LOUwO0t{uJO6r81>s^xMaO#;PWW6XMZ^6kEL~?I3HGtIfPl?}}y8+4m`X zEYA9h@_ud7+ef zOG6qLe&{eMbH$|?ZHu!`Q$1RphL~l?{1FQ4g9zw+KBAvtA35B@K-%8C0wND=% z+-$U8U!zhDZ){HDKW0U3mu1Tj@HTpRL1)Cv`0+ak7YUJO)Hvi|r+xP$CsAjZFl;kT8|@N!K+U)i53eTrNOJnQ z&g+ZEI@fmN`W$j`xI;Og2XRNz*jvkqLskuxh{x4>>3wgJqLhZRA;b`S^nT|Rsu+7i zq1WD{&D`W&|H{h0p&Is@DN3aN{-Qa<|6^&78IiQqj#{h&JIW~iH6UjwMpMbelryr< z;V7a|1u0b(fFoKRk*7l9Ci~RJh?jndV64p>2iv8B#O1f>p&bkwUvzx3I*W3M{R*!z zLimP#r8AjW_pzN`SOov=!q3_e`2dVmUn8V-k|PgG{q(-ph1rQfGlsduxBl37v>}ZR zuf~tBk&!2t7)AEJ-!lg?{shwxy6hZg5Q^{ZV6)Dd0``eja-$Ooh^|$ONB@B4w*@!e z9Wt+>Z*{mM(9GFCW`Aqq z3YYMApy{_-H)qgQs0|KIaURk>7y zJwAM@1ZQcKqN+HeewT>>sy`2e-0;A&7-&_;ET0NaCK>!?9ntgT!jr+$h0`D#G*hCxg@CiA(DaoL6n3%IQ z=|TZW7_rF?jH&1@bg}rMMe%%OLHVkFSr$<7&92PvkGLR7TGLh^QOZX4ti#Kuzk;PWl0zS0$+yMK#z*$*_if42vng)EM3jI6_O=<0(!DjmyF9dLjtHR4=`(teYX*$ zv*^9bN>IeV-_gk`%|oqH-J25P>mq#v;Qr`a)J`9rZ4w(Z@(hybxTAglM67C(9myW` z`DR(sKN0iOT;s)tzN`2{x2tVbH45Yg5;VZE3F}5X74Im7u+2};k$xUq4}a31pN$f3 zR4K1S0{!qr->=rgOi~rCTYX6@deLsxn!gR@QUlCsr$7=b%Xo^5iMat6cO}(pq}~cy zD@)yL&i1)k&OOEe0PBobvmav&moxNITl6zLHTp|Hu@yadyqUf8i4qZDUY6a#o-tW! z*4C4eRje)z0B|3nR(-$B$=+q(BX+FOap@j#wvjp&q zjQAW1ag1r64VdEUn0OEX->MX{01O8+a?`JS}nU!38ob#V<8bU8rmY9DgwkAL(OmE$On~k~Cf0V|wv+ zJV0Rq;`tXtbV-utd)C*O7_|7Sc+5U_0TB?$Xf?W{EK z01&{&_7v{7G;7;8m;rT?P**j+9IHr*9U}D9Zz|E@+y1#Xy8_symQx&;=Sl9`^!kI7 zyD&MV<}Cii6)+)str^6&3*UHk~8{kc6{;(gYNZT0<1TWm@|EMYOcJW+{?DIIq2{#}bDc zZ)u|GQEuF+VEyE#FA~goK1QKA+_S(>7`xw;%*$iRnT+$o9V@CxZ=#i z5ABM{*cvn~JY4lWGFi?XGcR=F63o|m1-IUi&M}|7{bb*^k6_>|+bMyXN&o$V82d%m zZ>xbHU)cVFQDBw#l1nTd<9d*mg7|&DWO` z2AQ9pDls4l3?Uw*!4;dX*`7Orf!@slm*7(hwZ`k*F zCNQ$l(t0$$a1f$Ks1%Ue1y?`1yD$Ks?WlT3-1$l1dA2RzwF?pp!+N0k=wrW$*|778 zY)4UBKF>U2#A^??sCVK$=Yj>B~4L^cv~G;6;cP zEn*<;YYj-vuKEcLgD**+Yx0u$?iKJ2w`3f`aa$2#|FDPZJwn*2Sjhzg9Q!We1|au| zeu=KsKr?kcu*vW~>Unlex9(1@prj~D!)$CTQr>$T`{zO`1CNNrOt{8xtYoEK&FiVb zZuHw2dvHG@w1zF!oM3_PpP5}S={JXMc@J(G-&Nz6B{bpc!6-F)EJ?(-Sc# zVop7QYI$UyiDLJw3dH7s@0)H{nx{GhYyXmQ?t2}~^*$CqKWuup)%X1Nr82{Cb1KGp z5gLgC>%{0wAI({dpjrP(Z}}B*#=f|M$u;HHKzyoW@x9mZt`(+gm*Txoup==(zA)GS zr^r2ZhoFKbLLMs1sVV@p%4|4lWGUg(GT!kcR$?#LD4@y9UQ*zCh)8PFbEK-yY4!)4 zUnE8XYgyuZO;o>HA4SawX$ z6bFmrV>vSNt_556k?t7**ahJeAAaZFefd?FFvkusb zu_6ct*1O_J{eqJt5^ln1HGjqTjqi^PA@JguVfd;lNP+c;_exDI-r_1Jyq`${Fa!S! zz)kk;GE3$~8j<)(Zr}t66c-a?tYn^40?Y<8BP##ryDVq`Pczom-bf9ISE&u#P(cfJ>`KB4R_!_~|s>qQNX_nEZcRP)JAD zpVT(*Yu}+{Q9sdFISKiN(0^~)O?XbQXGs$F43mIg_*QBH$0?|PV;@5#VBS!WOY1*m zdxRkM1Mjq{?2|T~Bw!q;yE^z=DD(d*!N*)v?kC3ao5`Ft**lyaN%i&OUdgf$l76Pi z>5x|-ipHW^sl1n+;@87J1r_}g4B(!6#;TnYJ~Y5zNjthbsxTswi)Kpm((A}|VEBDKU%`0tQs1BcLvbT>Gg(se@vimB zBWOC;MsH`5bX;E(&4o(b6kI)eP0J1a8@eB=YeZ#J18FO$Bw6QWPwN5Z@;m)sqw1oT zv(SF`i zpTD-v<|n>S`Ym;$zGyV{2)I9iH%me?uQ$7{rlwqwHEXSKsuUl_&t4iTv&dMK8?m|CZ5ZT;El8gqoNm3FM4K-&w<_ zPOyqLDC%_b*$cd)?*W^%aqE98Cq{z0MqL_>6&fM*774>k&8UWo1`q>XYl-_-a@QPx zc1BiOcs-WkLU5@T=rLpfAM9{wX@B!&X)ThYz%bNa;Ge#gF%o`z$E*qk%)sqCXdB)$ zP2|PgFddKuF=e<`IX|%ZYg#Cb)%@C^to&YHZZPxZPa?L45Ajy4yzCv(mnKdbhaxza zJ)I8QXi0W&QE*!jHDAQ&+#+uD=l|0Au>C)%OWZqk70{fS^>it?N(-}LyBT=GM`Vm; zV51N%Kc=k_yny`vxXB-Pfc>duV^(5IKP=S#WgT#MPa}UrIpOjn^?$CpAVH%SyVkWp z;^|ip)`79UtNfL34i^V%`$sgm>w3UjKJvm$>Z2bR00wfGOo#4?VofqR^|SSizXjE} z6=w| zEe)z6W24B&6UY0s9fmcggn#3R!f3)kMg95t)srM@&MO5@oc4zMMTWHW9um9d%){ZN zy!C8h=)_d6>UHHwNWR^-Eo6D`g0|4B{HLu4#Cs2(Ox=~{Rn-&9pSfYMHpxfcw$Rh` z0^@(~70-T?lYst8M@8B2yjA+^~gzkvlkme==QQ1M~eGa1U1A54YdCw1EB#B>1hD=JhB(iRC8sq%TrY!-Kak z$tY#gp$xv)G>;jH7fxIL^nj7%L>N++tm|J*kLfrz!5yCCb1`2c7uMA;|03{)^HmVt z47!|*F^(@a(>d}rPAtKXTUB_UtKIk(se?Z0wvz(Lxf`OVS}WPaQ%#kZT6SFQPV2qM zi=f@kGJ22{gsqwI;Er$O-!2zixHwrJ($ByCMgm=8@+=5P(~K zc<}qxzMabw{dFe>U)g(EwtT1IViIYW+Tj5Z%Sfz4g9UIv`$Jxg z$b}_)4=o*V;oB>PX5(QWGb1J+H@UMk3|#1~{65%`$XLUM`mV%(ELGk|73GEB)q%h% z4!7ZZ^JrVu|18*->HrU0W_lfu0^Bb8dyOY{Wp7lvdUj5}r+t4cE&YS%ybrDgsmG|m z4VYO*fnARVQ+fBr=s$LFQOe%OS+CnnJDHnJid#pDu1?l7T-)yvGRoff zS`ZY8sGrm|(IL70f`CoU-#Bc!!OiD@4K*%k&JpOKx)P9!EEfUT?pJ+tLG}>}@-S0A ziGm@)A>nA76k6nn>GnQ67*AxEonU#puquENF0(*Max;GASG3)A2LQ<}D!k`oZBO5T zHfRZWZ)0do0^wTh#G0*97l8xA&q9y{^LVCsN8+u9q3r#T{l!4=lInk^Wkt%ZxU3pQ z@%bC+)8kOb1cxGua@>sbFu6<%mi9>)AS@LZZo{7bf$FA@{^D@CTt7>&W{cEum{z0g z>=aSAz90qmzyxrD)ldB0(@7!ItDLyAO)4*9kzp_VbF%;ki>;7Aru9XzW(8DnT$a8t zU;C;8#4{6P#k^V(MK6sy>#kF~zCS*w3D6jpfO#g`Xh;K3(S%Z7EQsPGgx=-Um8qb-xo;~cz{u(Kep{XC83GUpA;Y1*wbB}4gDDkYJ$O@+*2{Y|@aca4$ zFZL6j@_{G9GM!~WDye_6GigZgqs+qc-(nZwyx390)NpYUW(dc8LEV1A1iw@>SRFRH6Q>W=4c03HD(v1T*R0EQD}C7|r-j{g=j1m6F=Piwryv5r&*5dw z5sIvzljv@ty=N=s1wl7Hk9Uss#I8Y?XT`pukM_Xsrh&MrUT3@0uK)O^p>GX` zr)luTY;>sKa|Bm<=<|)4@_A-x$obOD?Jd{l&9-Q0$ZqKIdXnpcFU82&b@(M(Liiv@ zW1+d6yG|k2pI0m2Oh@npqiCJnNm(RSZiGo_Uwg|5;0^IS=g{EAP>+?Fn3vZ3o{BUl ze5XZy+hEVUX7Xo$)njDVThidP?%uQ@>AA2zs1IEI*n4+d0~?*4eocbsD)@AKvdRMG zvFl#{7}xAI6+xUBiW~+6*IkC-8va;NKWx4m`cONaE?Z6LWlYCKJ)Du0iWcx?Zi=^T zt?BAf60M#BkTzzyvG2m>@jhh=<$Z%oJ*_SnGp5$}#HYYp|HPIVTA=r}*IJF!MBEGu z=wt;b)H^vFrDtnWOF1=4xqr_p^e(zPtUY_?VY+l2nlzWqmIl*2_y2nJu^Pww<@L1T zz#R~gqt3rhqW?$MTL-oIJ?+B*3beSpln~sdNb#aUi@UoQFHWJj2ZsVhi@Q5TgA}(= z+)5#Mae4FkKJ)wQoykmQa-VE=H@iD?&e^@LhkRf!BiGxOyvFZv{lhnuX2uTdEv+=4 zqh`gc8lVm$UJNsvQl$|-xB$hiQ2CQ)i#g)Q!5Fcn@=*e0lx=wJEM2F{&W1?W)QoiM zwYkyo=OA)TSq(87kiYLK!0b^j%)vS zbL_0RvO|Zc-Kc?-wzHL7V=__*oybn|S7JjE1$&8F1Uf#-HV0dLt6|UYW7l=tWTwT= zhhP@?K!M<)l-d}^@+bfxZet&;n_T${ZP2Ju+!B@R-QBrQ)rPN+X=B)|iCgpx&FM%;;6(uvt39%Ady>+PS&3=maoVw2obxEL5I?ozQr9<=)jn&`JPk`@_CEaq#eh8^9 zok57*mZ+YcV7$l8FYMH748^$fw}Oip75?;mG4WV{)b6H@+EJJP6xir+@Z}osJ}O?j z3PC4jfv0I^oNxO5tT5U7TgGFQi~+FbgxeB1iGDz+kh|c(mg(<1B|E;lcan3f5Xr)=gBQRURIM&ntJ@GEcnb!^N8 z6W81Inl8FSXUchTpBKuKZe9aknqop7?oa{V=KrF@spM${qlJ(Z&*PHlaTYBFo+Kcy zXkYtPD+7H^pVE!skcyHVz-(zR@qKd;Z5w$TKBHQlyuWM)V{qP)o5vVk^qck?kSlfy zd{LWPeGRZ?h6me0<~vfGLOzT5CT7=ym7MVSvP=Gnu)x_ZS+8>Gpa@?p8o@Hu0u1_f zaR^E9Jm9lo8xWdCsd>f5QZj^w@y+6n^!o1)q%d`hktJCa{V&%iB^)JQ=G0t;OU&S1 zURJ1sMnzW{E!G-i>yDNDmmYHVT#ZhUOHJSkngB20W8tjHan_H&-bqAwK70lxQ-(U( z7N_T^<-UdLuyMATZ7I&lM!WRC=Wkb(2msvkv(E$aK{Mh#-X0H2xSV$MjNdWlmDF-3 zlNeVe33HmB>57^%max-#hW@(K#MvN9r1V--3id~B90fkyoMte(Q^*^Yv4B8Jy~;K3 z9G1rU`!6s-(LB4hrpZLgbclF!j7aPqjY zcn9w5W1PPJy(vSXWihOVQZ)F#=mv3q-ZfzpFz!#WLeUBzQh}J%hstWqUFtR?Af^Sd zuV@wh?VGGb6&mB(`B)H!odx~BV)?ECsR99#R=h~Zqyyx!9>HCah(E%b7}1S*P* zXKtlcGl>Dn26=sVIoU2${t3&!mn6Tk5Fg zs+|j;2%z{NpQ_^i3}yjQh>p%Dy#l<#7N1u2mqQU#`}m(2H}V~JOGVJajub@m1gY=% z<#>(9kkVfqDcnh#_c$bd~NC=BksCqWUBo2;3cd#p9u zy$AqoDpaKN@U&i1H25(i>}8G) z-))_3Ze0C|1PI|>c3Nwr4w~s`^oHAH3i0WY;v&X4e?GZftVOEfvd(OkbXSAM)G!e@ zo?`_W0hfOQ_aYZ;!B-X_N`$2FNJHqL_uh}HG?`YcRisU}hwDoMS*l^T$LNM345Ny1 z6JUwX#JjPEGQILefx1{a0#Cd!{_K??9|B$_h~%S3aUI@e5?hI<)Ok9dWv{u9 zbD=gi)O=p(-r?ror;db1ZUS&=_YpU+B1YD^*@fC9E8GbJ|1-JfQ=*r=UGu%1fRW@k z6$&uXul&P{2M0?lt`^k#|5m(hTs@K(3A7wA8C>~lz9Ct!H{VJqqB6wrqzN*U)ZL8*w(WUII*!c(sYJkPLBZAs&s#&DRy z>08VGP>bL13#HhwxFxlAEqg0N&NAgUx~3Q)-F62sYX)~Ddu@bmjX<9Z z(ev28m8PpD7t}bq)P3PlTGuR!u4s=2P>Lo_-)QELK{^840+ zN4fKhykU+*jWZ>_IG9%oCno5&Ac-Y2I38QQp%^EqCu$B5GNbxJ)-MQezqFsAT2XbJ zbf`KiB&J=Gka^Rvg$YD%o5!4)EDS4BEG=n@^Hf)nxmG9fZqSjx9xl->m=FafJMU)x z%>m}Bq>{uo)`YX0*eoPo0?ueN%T4_0lHHn2Ee3dG#-)ryvgm8=y3YvsaHnJPCxVyT zb26B>g%WmXMTlgzJjYb!l8IkgtFO>u6) zJ4)o^oN!n)GfzbR^d`1Q56n!<{d7>rK7Qjxv46YobIUz|1+{K_wGEj!ca@H3(dgHK zOjSus1-|V}!eelKRp;$LO5QeU>bHLRwD`x^YCgP~I`5Z~h8RYvCS)wRDFyV9?3o6t zJQgL>-1c7Bpo+nz-}&l6zby>&nLF?Mxp#U-1x?5pwdR7d6i<%wptaHn4_6oQ3>9H< zx+*-kF!sC(J)@si&QmsdE?-G(eweS?=e6oWU=V%nITt8aQHVWrSBIp3tThs%C#B^DwwbK}zc#xODsx0|=m%p!uJB)#p6mAZZuFQDNOZs-kYAgheo$y|UZu zc=3uzC1NOP`cP#3pC^;snYV{nkDr;>qzpb8cFGlE+gko$s6LV(>nEn}0B~u}j$jZe zJL^%rp*!@tUb3cyUaNRR;#l0~AVkt~tsvubDtH=b#eVJLCKV*n`nL6p(7>g_9mKL} ziDj!HjlYyxYoz40Q3PnkZpzfGPTBxhqJx1t1h=-hRId29p~jrB5CuAe@k4kjg*};x z0m<{T4AN6u_i{vP>q?Q>yomWrFn{T;bK0Qg=rWT%iAhm+I>-<%<^RlBn_`7!B9Joj zA_6mH9>GzvS5}WwfYtdmNz`-tvZWNG-SV*g>rbSgEl2F+9(1+#Xwc4Tso|Lh+r;NO zG@Z=Mq#TW@1XNHZ{gH>iqnRU8;YeP4P_5!r1Mk#}TBz1US5gVyDEE}*zO}DXp(+-) zMJe#8&GlHU4ITB#T=d}Sk>AjEQsjvIdOIuQsYk?OETDsoYJ!CJQx;n`kP>x8{{>$F zS+T`YmrE;PGgYSfJ-MI=Cw#n2zpOzkHFG-B%IIOXM{RG`7YQ;@f+-48QzA`GQUmAo z{K9p?06!bEpM!2HW^0%g*)!!KokQ2z>m+MR{!iwBWjvjFuXS-d90gAgQgCF6*f%wm z!Z8hXix0Sv7kg9Kf=GduOqGL>0$Z}qX>Vyc;NF}LhP<-AM5!pF*s<_e zA#nH@9%}ST49s!w`MN$ zt~Q6NL!Cp+I~^aT%JXQgg}5oh!|Gpbc~+uDRnF!FQ;(y^Pvn{ zzL%FnHP_PUa<~26FwJ0GFzB?aMECDs#Xtf&XP?}=&HMZDC0p%SjxjyM&R%am^%Hlq zc}LQtStjt;GfHBV288j4^^2lsY!u-0+j<7b!SYQVT4R%Vd@yeWy6do7=O zUF`;)-%VHidjE_B5xQT!Iq~^hZx!36I*vcXKcn?FqCzaPOj<5ftS`e$f+0CacChou z7m&J1$x{D*(eyVecARRpQjJ#UrpyZhfon39d)?U4SVxq3{z(GTeLY=Ss~HNw85cQ= zs^yRB5YEr~?3hYi&QlC*GFBcqP>(e$a~$dxqUfB&;2u=tzY($)*=v%K5<`>U+O!-# z*cmi9u>P={dEQsdpv z-b<)33_uDg(|>ni(q5)%pl)GWNZaRE4@V8ru@6@1tBk&H3er@l%Q_eFEc-$0BIN>rH-;z5#G+Idvn&Valg^r_D-FlV;yPaKe4K47DwybSR)Imq;wux zMXO=XSZi_8M!1ab?QJ$XP`^Tp zDs@8-5w^J9hj~MOvk)7lOGEri&Q*g96%rOh*$GIuHbPcc3R$SpzxTa<7jSUbo5arC zMXzQQ@F9KSk6O2ayGoIQL31;Qh^r#efx`1!oJyn94uh^*Zz`|}(Oezi;vZ@Cdn{0N ztZ%#3REywu*|fzPzLs7f%|qZ z<|B45^qEhZ87WqcM*lpZ<-HtY(hzw{kqOz{nV5^$ZODD5%P!Yeon^Dnb=Hz|v;VTL zEe!#?Qy;;sidD=$hEewm_TO?DvN1uz8p`WFPy?PT^fNunR29$`@qj|oHwI@DbJbYw z%qN+0vI+^Nl_cg;0)Xu``gp|AKQ}CBsh1J2G(Ww5z za5R^~{YXp>0c0buA9tZ}<%p@hQp3}AMT80qX<8bF1@iq&q{_s20#YN1wNZ-1R1Zeg z>86ip^+3Yv=nXH!yns(qWF&n9GMZM1&%kSFtW*WvK4=fNzg9He_%o($v24(RafG;_LuLsV-%#B>h`Wz-MG7J~c*Ot>c+_I=IGPvL=7?Z? z$SMeiR1R`yTFLEF-&{N`nt6bErM`W$#6PsCcniM#g92!jIq1X&5yx7SfnS+26R;@f zUpM^jY?``4c^Gsj21Kms+Ha`-j1kS*<*n8B0pE9Ty8xhT+eGpgV7JED;xtXnkV*@( zuhQ}dc^`r0p_P0`V#G#t-P|-u*A82tcMc3q6^#z=N zY5Y=grYL=$2N1np85a1F!eY!G8n}jZoE-90xL;UftD7n>Ee5zESe*idrd2da zIHgT5c-A!i5C{zF`2O9>f)ni0u2to(m8!=DM=6>70Z<&w^EG*!{stgUNLr+T))G^| z`=_fckm4cgotFwHsbOVfmV^?7!{P!};TPVx8$eC3@gG)ctUVBVALWWePT=+#3|z4+ zPyps^BZ#!=F)FB(Jb8yS)F20YJxZPExBtU}mkoSzd$hi_VEz0?N~Vt0g!?tf=<6r^ zY1Ry8ZOO7%Nq`03bGMzAaN^_^<|H?d!dEUi($@2z_kCpdjLp4g(APsF9Rn^PK(NVTS)xEtA2fy@AEUd zP%L*>b_zW{LT-vSIOj9xzMeoF=N7%X&0Cj@rwH>xv4y|Vt-f@u9QecRryl=g`D6!f z59J?(P9GduoMfev_Zoln3jg~Deai0)3NGm3RA1`SGqikspXTvtUXWX@vc_bZKWSo? zM2qO>oK+ycN3_*@D%rUhQKb*hf6A{;H^)FL9Og}2p@lC$Rn3-`;xC-gb5G*0nNkw3 zi+~sW+oiD@tL9B25^S={6wq^++QpXbAo#++$t`?LkXrTuOP$7E&f-g56#FfOx?dCR z*|Ev<8n^rKc%INt`V|DDC; z-~(-N=ZrGq>_Mg}!`JnD4%({Z`9-XEYt1wA2)&jSiPO?bVQqa)c&SL5&kkMpASL`s zY^H|*?v$(6FiZ%q{rqx+@%c`iBwH{^G)w?FL&hpe5axlf-~+xdRdzdYHdUs{l%buH zCzwuHzjM8nLLBXsF0r7xUdzUl2reXVeZv7tm)aX22`GFD7Ml^Dr9_-^lED*yzWcJP z|I(hh#}hGQ-Ngm0#LHkByJUoEp4M8lyXUk9@O$vZ)lkDZ>Qov&G%iVJ;oj(HJ@-{? zFRU(UrS(q$BT#NPq5x4U zxbwR>_7Cz~|Ik31E7L4OGPi3a1Ke;J%5}3*JyBySTEL`J08L~U& z1m?dbKLqia-9@ckLyRawW+^(_k<}v=79}r{(0~ zc}`;H@}`1+LDR6YXY*+}YTYaUAhN=dI%9V#21)xzEhmDuKP@1- z!~F<1RW%gqJ~@%;d@-6Ra3VAQIaet9<}<4pW(~S>(~q(D_54|Of^q&lFw&?|RZx)x z)SR-Q3)F}lUe6}N)qt!XuQO^b$)}&{)=CYRB_4oY%y>zHz zjZ*+nV|SegvG9{w?bh+FkKu9;9KkwXS z;o7>B0rcR?2g}Dy&UbpHK@RWrI^Az;mnyawm_D@2XHmrFCzJ(6feNXQ!a#G3$K&E& zQB`(V-`>+=)P}-SE6@JXL-WA0oxDc_uhXPQl1DQ!rC9rUeCS|L`xdI>-;LNA7-85uG;!B)yQehofFH)3oPJM#1Z)yA4OO(`)w}}| zkjJ%={%(!kEeae~X%G#Wm-82gf)aFn(2MRYEsOy6mY)B#vL%Acr^H^HM$J-!p&;K^!P}J|?~|R%Hb`e%vup86swN*~ zF(C=wH|p2G=9wT-g@_ltRhldFVjye=1T5f*@(0UsG7`dF73@gXySzIru9i0>b%}s? zIG*UE6>@`d2;d!BSrTs|_(~ueu;Nec2`Ns;u>2aotGK-T)LM*pAm=_aqM{d}b7)U~ zbf0ofI`!6AiF3XnN)1&T6bJ|**FM0;i76?Wk?AylMARP?yIGmtY}cljeCDkIg<%#5 zQ~I8+i+e_!sl=4Cb4Fdh>~DRJ2Q-LiDl@Ftqp15C4f=S_(4-#krr8m9It{FA)B-7Pl1>MfJ5vD>Zj~vqJtun8L4&tJ`XE9BhwYrboJz;qr7g9+|(n^)L_G zKdqfPN%*ac@fgcLSzV&%J*8BDUBW6!p}~xC*Bs8Oq7pkNQCGZ$c?8KRQCW%%)8eoP z2BS<)p#7(R(_919Ucc-gI{R5~4VB#aw=rf%gZs2ie~o{Nr^~`M?NkWDGL-!3vP{b; zyy0q^`u+w<)(W4B1ISCmBk|e0FqB#IpS75i%zS5I*PpwfUF56&s|ZH|=pD>xqTi9M z9PiJ+KSl3?f>*H1m-G}S+YkHbo3!~0TbsNZSGq)V8(5grZ+br<%Py?ts5DW^WvELx zG{F@U+&&pE{^C}{S7NjedO~2wE*t>*Tl9?`?<^;cj$EC{u zR*zQTq0-MYBr^IJz;WJu!1+(@;~j>2tIS>40ikB~fw=h4Cue&7!pR}0A68^6Zt1Bi zXZH+HdWG&oEnt(vxfZi#L`oMAj-;FrQ(J)2z%~OD?mKn^KVYV2`)HR??!2^<*p{nf z`6Fvc8K%XGZG;V(gmHdKTodx-jjge_T43owvq7rQ)*qI1aeA{HBbo_mU|3`lyS$d# zk4>?>Si7{GPFdU~3)YuY{aB47;Yf-3@?$RWi8~Cw@_{v$a%+@El^2@_H5}ARbSvN4 z!yV*-qE8W0EhnS;h?cHjV$mL6Mz1xt>6Wl73|JWQ7IqY<{&oX|SPJ*iTyfNnk4s1%mh+PDdTy zKLbcDcxB1M%a~-_cgfcPGVvsPtltCM*yOc#2q1zPQX4XYqH;O0!hYEF#5KuX+n3bG zTE*+1Sv|&BpMCG5jf6^bU#`b=E?FNVtzw*kkGlz}O~AqVDC>l*Eb~WCl_E%U%WWWy zQ?p{7Ug|d%7k%9rjR0Dwk=UVztJx6E)A)6|0TX!(a?r@pnsI_a9!!##Zxv^n)%{sc z1{+JWJmI;$OfU7P@Fyd}@jDylTJ@EM)}A2uQvMRnJF|-pEC3q~!T6I)W6a)%z(TvJ zJ32s#+bLaxH6fL2MD;<3kJ!4em)OtiHFcMn~=9)A6jnILNMB6Q1#2x4qnJ}J(4 zH;(~ZYeQx~OO0YQwaOJUkfu+ut`WkIVrAcOeBGJnR_Dbq8-LbHZSReMpBHG!{rU>8 zMpGZ#h^Q_j<)9T532Rq~HGJTDoffGJ%8V6G#oocOmLGk0hCunCLDt~P-F4@?c**;> zXYnTR%k_1Jk`AX4u|<}H4I=E!OFXq|(N#}bia9hiP#AVf@SMXrR9{G{Qra55BrSZc zR0S+9)XI>E6VW3vb={_oiO`J($t> z917vNee?d;7Ac3)5RV;0h@^dr5J|=(Oc0hfw9)g}nZ^XZ;{mw-l}8XP{l<7Tw8&jq z<5@h-h<&e;de5)hN=GAAnKmQU|wP!A&Tsy}iLEsjN;nvz>?q*lpQ4y1IgAb%e011-#T{w5j?u0{Ii~)mq+4N#qrO$l6%VV`-VLX`=y!&K%!NAv#ePwl%`~@Wsl&|j z?Sz0`O8PL)Nx!+g-v_oJkG5x^MVp>gLpooWBn4Ogzgqcab%I^t*eTnsTS+hj@UO^j zIgP3rr;77)r*a`%-b7(Ns4rG0OmJ!tJ;mFC#7o{j!sP4kt!NB<0Sa#Y01opAonJGF zVDu=+D!#LH*{0462{SoTT}kEpWTNe<)=ZUP+v+}|gcf$@ps(B4E$%0*fT=a3wjlYC zjNzD%Pi=jqRt)7cSyXa!XXT(G*miuVX3wqDUxTk&ac{Z|_~obHyrmPZoYWK4<%HQR z+NFacqFgL1nq~My_5`IMHwN2mP~UtOhZ>8Rcl4r`Yj;s?P@)zh4&Hbh;&C;R&v#@b z1y5t^%Okh7nnia}LSi8+D_p1DItdI);MiFG8w!krgxttFy}wMfn%URA9jWFcp7}My zf`4nJd4#?PNBX7>(T?6n`BEp)PO%PI9KXqfuXH_2o!-&tsyid8JRQuuPX6Ikz?J

P&~Gue^ZTLk!a{$ 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 z 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 Y=JMASit?{@od>D+boFyt=akR{0BEX{O#lD@ literal 0 HcmV?d00001 diff --git a/packages/preview/synkit/0.0.41/gallery/tree_3.typ b/packages/preview/synkit/0.0.41/gallery/tree_3.typ new file mode 100644 index 0000000000..b147e7a02c --- /dev/null +++ b/packages/preview/synkit/0.0.41/gallery/tree_3.typ @@ -0,0 +1,28 @@ +#import "@preview/synkit:0.0.41": * +#set page(height: auto, width: auto, margin: (bottom: 1em, top: 1em, x: 1em)) + +Tree adapted from David Chiang's tutorial on `tikz-qtree`. + +#garden( + ( + input: "[S [NP [Det the] [N cat]] [VP [V sat] [PP [P on] [NP [Det the] [N mat]]]]]", + spread: 1.55, + content-size: 1, + ), + ( + input: "[S [NP 猫が] [VP [PP [NP [NP マット] [Part の] [NP 上] ] [P に]] [V 座った]]]", + direction: "up", + content-size: 1, + ), + equivalence: ( + ("Det1-1", "NP1-2"), + ("P1-1", "P1-2"), + ("P1-1", "NP4-2"), + ("N1-1", "NP1-2"), + ("N2-1", "NP3-2"), + ("Det2-1", "NP3-2"), + ("V1-1", "V1-2"), + ), + gap: 2.5, + scale: 0.7, +) diff --git a/packages/preview/synkit/0.0.41/gallery/tree_4.png b/packages/preview/synkit/0.0.41/gallery/tree_4.png new file mode 100644 index 0000000000000000000000000000000000000000..577cacd92bc1fe114076960ca184d56952340ad5 GIT binary patch literal 69720 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 literal 0 HcmV?d00001 diff --git a/packages/preview/synkit/0.0.41/gallery/tree_4.typ b/packages/preview/synkit/0.0.41/gallery/tree_4.typ new file mode 100644 index 0000000000..34c13d1bea --- /dev/null +++ b/packages/preview/synkit/0.0.41/gallery/tree_4.typ @@ -0,0 +1,23 @@ +#import "@preview/synkit:0.0.41": * +#set page(height: auto, width: auto, margin: (bottom: 1em, top: 1em, x: 1em)) + +A less serious tree. + +#tree( + "[S [NP the 🐈] [VP[V sat][PP[P on] [NP the mat]]]]", + content-size: 1, + drop: 0.8, + spread: 1.5, + dash-branches: ( + ("VP1", "V1"), + ("S1", "VP1"), + ), + color: ( + ("S1", green.darken(20%)), + ("NP1", red), + ("NP2", red), + ("P1down", blue), + ("VP1", "V1", orange), + ), + font: "Comic Sans MS", +) diff --git a/packages/preview/synkit/0.0.41/gallery/tree_5.png b/packages/preview/synkit/0.0.41/gallery/tree_5.png new file mode 100644 index 0000000000000000000000000000000000000000..e415845f42330414ed735d3bcb88b830f0814379 GIT binary patch literal 42605 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, ))[ + - Who do you think saw Mary? + - #move( + "[CP Who do you think [(CP)[TPsaw Mary]]]", + arrows: ((from: "who2", to: "who1", dash: "solid", color: black),), + ) +] diff --git a/packages/preview/synkit/0.0.41/gallery/tree_6.png b/packages/preview/synkit/0.0.41/gallery/tree_6.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9700ca10c5a90a1ef6450ef98b2829f368a19f GIT binary patch literal 19003 zcmb?iWmgBe|L9xdwcu$@86r7o9pZAKY#xG{{8#v>gw|H z^5Wv+{QUgv?CkXP^w+OnKY#u_IXO8#K0Z1+`tjq(;o;%I!NLCi{@&i+?(Xi+&d&Ds z_SV+c=H}+c#>V>k`r6vs>gwvs%F6fe-67QTJ^Ha|Z$H8nLkIXN*gF+M&%Ha0doIyy2kGCVvyG&D3gI5;pc(BI$R*Vp&;>(}1i-kzSG z?(XicuCC6`&W?_b_V)I+wzk&R)|Qr*=H_N76x!6()Y#bA(9lp{Utd>OS6f?KQ&Ur2 zU0qdGRaseCQBhG|US3vKR$5wGQc_Y}T>RzBm!hJg!otFWf`a_~{Jgxp+}zxpoSf|J z?5wP;%*;#(1d@@Fk)EEOmX?;9nwpZ5lAN5Jl$4a1m~3^;o;%#?(XL1=IZL|;^N}$?Cj*^6`Vq#)!Y;0s?WN2t;U|^uHudk=4r>m>0qobp(t*xb{rKzc@ zp`oF!uCAu0rmCu{qN1X#tgNJ@q^PKfuyCSrKF@JB_$;! zBtCumBrYy4CMG5-Dk>r(A}lN{BqSs#C@3Hxz|YUm$H&LZ%ge*V!_CbN1OmCZxHvgE zIXF1j+1c6H*jQOvSy)(@nVFfGm>3xu85kJo>FMd{=xAwaX=rGusi~=`s3<8ZDJUq& z$;rvc$Vf>^KYsj3LP7!n0Emf+iHL{@2?+@Z2=MXo@$m3IeE5Kii;IJUgN==ig@uKQ ziHU)MfsT%jhK7cUii(1Qf{cuegoK2Mh=_oI01poj2L}fW3u|fd-5Lf)=22c+Ld$RC ze662l#GQ2fkE*GzFQAb{p~NW|g2``?{X#~l|N4OKbjoMV#i^H}(eZ?bAK?`eD#2vb z+t0LIzq|RlpFCN7zpM8Y@^5?n{})EciWhU0Xbs`-d+=^>t0vW^e@6omfsWz&#oFnI z+|K!;V+|_B`A2JIF6L^no-W_lw3EjY!gB6goY(JK-(*JoD*%v|or|EcMtQ+0n+hUm z5t?wk0B+*cdVE*~Dc#a%aOb3kd16m&l9Sf#+UTEOjxWCxA+y@jA!3;3Y}7tprQw7- z2Zot%sXCcRG9=YtEb0SJ%p=x=pvMH`9{)IIjA71TVG=4D7lRB103awOA=W@^S#lws zF<$zoB^3xo9zB6iQf`5n8jU&D0AB{t*+8ydx=PM~I4GiPl2wfvzjfj~ATBG1)n?Ag zYR~Ohq+fjh;8?%6m(O1_lzmT`MQp?LcX@5Koc(xb@z3g_XjSmE<4&}WkVCqVT5kX%$L0SXZ^?IkuFyw!R{2cQ6D>?;08xN@#@scv_=YheHSwzeVQk$MEvNpM2*7N7Zpq1jCgS?C;*DFB6vKJTK+}5c* z^Ewc!K@yYi+oGkeDTMKvT|HXbv;VnLN8!b+VfR^ zPq*g66708XjQWTd*K)XRIJ=JZn5s#C_>^@(#($doXrU{(z_r7Rj%=hAKeJ=3q z6Ly`$MWV8DB5Qe0zzE^23RAlr;6MVjs0@*2jZ<^7KgSb;e=!!5M6II%496`}xolvO zzO&{)jpgJc1=(Z#wUWD^pk~rxl4EblVAPN(Q$$2ynb}$`9XHbUgdHMYE7Nbu%vRb9 zjTE|{IEW9=@n1!@jJARbLXYZ_YV~L6xiwbMt60q2VBm-fyo{;L<8IJHYvW0%uc_xx-Adwad~0h*8z9poBo^dhBxK=Jd}2k+H! z8TE`%3z4ElGMT5TS-unp_wrUVf~SbgUx@^z{EupI$ zPH4$mljR-5eKA5w_WHK5Dp|GAz?8olsDwgDkr1hV>qoK?Ok?Xl<}`Kuv+b$kr&=Rl zdJCcsiy5JQ<#$2#lFUVN#(v+b(q*T?uJPm#l1~mSW!tAgvt{tfc*Bug8Z5fFZN+lm z_I2VSXWA#GNP=-|-cjn90CE@l{$oR_QwZr6&v3X5%|>?LsF6~+IzR4F1p1QOT5i9) zzlbIPX7t9kX#=Ut(h5-IeN%OU6{h4)8)zrDO_q(jdbB5uy((Mr*2~Wg|II`uPIFIc z4s<4X?)m1yc=syDbI#lNgp{G6%QI>G_GKwT+~}rYwJoTBSFv{C5E^vwN2s^P_pDz^ zMCOYXkD!c)Gdkm}j{0MpNT>k|TAxCU>i0z2gdL}JI4uYM9T43ay&f%lh55@P%!hzF zZn7)%_Sfraj%U#1^Qh(KImvJT1?B4)7v8WDMT#v|=aLoznJ?Gqc6z=9820zhnHG0o z-VF(ltI}#1jhJpbJp&S42brSEum|0EyF0ef$c5H`wcM3Q+ARL4#h(n!@6pCDj`;gC zimyr< zZ?z+b)4LH>n@Uw{?2ji2mzEX|k)KU3mwl_&T|9jzZ`>2=!cQK1NI3kxU^ zjgHEN4D(`N+op6*lSNN^M;6$F^f^seU2p+E*!xC~TuuhsStN%g`2bG*vhV+JTYi_h z#8#U@0g8;+yH{!gZ>yYTKk8tdhfaJKl{j+Nh8Bnxdry=CI~G(t4k5pPN;)&Xh!IH{ z`e{#=n0u1WDAeQQ+C0?W>@p}JLdxk|w)krr3#o-Mz-r2T@VtYJSl z6l<)%WmKWh><|q<|9;lUxH$fhOM+9x6#W`Yrm6-YkRKyd^T$!QM8cdOw1U2pwrgYr zH|a4?z0&a~T4TI?2rga3u`#w^LrrKexoz9N--Yitwz_Wuu(U-*H#F(VT7UI4M13w_ z_0ZcQO@VqmgCgtqv(ji345b_3MU7MkDyc+Oe4dhjG0Q$2!~0s_siH>(B&<&rQE}i^5*$2(wpZjVimgKl5SB;f|ilrI5RuA)@;1t!T-l}@m|qsj=!vXSUtFc^tc@-7kowO+{@7fHfy}-# zX;5=5ENX?;ibZT2%qrs(4njyzxUo*A+*n1N$48}09BX)`l~^iaTpjmkX?^5IR%ZTT zYNN3LL{g*+CI{#I0RQrW55q5R38{rd@Enor!zG;xR3GjVSf59(VVfo@HONeqTPC-S z;R|h>m_OgC%Xj$PY}<2u=Zo6ntp&d1#siVL4jCbHsaEIi%$FLmSnt4h{KIq&=9hAh zS=;J=DHC|iq|TA;g>wY+;=uJ_mcxkVs5gEDJ+;k%=4hQFB#W4OUR#TP1!HAFy)D+@ zk|TdC$DbIhxpv$AqJuz(n}`8UT^@uG=HJz8)l{s<8eK!Xw9I*KB;Jjx5&D?wE7Up} z6)VhX;M-Cif`xr#vhVOQ$z=0PW#8dL490>#97$xi;#->!6r3P8eKgA}5QyE_nX~=3 zJpHw%2I-lSr#Mvldd2XMia7y_z6n(Kd#N*c{viB>?tjkf2Z485O<-*qn9a4fTIZbE zN&$ER(0Zbtde+A1Kg4_v5L^OwGdt{edqAFCh1Vfa()4%7b|X&S841r?Hh@-<`{{X*Gzk_Ti5NjhM%=?BHj_B1xVOIn`Uy& zdwB}9M6xh!I$O|TwvcAMTW9q3xaam`@PqwQX8q=g*5eZJ4$Nq2b{);gk36Fph~$In zucf2MG2d!x()aV;`rMrP9TbYYoGbKtT}5S(#|ikzHkH|UJZIYJ_v@OV_HWaZ`{8j> zhcj6MhwDEcn1$>mT=7z(lSQ$mlmStHWiJn~JQIDp~uA0zW zRHm@ia6i%G*2&zsKxy0g!&a+|iJ`N_xokMb_O> zwKe5{&~qHsK0($)eHZ8FF|o2{a#tvlSYd#&B~AuFePMpqffvD^@!{He?POS$*8 zTxde|?I+^65W^!vsr@OUO-KS1%v-j?n+6tTn-Ys+qM~5D#lFd9JACY<1$`uVo{K zXgnGRxY$APJ|jeydU7qW1Ow#dmt_#qQUD!Uw^&Rd764Xfww76aZ`0G^8mhm-?gq2 zoE+mUY~x1bD{MNmf6j@UpE4H~5#>q7(QK z2)#j*k-F7RkEU~^J=A(*G6>Up6}*<4RYv65P(!mk0Ua&u!8SZ=WwWs)N*|@lMaFXz zF-%-ZSM_chgDu5m8R09|8Xa~*>)RQ)KCl%(79!%{>&bR-%F{>g>ulfJ3lB`El5-awA z{~TPwhsu|w#k;K;49JGU$C5=1&;8jBdiwU28c9c{waP8qU=Y&O{gdQ5&Lz2Rd|6By zwKL_1Dhh)&HiQB%yjQf)DY$r@)Mnh?Z#xsZ-Q*u;P)VsccH<~;3%p=wH&D&aFkp-C ziR<^lceW*|Yv@KubyTqyW_^=Ca@Qj*O+!kim#84BZ{M}Ot2}nWN@!{4{ zTqjR8dFVYOd^H~>FTAOem6b5m`X%s>r{RYg!lmEwcpT}n(wllDV)mXRmhL6~dD_mw zz?n;ysoMD1ZD~4m!Yj2$hM6>U)moP zl{0z~M!*jdJglGOBB~N)QDW?g;~1MW$YTtK8mHx5YET+)(5qQh|BeQ9`w?I?Y5;wi zEpb*(v{d-QP3;ScE>~i1S2y`F#dT0kjzDKfbeES`z`cbP<)hh92AhO~0-qdOC;SU; zzqSoF6GPX(D{P|aHWqc zQ6maIf>n*lkNTJfhlxC3r6zIa8)azUISgj);r@N9U6i56C@1@%7=fQRksVXxLetR) z1|vREbZKFpGQ;T|OVv2iPLh@pTYw0;Tg%$~Fh%#-WXSvkeU|_tZY@uGn5j%na}v2H z%RpsJ9{D`|r&>3q)~oJJ(C3>!QA4Y{IL@9|RGaIVnp*4_!r(^7B&5e2GC{6pI$tc|KA$({J(o*nt&hs3|P zSNsNKPH2q}6y0ouEeFf%FB=J)d_@@K@$*eEl{%-d`UGkF2%uSHY z-19Nz>Q`!8t1Ft*lPLegZ6g+RZGoR7#(3QwWHIsh#Eekox0;c@jMmY=^9@ypv2Ayw z42!yBM;A>2KGhl%=gXyK0$SBkBUyIRhi|U8i~cPYsyQNmZa6AtUmO;u_{}=~Z_^rW zRq}xL2W3o4wzG!q6{Hx4I;{EJmZwBxu7}HjmJ<$BO<03Uz+;JZ{}R4J6#rieQequs z8~bD>QHA6vGIRCQYUKl{yBbMGCd;Vs3Qr}dMTLe;|caiH+3qNLrC z@U6q~mCQJmwz@{z_@6^vanr}ymmIt|?x$VXsQWpy{$ zw8Q2XN{!BH-|BZsMu?%;nWwk%$*UEywZW}R7E8OdB`?B)K$c^7hX6$w`&X!KKbSphs8V6IP+1dKN&_oxhV?mSHC)*%7#?nU zeL%U~40qLMS;8T`;P6m@#YHrWf99Ma`uPtsm?r0h^&7g{8O}Nq>{OD6di4b<)%bc- z==k)W5y5+UtkX!2Fh|S}H(ReY?Jda$5a)%5UFWQzbW+Qn1^@WrmUo+>bih71k>0{d`OUvaeFoK6LvS-Z1}0;Zqa>|g3|!9!TUwm@IAuR-Zep)B=Oy^e@VhUmmZO&leC8b zUGYEW;^%&%H04B(72j8j9FS6v>#H?79%)o}Sf#PnBzbD~P^Y>J;Gv4A`YY!T;!+mx z@$4SCC|#qT5DU)bKHL9H^juD-zRa}k-aiPMt3uJ*xP3q08g#^R`$zBWwnw|~?eQo( zc9{_&D;S-8$(R6*fE<{RshLjVj9W>YrtQi>!l?(J+|?Xom{bf>hX&h8F^U+RX*XJK zw+iq62E3wPiFKIvUwt6bxuT`m;3;wOp`UzQtZL9^KCCadG3K89qONsAFJG~tNKlz} z^^9KUl)~8XMNi>=A&ZeDcHTT;5=_beZ(O--5^h=;}&e9*DNk4ldT$<>P@u3Oztiq+ z;G=dLm~0_h$bQH3b$_JCHsVA`q13RgdwIffQ)5MZ4z9)57ZskBqQ~{~q&U56ksT4D zo{0{5uYlXt<216=D-o7!#($jh|8vn z3mC{rACCB-wMQ8~rf|r=LtU4Xks6IgYiE zF@u_htv4+t86pEoZB#n?g%!uq=c&OENH&}s;DRB9h+9KmO8%NDyEjpq7>zg0mka1T zQlay#IQ`BS$-D%~KK#NH+xfC#wvv`@)62$@N9_*qq)`#{Qau3plt7%Kut1n<)i#m6M?!&f zLIbqnc@Ri*s`=OcOJznRm1~f9hvAYdmFx00VFaJbU2`NM3xzZOE9+{s6eAJzI z16ykb^owyTs45Za{lbZvX-lNI{rGohF-`0mHK;;%o=d02&$2fH#=}%Z4gMaD)5H2_W z#Fql3{JOWbwiu4xukKt9l9pYcD>m2iF9;Z)>Fb2^{4Ku! ztz^lBCgBlDQ*5?!p8F@t#Z6>`#Nje4GcZugTTBnMc`9XWof zU(@c!F=Z|MJV3#m=q)7Uwbjjhln!Ue++l#<9!EQ7cghz9`? z3m-I$^JhO@;$*kVNzudNzpO{F!K4dS$3DR1mklzL$zK+Am(XB^{6^MyeX8ePIfnT_ zFec5uTNqC}Nru{NPa6n;DHH;siRVaVe4@{x1O#Qx{8i*Vn%0ZK&#)>=jGL#DUl74g z#Y^Sl)R%9DBmq}mw(+dgnqLo7GR;TF)Ri8jH z=|EBg8aK4kV8j@Dya;l$GQm$u66h(9nbh3mRy51Dtc|iGq#P-TVxOeh1VAUO(lbH* z1TcQS2BlK;mEze51vZyBH`Dg)Z;F*FitOsYOoKuJa}Mf^zUUtRDPbX+-qYRIKwh%@|q5{wN-j4G7IN3c;$1)!}Mh)VY&V6{QTh?~XT zcf;2KRyznewtT>MgdAORYI67}HR-=dwth@mv3Go#wccsjy_XFE2_afcxL@g#rRhWd zMw@9>KJS4>CzPZA2rb8Sz{A{|ucl6)q9BF*B=E?``25ueZ@XY4^!v{6z?j z4_anoIGO#C7pcF}R!a6H?z;kW*|J!;bfSovLdUoZLj0ULG|Aa`z!f-cS&>2pGz5Jj zG6kRT4cZYew~28f%UmxDm#}peE6IWL@bA|27@y z;{`ZQ`MkuB8S&ok_^jY^`*xG32Zl=2%l!z}Y5gqb&Ou6RWP5717ZUf}J_Ba6eSD$G zwsTD{tI9!%pU4j1)V4SlnA2m#1vw0+y<<{$Yk#!*$5-9F6r@3`X(t=uGebZuobJLg zX=y8F!)(3SSdRv_7ZPKxnNKV zE!Iph)nt&W+5;?r?7;k{*?*+wNsB**nCw?&M4d4^SNS|76{)4bZh1TJ=$iN&F`a3m4%Tp`*aSZ5p&Hm8-DyL)SwFSL zWi=PZN}99t<(r5DqJRXk0#-y+@x<5TH1KwFpZb=8MR&vyEiiT^Tz^|hyC?~-GLQ&A z8rOGl+kC7$qgnnhVvB7YlQU&JHL#*7H#?csx=vnb!N<4h8cn`gL}H)C;zNEK6n13G z5z&X13J;^bS3N-4a1b0MpPyU`rlY@}$0B|C!Vy#^Ifh-`^EB zlb(`)2NB>oeHf-u;M7ilFN3E^fO<&PTo_#JsuMSTbO+$3VXepXPJ0GSI-dTeW z(6n~4*9Y8)NqbF9&keqnN>q!w2Nk4p=}8zJ!!#YCTUiu)ECUiKk7G;0UADz#o$T3U zGM65*46;866*LCo`LJ`ovQH2zNinaj!ORp=)05-N;Cdp~vC_Ged{>x*Q_OX;(z`sj zapEX~X~I!aYG#a|&_e|3Tp_3%v8g>4(sn<=TpCdHN2`jgmw0a`?cx%_VLT@iD1(42 zf2rJ`Zs$Wc<|k&{4aO{D{WsOe!c+AT(Kvpluo$di#3Vt3vRj=a);`$2qM)vfiB6O0ky_*Y2Gj-^9J6h{0<+!H7oasWyN(d{foBF8<gA{b=`PcL}pjBx#G*)_SHgg|;hMaB58~10Okb zQ9zU=!^sX_rDaH^v|rLC5*=7^5J%fpIk%?Lq@injdj#2zXW+kOKtMmYb>ifr0|{yP zGydoC5{%g=k#UUfz?N#&&V3AtV}4~$L1YwMY}4|yd#)$rg6%u7lrp=2%yL^_F;a0UR-Xd~w*NGK@rz;(!I=_!GO z@_-vf8u^kjm$6>SB+3@Jx;D`mdb*poJ^ZK%Frsjy1b+{oWuk0-XQcGe{F=>yK~^f4 zswkK3x$QYV7niuxR`0(68uygmlL>e|$Zh?>W57#_iZ6);Ll`Wv#RL;Zeg#rSNqLqmgckB}ZQ(H2|={^hHDwY=6Mkqo$3yLP0k0@~P@@~$iCaU9kYI15z$eiB7 zn3R3M!JOZEmz$jL)2~Jcu`6SmQacXLc$o%aJrq@;JU5ZMfkNZJyYZ1CiepMkyLu~s znkER8=AR7sqi4!=5Xre6&lw>JTZAkhOxOOGH1Le~s?`h|PeGQWx2kGNhPY)T?rLit z*qQ1$dmGG4ud=0XVs*Z-b8wX|wPn!M9+M46WQFnRW@Fx}i3qGibI+_d@u~dL+Pdy< z2D#vC&U(E>MX;-qun6@SyX<7Yw=)@a%9$X&h?M~pxsqckYtB<*D3jQ}UXFm&>V{~K+H z=6o|y2jv_uK1n0IGs(L4O8!H30zEMZjmx=W%yU& zMOom7Dq%}BQ^2s_2aln>JQhfq(nB?qyuF%LN>ei~@J^1&QG-T(9$cLjAX5O?oE_pU z0t|x)nGcD(1)52X1Pj#)s$}lrODDUc0wtk7%@fv2{XsB7}0v&#vi@8!(Yz)$*iyz}Bvet9%hpPUT>>uC&lW=IAEywm^hyMq9>XK89+5Q_H?*)Ok~Gq&a4&wg<&K&-q3MUPuRjL-CkzlbCTCdPKdPwi)R44Sgd zr=(!^&`jyhdb28h3Y}HI8gsENmYdZRI`3w7U2oKl{*!p$H;reWsyLL$**ka|p>O|< zthfYWR3o#S(hsSIh~amFkcFQ(dZC`tVllX!H7n@8Qp*f`a*1w>C~I(b2u`4tp+s|` zDf?6I)Y)uZM(S@{+H)~a8z(MDpV7gRkLcgst47s7j14p;NAhy^DoOV&M-oO3y28(b z8j~V`$z#=dU&N(DzYa-up-0D3^b$p-L4%r5=NEfQt(?%DE}1pSZKVHMrTjv=+QW)L zsI2q*&o_J-&d4Hjd-m`X7Q!lmIyC(?#DqVr-n!VydcK%Szv@^{VV6?Sc5tJf&ZZVo z1!z-jx;=bbNh@G!%R3$B*VHmK%(95kTX80{zYcX7{&0c}aS7wj<360-e&4^OLkff%-f4v$NOlpu z*XfOXR)gHL=dF3|zj7po(Ri$=ult7>gH5HS!7me#i1qkGyZibplv^{HotFCk$m^-N z;9Og@0pJvGO^G~EYZ>;`M;$JJN%)I54cSe@m0(|DVJ`xhSFFe z<0i5VqU?OuKj$5@+HzC|NC@q8p+F@P`--|a{diER-h@J7Fx!1Nyg~UT04iM@AagK= z8 z+%w4#vEMn}6`3hqFD~P0FRKUS5Uo@DTH2tItapPi$btDA*|)52vU327r7$)_%WpJ+ zEf{$})@^qDF|4HINqRRZ%wkTvQvdDR<4nvhEA>7>OG88AE!x+e_sdME{Co&oZ8Hqk zMKEo(!|?f_@q1R3uF_yHifC-+>16}IfcT@e9Uya z$k^V(#d^%SHdCq>;~fV$ID;_50i6@|3(l9v6yj%SBL`R8BmKW4E)Lafh~K=_kCYJ4 zKni$*LH6vfqAM7@$=&Y<7}K~uLHtpKmYl!6BpY1Se$B}4mAE1?JfVqnb`LAZUAikf z_J^%q4W(w3UG9eAAB*2zUc@Luf}RtQE;kZ0nc+E`l2H4;_3%Crk+s4wY;fjV52_{5 zmqe@~N8r2+W4U5m^-1#mUG-5sm_K|@Kt!Pap=;iG8AR6(Z7U#-e%T=#ix=@kW6#<@ z0U1g0`|wBS5ZECF%NWmu5d(#j&F_~492$0nqAl(sWPY@llG)Uh95*8*LFACcQDNdI z`Xk(3iA%tVgF+-YJ6z&Tq&8g9CFi@Vqt{h|I|~DNk@+uZ_&FzJTcuHGuVIUK%KwA@>JDLk= zE~dv=`=w)V7NYqgVMnBIZ|gTi9Hw8*r?HqKKg*TtPLzF34jyhEzkoA2N1Ci?0BQYb z;rYFbts7LQS$oL)QJcCU9$n()jq`e5toldA_LvIc>| zB)(AM4#bR0oB3=Z>!&(F^vs6!t@y>CbDNK3!2WBuD54v?R3Mrite=)M{7j_1C0|Q^ zREUFrE0eg1cJC?Hpovd(jlh&TCJR0D&gZcx_Mr+ZvJ8E~nt4z<4i4{K3j~mIg!nT;0YsmcvOTj)-!|(Szz8WE78^JmUZO#EOY&I7RH`4zqvoV;JS|QT^dZakb zoK|X{L}sq5Ysdyeq5Acw)11>1+CAa0mNykOSHrC1+FuDUi1SKoy2bKcTr|Gx4u+=c zKWJ-H%wbjrn7%!PLA(4e7vGX=YFrzyW=zQ|1Ov@G9~){MuKz4tIJ!i^mb$&2SS?b} zdk*6p7JT-lCFexar7!Su%s#MYAWJ|74=sHi7tV8JxhK5ZG1cGQ@Nd39nBg4#elkz) z;#$Yf!N$(k=;9>4wr%;IW1dMkd^<(GzeGtC=+wOKVWDTyEEOcGDZE=6}-ifU47 z9^m_~KpiuIMpFvn`&ROW8mIK*Her~AZjZW@HNJYQeR>{F__weUCNR`JH4?W%sRfNG zmec(-DAp6}@MS;-dw9kI>*_?+@8P<^L~Id|p%LZajy?I4o=lQS`^#|F>Vqw%5A z$6uWbPz=BYo*|+V$LMt_u{~xh;vVLkx`7G}wnP7-kH(?aRDtV{-JYJzA+108UP=gD zUqKcu5yc9mw{k41iyFwuewpKnnyoc-O4sdU)fvK9_Gj!7gS)chCNn>>^y1AKDe?lw zI3=eY{G^51WK$UWP^vkI6uOq>$Ca}U?4I8mzY1eF{+W3fc$<}^Ee_YSaExs$hb%gP zstv{(Ylsb<#SIF6X))QWL5Wf?KKHMR+y|-5 z`4@V6WZKQrHq4*(yCtz)er~vj3^P?0sx;SGGu>>aj9qQcs2gT^Z#&& zfHK1g?ID(=rvoWche+ztB>cpi`P|N&Q_$NF>i*biTsBnt5>lmH@gK|E- z{jg1}Bmdde=}6Tq;2vUqJ{*__ZC@ zigG0w&QY*RWmcdD-t|wcNyX&EnB~BPO|J&;)a=kroF*~Sq(I+;$I!4;%nQSe;eHSU zGlhYKBIjtHr-2gLlrX?dS#BAAL2qYk3>+B1bPvFBwGZbQITZZ53XCp>*_sEis8eNG zv(_;qmML*rVZZ=b)UIYjY$_h6^v)FvHd^g={;ta?=XTgFm9uoAUh!BQ6}zs^lMt(h z1$-F}Hx{p~G!X$-tE2ccZg?E?Zc16{+D;`Y^7rK|bqM%ZE#9Qhz*}WCdM*xTv=}n9 zqR*+1)%1!vZ$de;R8Munn>BsR7CZPaUs?k%ewZl#+29N{%7(u1ZeW@CQ5In823emQ za~%S$bUr^=PkNYpsG|)?)h>Ql#+@vFN-3OuJ$DPVVA2$%I1_Ss1?iOB zj$aw$$6T4BVG3B@u57Fgw)b;)IW{qA8a_#d(G*N1tjPPNC5p=K++o6 z^~PiI_orj53l##J=GD`z#!EAUSNHIsBfoRc$7$* z0a*GHF(-w^pB}z2_SB}1?rM*?1POUBK54DIC04`!Xa~1hR;Kp>b-w&s_F4e)|8-W+ zF+yvwI6f;?Of7z)*9k~W!6|A&vY&S0o1 zua2zU1`Ls%uudXg93Std`_&nHoK=68xMWd)_LyD?`Q zU6Yv|nJPEjL=jCEdke9&NB_Wg#XH(|rxvbBGk!xXDPZ2?_;;_De##Mcegz>FSFZo& zwDwQP>9G9ghRc$t08-G$t;15_ugjx<^sFK6bi77}TTbJ@8U-2p!4n1{w7L$rV-?q? zt<+sBRb`PjPo<;EptI_+vwX3tQ;Cl~r}t3&9fjgyHxNxR$#ia;s+~>psbNNsUq|dF z2WnB7eNRZuZ#mi&se}}Jjp@%{1Ywx?C8#r&F3$uN)}Fg5bUM`xf##7(vtt|K)6wkM zjt$L2i&Ia^sRPr7<+$qFO;7{LE09uHxK~mkY<)n&JA#`*>L2vQst;6o!t55$^@vhCwqi?S?`TU*e4YFW;PVRJ6pyUM97+Z@)0L}b0?ElXx5XO)`q zqSxVF<`6Lob9}>udVSyZ{RQ83eLp=v+}HK|@ceLJ_j6zO^R)7LT^}_&yktE4o_drn zzhMazzQBE(LWJbJ3VZ*?Ta(jB1+QZ+*RKEkJu44@SYw6*w?grc!=E&V;j8ral!Hq* zNjnOLW`QZmr^F!@mt}2V2BwfEJKX2NRQDWpOh_`XvW_Ohz9LzDndI z&Rlp6uFxIQP6iVLYHZZOoKJzU4HP`@AxwuC7zQ91VNhy(2Uh{P*KhA^Lrxwe3OJFD z+EdInV>VC1F+gO6*c>zGh<3g8P6Jy|V_AhrX)0icQj&bJ^C-Fa^&_}TdS6O@X3G^; z93jylOH}D$N5WqLJR1sXXAWzWYWkK;=~Y+XX;E7rU}fB4>wRm`JV`IUKZm=!^BG?b z?^NhdV-$xNwT8dg4rP(_UUlGj+2r`NEy`^2mEzjq2mrwZb8%@e&L@rk9D!@rC%G(O z+vn8;GzF z8#}j{@yJ--gts&0TLHU_$@*5pKFBnG@_OKV`Jm3>Hv+&)Anz+dfREx&cnW&Fdb$KU z&)t&f?0nV@j~`~WzKoJj2n+X`B>nTF(RVHO`T+S9@Z(I@HY%%27F&fP#WQzEoIX=& zW|5JXdJB>0vCmgP0vrb_Y10topCoUz!mQDQG?O+)yqaJ%@vHsx6ABf0_G1JUQHB z^n-ZI5>_zCk$(7G)uFS{G0ufCEsWAHhc@8kAhmid-WYvS*M(?S2$!S>CvY~aSnD5`}X$(C66yEM=5W3m2g$ehy{7T{1HFwlPp8XCb|(NEUr++ zugex*+Rn5;27lX!j&O!Kc+X82vaPCBdNM@bIn;RwW!Kr0!?m9#NeeCb_5SpbwG8*! zTnn@)dt>o!3^~ZodY~SvIifHOl%zKqUzr7p&L#}ka(G4_rII)6Sg4&6MCVSGG7bB>W|!(S~+!_+o|3Ut*X|L;XBdit?B_wK-(Ug z@I2Kr@_HaGYNBdhzwdOwh;e)~lwi)_TGM_rx9zz>$s3-^4EC=L5l?eOeKVF8S0Nv$ z9sXXaZC|SI7Q@}c;FNsN9N$R4!;Or0;eEkpv?+LbNMmY#q-R&FuxfA~nQ%g74k!WM zKE9dCam&%s=rjr?Ax%Z+f5fy_KYS76h>``d+w{EJQJl8v44UZtxN_WhbHW(7HTZIM zq|+|KVFHbdc-ijhR`9ZL@!Ng=(48P>%Q}iRrr4rUR;XjtFB64a0QdK-QnZbk!=|QU zqjS(QwZ*%m@GSn+GHxQ4xXma-SgN}y)2=DzFCM3>(*3wG?_+Iv^9|c8Qfqsbh~2hL z>t;o2qscXPq1chKZLpZZUi{NZ(SF6R?OgUoYd7s3Y#m@Wr^#t))!xrYVKFSX6t`1J9s}2l*)k^hCaM%ZKOY4~F zeLUvBzW}kBW2L$^Xd0K$Y-`t@1U?9lGWjKCZ0;y=)>SBM zk8Xh)yk7u$?ebYIGuk=Z28TXt_Hx6QzS6e0dC*6wC^hH-CDx5(bb%YY!_NBui-||% z)1c59T&XsFVPe6wQ>kxmC$&~|NzksgQ4t+tc8SrZc>mbzMRSvgAEbWWEDc+OI0?UZ z66#iHjs4t5(zAUDD?wnYkP)+;Z0i~#gz zWsK>CmDO#u&OGI(g03r%87V(P>vS0^1YhI7f56U?{&9SY;m%Oq+$=ao@!lQ-TiV23 zpZFT5T;6>p_kas*qsZO55Ry@|__0Poi$fxw7`rKX8h~`QHLo;4XVrH-D?|ArFc5HR=V{S@ORgy(Wfx1DrU9o^AJ_u| z)Vr(Tf<*1EOcpOy>J+ToyZ5zOt@M8YHGvX8$C!T`8*eoh-RmQbt$5W%MI zp&KvsE-L2@J=n5B0Qlximow{DZ{(AvTL&J6Np*V6e09l8diS}#_eBZoHV2sE8-!?_ za~JA8(2vH~tsMr4WCJ*jWsEG@i84)j1wedyc|#4cj6lb#3SN#q@}!3u4_y_bva9>+ z`%6n>1a+S2x64)ShDGO$hZAShIRA&N?EmPgNHio04?&m^9hmkH DFUP26 literal 0 HcmV?d00001 diff --git a/packages/preview/synkit/0.0.41/gallery/tree_6.typ b/packages/preview/synkit/0.0.41/gallery/tree_6.typ new file mode 100644 index 0000000000..9fa147a1d1 --- /dev/null +++ b/packages/preview/synkit/0.0.41/gallery/tree_6.typ @@ -0,0 +1,10 @@ +#import "@preview/synkit:0.0.41": * +#show: eg-rules +#set page(height: auto, width: auto, margin: (bottom: 1em, top: 1em, x: 1em)) + +#gloss(spacing: 1.2em, caption: [An example from Portuguese])[ + - eu gosto de maçã + - I like-{1sg.prs} of apple + - 'I like apples.' +] + diff --git a/packages/preview/synkit/0.0.41/gloss.typ b/packages/preview/synkit/0.0.41/gloss.typ new file mode 100644 index 0000000000..61d8dc216c --- /dev/null +++ b/packages/preview/synkit/0.0.41/gloss.typ @@ -0,0 +1,300 @@ +// Interlinear glossed examples with automatic numbering +// Creates aligned word-by-word glosses; wrap text in {} for small-caps +// +// Generates numbered glossed examples that share the (1), (2)... sequence with eg(). +// +// Arguments: +// - body (content): List items — all but last are alignment lines, last is free translation +// - per (int or none): Lines per sub-gloss group (none = single gloss) +// - labels (array): Optional labels for sub-glosses (e.g., (, )) +// - caption (string): Caption for outline (hidden in document; optional) +// - spacing (length): Vertical spacing between gloss lines (default: 0.75em) +// - title (content or none): Title line shown above the gloss (not space-parsed) +// +// Returns: Numbered glossed example that can be labeled and referenced +// +// Single gloss: +// #gloss()[ +// - eu gosto de maçã +// - I like-{1sg.prs} of apple +// - 'I like apples' +// ] +// +// With title: +// #gloss(title: [Inuktitut])[ +// - Qasuiirsarvigssarsingitluinarnarpuq +// - tired not cause-to-be place-for suitable ... +// - 'Someone did not find a completely suitable resting place.' +// ] +// +// Sub-glosses: +// #gloss(per: 3, labels: (, ))[ +// - eu gosto de maçã +// - I like-{1sg.prs} of apple +// - 'I like apples' +// - elle aime les pommes +// - she like.{3sg.prs} the.{pl} apple.{pl} +// - 'She likes apples' +// ] + +#import "eg.typ": example-counter, letters, subex-counter + +// Extract list items from body (may be nested in a sequence) +#let _extract-items(body) = { + if body.func() == list.item { return (body,) } + if body.has("children") { + return body.children.filter(c => c.func() == list.item) + } + () +} + +// Recursively convert Typst content to a plain string +// Handles text nodes, sequences, and spaces +#let _content-to-string(c) = { + if type(c) == str { return c } + if c.has("text") { return c.text } + if c.has("children") { + let result = "" + for child in c.children { + if child.has("text") { result += child.text } else if child.has("children") { + for grandchild in child.children { + if grandchild.has("text") { result += grandchild.text } else { result += " " } + } + } else { result += " " } + } + return result + } + " " +} + +// Format a single gloss token: text inside {} gets small-capped +// "like-{1prs.sg}" → like- + sc(1prs.sg) +#let _format-gloss-token(token) = { + if not token.contains("{") { return [#token] } + // Split by { and } to find small-cap regions + let result = [] + let remaining = token + while remaining.contains("{") { + let open = remaining.position("{") + let before = remaining.slice(0, open) + remaining = remaining.slice(open + 1) + if remaining.contains("}") { + let close = remaining.position("}") + let sc-text = remaining.slice(0, close) + remaining = remaining.slice(close + 1) + result = result + [#before] + smallcaps[#sc-text] + } else { + // No closing brace, treat { as literal + result = result + [#before\{#remaining] + remaining = "" + } + } + if remaining != "" { + result = result + [#remaining] + } + result +} + +// Tokenize alignment lines into arrays of tokens +#let _tokenize-lines(line-strings) = { + line-strings.map(line => line.split(regex("\\s+")).filter(s => s != "")) +} + +// Build a full gloss grid: optional prefix columns + aligned tokens + free translation row +// prefix-cols: number of extra columns before the token columns (for number/letter) +// prefix-cells: flat array of cells to prepend to each row (length = prefix-cols per row) +#let _build-full-gloss(items, spacing, title: none, prefix-cols: 0, prefix-cells: (), escape: ()) = { + let n = items.len() + let align-items = items.slice(0, n - 1) + let free-trans = items.last().body + + let line-strings = align-items.map(it => _content-to-string(it.body)) + let tokenized = _tokenize-lines(line-strings) + // Escaped lines don't contribute to column count (they span all columns) + let non-escaped-tokens = tokenized.enumerate().filter(((i, _)) => i not in escape).map(((_, t)) => t) + let max-token-cols = if non-escaped-tokens.len() > 0 { + calc.max(..non-escaped-tokens.map(t => t.len())) + } else { + 1 + } + let total-cols = prefix-cols + max-token-cols + + let cells = () + + // Title row (spans all columns; steals first alignment row's prefix cells) + if title != none { + if prefix-cols > 0 { + for p in range(prefix-cols) { + if p < prefix-cells.len() { + cells.push(prefix-cells.at(p)) + } else { + cells.push([]) + } + } + } + cells.push(grid.cell(colspan: max-token-cols, title)) + } + + // Alignment rows + for (row-idx, row) in tokenized.enumerate() { + // Prefix cells for this row (skip first row's prefix if title already used them) + if prefix-cols > 0 { + let base = row-idx * prefix-cols + for p in range(prefix-cols) { + if title != none and row-idx == 0 { + cells.push([]) + } else if base + p < prefix-cells.len() { + cells.push(prefix-cells.at(base + p)) + } else { + cells.push([]) + } + } + } + // Token cells (escaped lines span all token columns without tokenization) + if row-idx in escape { + cells.push(grid.cell(colspan: max-token-cols, align-items.at(row-idx).body)) + } else { + for col in range(max-token-cols) { + if col < row.len() { + cells.push(_format-gloss-token(row.at(col))) + } else { + cells.push([]) + } + } + } + } + + // Free translation row (spans all token columns) + if prefix-cols > 0 { + for _ in range(prefix-cols) { cells.push([]) } + } + cells.push(grid.cell(colspan: max-token-cols, free-trans)) + + let col-spec = () + for _ in range(prefix-cols) { col-spec.push(2em) } + for _ in range(max-token-cols) { col-spec.push(auto) } + + grid( + columns: col-spec, + column-gutter: 0.75em, + row-gutter: spacing, + align: left + bottom, + ..cells, + ) +} + +// Main gloss function +#let gloss( + per: none, + labels: (), + caption: none, + spacing: 0.75em, + title: none, + escape: (), + body, +) = { + let items = _extract-items(body) + + let content = if per != none and items.len() > per { + // Sub-glosses mode: chunk items into groups of `per` + let groups = () + let i = 0 + while i + per <= items.len() { + groups.push(items.slice(i, i + per)) + i += per + } + if i < items.len() { + groups.push(items.slice(i)) + } + + // Build each sub-gloss as a flat grid, then stack them + let sub-blocks = () + for (gi, group) in groups.enumerate() { + // Build prefix cells: number (first row only) + letter (first row only) + let n-align-lines = group.len() - 1 // all but free translation + let prefix = () + for row in range(n-align-lines) { + if row == 0 { + // Number cell + if gi == 0 { + prefix.push(context { + subex-counter.update(0) + example-counter.step() + [(#(example-counter.get().first() + 1))] + }) + } else { + prefix.push([]) + } + // Letter cell + let letter-fig = figure( + box(baseline: 0pt, context { + set par(first-line-indent: 0em) + subex-counter.step() + let n = subex-counter.get().first() + [#letters.at(n).] + }), + kind: "linguistic-subexample", + supplement: none, + numbering: none, + ) + let letter-cell = if labels != () and gi < labels.len() { + [#letter-fig#labels.at(gi)] + } else { + letter-fig + } + prefix.push(letter-cell) + } else { + prefix.push([]) // empty number + prefix.push([]) // empty letter + } + } + + let group-title = if gi == 0 { title } else { none } + sub-blocks.push(_build-full-gloss( + group, + spacing, + title: group-title, + prefix-cols: 2, + prefix-cells: prefix, + escape: escape, + )) + } + + stack(dir: ttb, spacing: spacing * 2, ..sub-blocks) + } else { + // Single gloss mode: number in prefix column + let n-align-lines = items.len() - 1 + let prefix = () + for row in range(n-align-lines) { + if row == 0 { + prefix.push(context { + subex-counter.update(0) + example-counter.step() + [(#(example-counter.get().first() + 1))] + }) + } else { + prefix.push([]) + } + } + + _build-full-gloss( + items, + spacing, + title: title, + prefix-cols: 1, + prefix-cells: prefix, + escape: escape, + ) + } + + figure( + align(left, content), + caption: if caption != none { caption } else { none }, + outlined: caption != none, + kind: "linguistic-example", + supplement: none, + numbering: "(1)", + placement: none, + gap: 0pt, + ) +} diff --git a/packages/preview/synkit/0.0.41/lib.typ b/packages/preview/synkit/0.0.41/lib.typ new file mode 100644 index 0000000000..f23b49d2fa --- /dev/null +++ b/packages/preview/synkit/0.0.41/lib.typ @@ -0,0 +1,95 @@ +// synkit — A toolkit to draw syntax trees +// Version 0.1.0 + +#import "syntax.typ": garden, tree +#import "movement.typ": blank, move +#import "eg.typ": eg, eg-rules +#import "gloss.typ": gloss + +/// Draw a syntax tree from bracket notation. +/// Optional arguments include spacing, arrows, annotations, color, +/// numbering, font controls, and `show-refs`; see the package manual for the +/// full list. +/// +/// ```typ +/// #tree("[CP [C' [C did] [TP [DP she] [T' [T e] [VP [V leave]]]]]]") +/// ``` +#let tree = tree + +/// Draw multiple syntax trees in a single canvas with cross-tree equivalence lines. +/// +/// Each positional argument is a spec dict with the tree-specific keys supported +/// by `garden()` (`input`, `direction`, `spread`, `drop`, `content-size`, +/// `node-size`, `triangle`, `terminal-branch`, `bottom`). +/// Node anchors are suffixed with tree index: `"np1-1"` = first NP in tree 1. +/// +/// ```typ +/// #garden( +/// (input: "[S [NP the cat] [VP [V sat]]]", direction: "down"), +/// (input: "[S [NP 猫が] [VP [V 座った]]]", direction: "up"), +/// equivalence: (("np1-1", "np1-2"),), +/// gap: 2.0, +/// ) +/// ``` +#let garden = garden + +/// Draw inline movement notation with subscripted bracket labels and +/// rectangular arrows below the text. Optional arguments include `arrows`, +/// `delinks`, `scale`, `content-size`, `line-width`, and `protect`. +/// +/// ```typ +/// #move( +/// "[CP Who do you think [(CP)[TPsaw Mary]]]", +/// arrows: ((from: "who2", to: "who1", dash: "solid", color: black),), +/// ) +/// ``` +#let move = move + +/// Render a blank underline representing an empty position. +/// Use `width` to adjust its length. +/// +/// ```typ +/// The word #blank(width: 3em) means "house". +/// ``` +#let blank = blank + +/// Numbered linguistic example with automatic (1), (2)... numbering. +/// Wrap content directly for a single example, or use list syntax for +/// automatically lettered sub-examples. Use `labels` to make individual +/// sub-examples referenceable. +/// Apply `#show: eg-rules` to enable reference formatting. +/// Optional arguments include `caption`, `title`, and `labels`. +/// +/// ```typ +/// #eg(labels: (, ))[ +/// - Who do you think saw Mary? +/// - #move( +/// "[CP Who do you think [(CP)[TPsaw Mary]]]", +/// arrows: ((from: "who2", to: "who1", dash: "solid", color: black),), +/// ) +/// ] +/// ``` +#let eg = eg + +/// Show rules for linguistic examples. +/// +/// Apply this to enable proper reference formatting for eg(). +/// References render as (1), (1a), (1b), etc. +/// +/// Usage: `#show: eg-rules` +#let eg-rules = eg-rules + +/// Create an interlinear glossed example with automatic numbering. +/// Shares the same (1), (2)... sequence as eg(). +/// Apply `#show: eg-rules` to enable reference formatting. +/// Optional arguments include `per`, `labels`, `caption`, `spacing`, +/// `title`, and `escape`. +/// +/// ```typ +/// #gloss()[ +/// - eu gosto de maçã +/// - I like.1prs.sg.pres of apple +/// - 'I like apples' +/// ] +/// ``` +#let gloss = gloss diff --git a/packages/preview/synkit/0.0.41/movement.typ b/packages/preview/synkit/0.0.41/movement.typ new file mode 100644 index 0000000000..54479a7f3d --- /dev/null +++ b/packages/preview/synkit/0.0.41/movement.typ @@ -0,0 +1,573 @@ +// Movement module for synkit +// Draws inline movement notation with subscripted bracket labels +// and rectangular arrows below the text. +// Usage: #move("[CP Who do you think [(CP)[TPsaw Mary]]]", +// arrows: ((from: "who2", to: "who1"),)) + +#import "@preview/cetz:0.5.2" +#import "_symbols.typ": apply-symbols as _apply-symbols, symbol-map as _symbol-map + +// Draw a delink mark (two perpendicular bars) at a point along a line. +#let _draw-delink(mx, my, tang-x, tang-y, sw) = { + let len = calc.sqrt(tang-x * tang-x + tang-y * tang-y) + if len == 0 { return } + let dir-x = tang-x / len + let dir-y = tang-y / len + let perp-x = -dir-y + let perp-y = dir-x + let bar = 0.15 + let gap = 0.03 + for sign in (-1, 1) { + let cx = mx + sign * gap * dir-x + let cy = my + sign * gap * dir-y + cetz.draw.line( + (cx - bar * perp-x, cy - bar * perp-y), + (cx + bar * perp-x, cy + bar * perp-y), + stroke: sw, + ) + } +} + +/// Render a blank underline, representing an empty position (e.g. where +/// something used to be before moving). Use standalone in regular text. +#let blank(width: 2em) = box( + width: width, height: 0.8em, baseline: 50%, + stroke: (bottom: 0.5pt + black), +) + +// Internal helpers — shared between _move-layout and move() rendering +// so measurements stay consistent. +#let _blank-box() = box(width: 2em, height: 0.8em, stroke: (bottom: 0.5pt + black)) + +#let _t-trace-box(subscript, fsz, sub-fsz) = { + text(size: fsz, style: "italic", "t") + text(size: sub-fsz, baseline: 0.2em, style: "italic", _apply-symbols(subscript)) +} + +// ── Classify a word buffer into word / blank / t-trace ──────────────────── +#let _classify-word(buf) = { + if buf == "__" { + (type: "blank") + } else if buf.len() >= 3 and buf.starts-with("t_") { + (type: "t-trace", subscript: buf.slice(2)) + } else { + (type: "word", text: buf) + } +} + +// ── Move tokenizer ────────────────────────────────────────────────────────── +// Splits inline movement notation into tokens: +// [LABEL → bracket-open with label +// [(LABEL) → bracket-open with parenthesized label +// ] → bracket-close +// → trace marker (visible, creates anchor) +// word → bare word +#let _move-tokenize(input) = { + let tokens = () + let chars = input.clusters() + let i = 0 + let buf = "" + let n = chars.len() + + while i < n { + let ch = chars.at(i) + + if ch == "[" { + // Flush word buffer + if buf != "" { + tokens.push(_classify-word(buf)) + buf = "" + } + // Scan label after [ + i = i + 1 + let label = "" + if i < n and chars.at(i) == "(" { + // Parenthesized label: [(LABEL) + let paren-buf = "(" + i = i + 1 + while i < n and chars.at(i) != ")" { + paren-buf = paren-buf + chars.at(i) + i = i + 1 + } + if i < n { + paren-buf = paren-buf + ")" + i = i + 1 + } // consume ) + label = paren-buf + } else { + // Regular label: [LABEL (until whitespace, [, ], <, or end) + while i < n and chars.at(i) != " " and chars.at(i) != "[" and chars.at(i) != "]" and chars.at(i) != "<" { + label = label + chars.at(i) + i = i + 1 + } + } + tokens.push((type: "bracket-open", label: label)) + } else if ch == "]" { + if buf != "" { + tokens.push(_classify-word(buf)) + buf = "" + } + tokens.push((type: "bracket-close")) + i = i + 1 + } else if ch == "<" { + if buf != "" { + tokens.push(_classify-word(buf)) + buf = "" + } + // Scan trace name until > + i = i + 1 + let name = "" + while i < n and chars.at(i) != ">" { + name = name + chars.at(i) + i = i + 1 + } + if i < n { i = i + 1 } // consume > + tokens.push((type: "trace", name: name)) + } else if ch == " " { + if buf != "" { + tokens.push(_classify-word(buf)) + buf = "" + } + i = i + 1 + } else { + buf = buf + ch + i = i + 1 + } + } + if buf != "" { tokens.push(_classify-word(buf)) } + tokens +} + +// ── Assign anchors to move tokens ─────────────────────────────────────────── +// Words and traces share a common counter pool (case-insensitive). +// Bracket labels get their own anchors too. +// Strip punctuation and symbol shortcuts for anchor naming +// \lambda → lambda, chocolate? → chocolate +#let _strip-anchor(s) = { + let result = s + // Strip subscript suffix: Who_i → Who + let upos = result.position("_") + if upos != none and upos > 0 { + result = result.slice(0, upos) + } + // Strip formatting markers + for p in ("**", "*", "@", "&", "~") { + result = result.replace(p, "") + } + for p in ("?", "!", ".", ",", ";", ":", "'", "'") { + result = result.replace(p, "") + } + // Strip backslash from symbol shortcuts: \lambda → lambda + for (key, _val) in _symbol-map { + if result.contains(key) { + result = result.replace(key, key.slice(1)) + } + } + result +} + +// ── Format a word for move(): handles *italic*, **bold**, @smallcaps@, +// &underline&, ~strike~, and Word_i subscripts. +// Returns Typst content ready for rendering. +#let _move-format-word(raw, fsz, sub-fsz) = { + // Split subscript: Who_i → main="Who", sub-text="i" + let main = raw + let sub-text = none + let upos = raw.position("_") + if upos != none and upos > 0 { + main = raw.slice(0, upos) + sub-text = raw.slice(upos + 1) + } + + // Detect formatting markers + let is-bold = main.starts-with("**") and main.ends-with("**") and main.len() >= 5 + let is-italic = not is-bold and main.starts-with("*") and main.ends-with("*") and main.len() >= 3 + let is-smallcaps = main.starts-with("@") and main.ends-with("@") and main.len() >= 3 + let is-underline = main.starts-with("&") and main.ends-with("&") and main.len() >= 3 + let is-strike = main.starts-with("~") and main.ends-with("~") and main.len() >= 3 + + // Strip markers + let inner = if is-bold { main.slice(2, main.len() - 2) } + else if is-italic { main.slice(1, main.len() - 1) } + else if is-smallcaps { main.slice(1, main.len() - 1) } + else if is-underline { main.slice(1, main.len() - 1) } + else if is-strike { main.slice(1, main.len() - 1) } + else { main } + + // Apply symbol substitution + let display = _apply-symbols(inner) + + // Apply formatting + let body = if is-bold { text(size: fsz, weight: "bold", display) } + else if is-italic { text(size: fsz, style: "italic", display) } + else if is-smallcaps { text(size: fsz, smallcaps(display)) } + else if is-underline { text(size: fsz, underline(display)) } + else if is-strike { text(size: fsz, strike(display)) } + else { text(size: fsz, _apply-symbols(main)) } + + // Append subscript + if sub-text != none { + body + text(size: sub-fsz, baseline: 0.2em, style: "italic", _apply-symbols(sub-text)) + } else { + body + } +} + +#let _move-assign-anchors(tokens) = { + let counts = (:) + let result = () + for tok in tokens { + if tok.type == "word" { + let key = _strip-anchor(lower(tok.text)).replace("'", "bar").replace("'", "bar").replace(" ", "-") + let c = counts.at(key, default: 0) + 1 + counts.insert(key, c) + result.push((..tok, anchor: key + str(c))) + } else if tok.type == "trace" { + let key = lower(tok.name).replace("'", "bar").replace("'", "bar").replace(" ", "-") + let c = counts.at(key, default: 0) + 1 + counts.insert(key, c) + result.push((..tok, anchor: key + str(c))) + } else if tok.type == "blank" { + let key = "trace" + let c = counts.at(key, default: 0) + 1 + counts.insert(key, c) + result.push((..tok, anchor: key + str(c))) + } else if tok.type == "t-trace" { + let key = "trace" + let c = counts.at(key, default: 0) + 1 + counts.insert(key, c) + result.push((..tok, anchor: key + str(c))) + } else if tok.type == "bracket-open" and tok.label != "" { + // Strip parens for anchor naming: (CP) → cp + let raw = tok.label.replace("(", "").replace(")", "") + let key = lower(raw).replace("'", "bar").replace("'", "bar").replace(" ", "-") + let c = counts.at(key, default: 0) + 1 + counts.insert(key, c) + result.push((..tok, anchor: key + str(c))) + } else { + result.push((..tok, anchor: none)) + } + } + result +} + +// ── Compute layout positions for move tokens (measure-based) ──────────────── +// Must be called inside a context block. Uses measure() for accurate widths. +// Returns array of layout entries with x-positions, plus total width. +#let _move-layout(tokens, fsz, sub-fsz, scale-factor) = { + let unit = scale-factor * 1cm // canvas unit length + let space-w = measure(text(size: fsz, " ")).width / unit + let x = 0.0 + let entries = () + let prev-type = none + + for tok in tokens { + if tok.type == "bracket-open" { + // Space before bracket if preceded by word, trace, or bracket-close + if prev-type == "word" or prev-type == "trace" or prev-type == "bracket-close" or prev-type == "blank" or prev-type == "t-trace" { + x = x + space-w + } + let entry-x = x + let bw = measure(text(size: fsz, "[")).width / unit + x = x + bw + // Subscript label width + let sub-w = 0.0 + if tok.label != "" { + sub-w = measure(text(size: sub-fsz, _apply-symbols(tok.label))).width / unit + x = x + sub-w + } + entries.push((..tok, x: entry-x, width: bw + sub-w, bw: bw, anchor-x: entry-x + bw * 0.5)) + prev-type = "bracket-open" + } else if tok.type == "bracket-close" { + // No space before closing bracket + let entry-x = x + let bw = measure(text(size: fsz, "]")).width / unit + x = x + bw + entries.push((..tok, x: entry-x, width: bw, anchor-x: entry-x)) + prev-type = "bracket-close" + } else if tok.type == "trace" { + if prev-type != none { x = x + space-w } + let entry-x = x + let display = "⟨" + _apply-symbols(tok.name) + "⟩" + let w = measure(text(size: fsz, display)).width / unit + x = x + w + entries.push((..tok, x: entry-x, width: w, anchor-x: entry-x + w * 0.5)) + prev-type = "trace" + } else if tok.type == "word" { + if prev-type != none { x = x + space-w } + let entry-x = x + let w = measure(_move-format-word(tok.text, fsz, sub-fsz)).width / unit + x = x + w + entries.push((..tok, x: entry-x, width: w, anchor-x: entry-x + w * 0.5)) + prev-type = "word" + } else if tok.type == "blank" { + if prev-type != none { x = x + space-w } + let entry-x = x + let w = measure(_blank-box()).width / unit + x = x + w + entries.push((..tok, x: entry-x, width: w, anchor-x: entry-x + w * 0.5)) + prev-type = "blank" + } else if tok.type == "t-trace" { + if prev-type != none { x = x + space-w } + let entry-x = x + let w = measure(_t-trace-box(tok.subscript, fsz, sub-fsz)).width / unit + x = x + w + entries.push((..tok, x: entry-x, width: w, anchor-x: entry-x + w * 0.5)) + prev-type = "t-trace" + } + } + (entries: entries, total-width: x) +} + +/// Draw inline movement notation with subscripted bracket labels and +/// rectangular arrows below the text. +/// +/// - input (string): Bracket notation with movement markers. +/// - `[LABEL ...]` — opening bracket with subscript label +/// - `[(LABEL)...]` — bracket with parenthesized subscript label +/// - `` — visible trace/copy marker; creates a named anchor +/// - bare words — rendered as plain text; auto-create anchors +/// +/// - arrows (array): Movement arrows drawn below the text. +/// Each entry is a dict with `from`, `to`, and optional `dash`, `color`, +/// `line-width`. Anchors are auto-numbered by occurrence (case-insensitive): +/// "Who" → `who1`, `` → `who2`. +/// - protect (bool): When `true`, reserves vertical space for arrows below the +/// text. Use this for standalone output such as gallery PNG exports. The +/// default `false` keeps baseline alignment cleaner inside table cells and +/// numbered examples. (default: `false`) +/// +/// Example: +/// ``` +/// #move( +/// "[CP Who do you think [(CP)[TPsaw Mary]]]", +/// arrows: ((from: "who2", to: "who1", dash: "solid", color: black),), +/// ) +/// ``` +#let move( + input, + arrows: (), + delinks: (), + scale: 1.0, + content-size: 1, + line-width: 1.0, + protect: false, +) = { + let scale-factor = scale + + // Tokenize and assign anchors + let tokens = _move-tokenize(input) + let tokens = _move-assign-anchors(tokens) + + // Render (layout computed inside context for accurate measure()) + context { + let fsz = content-size * 1em / scale-factor + let sub-fsz = fsz * 0.65 + + // Layout with real measurements + let layout = _move-layout(tokens, fsz, sub-fsz, scale-factor) + let entries = layout.entries + + // Build name-to-pos mapping: anchor → x-center + let name-to-pos = (:) + for e in entries { + if e.anchor != none { + name-to-pos.insert(e.anchor, e.anchor-x) + } + } + let _norm = luma(15%) + let sw = 0.018 * line-width + let arrow-mark-scale = 0.5 + + // Render the canvas, then trim it to text-only height so table cells + // with bottom alignment put "b." at the text level. + let unit = scale-factor * 1cm + let box-w = layout.total-width * unit + + let canvas-body = cetz.canvas(length: unit, { + import cetz.draw: * + + // ── Render text elements ────────────────────────────── + // Fixed-height box ensures consistent baseline alignment across all elements. + let ref-h = measure(text(size: fsz, "Hgy[")).height + let _aligned(body) = box(height: ref-h, align(horizon, body)) + + for e in entries { + if e.type == "bracket-open" { + content( + (e.x, 0), + _aligned(text(size: fsz, "[")), + anchor: "west", + ) + // Draw subscript label + if e.label != "" { + content( + (e.x + e.bw, -0.08), + text(size: sub-fsz, _apply-symbols(e.label)), + anchor: "north-west", + ) + } + } else if e.type == "bracket-close" { + content( + (e.x, 0), + _aligned(text(size: fsz, "]")), + anchor: "west", + ) + } else if e.type == "trace" { + content( + (e.x, 0), + _aligned(text(size: fsz, "⟨" + _apply-symbols(e.name) + "⟩")), + anchor: "west", + ) + } else if e.type == "word" { + content( + (e.x, 0), + _aligned(_move-format-word(e.text, fsz, sub-fsz)), + anchor: "west", + ) + } else if e.type == "blank" { + content( + (e.x, 0), + _aligned(_blank-box()), + anchor: "west", + ) + } else if e.type == "t-trace" { + content( + (e.x, 0), + _aligned(_t-trace-box(e.subscript, fsz, sub-fsz)), + anchor: "west", + ) + } + } + + // ── Draw rectangular arrows below text ──────────────── + let head-back = 0.12 + let base-drop = 0.35 // gap below text baseline to start arrow + let rect-count = 0 + + for arrow in arrows { + let is-dict = type(arrow) == dictionary + let raw-from = if is-dict { arrow.at("from") } else { arrow.at(0) } + let raw-to = if is-dict { arrow.at("to") } else { arrow.at(1) } + let paint = if is-dict { arrow.at("color", default: _norm) } else { _norm } + let dash-style = if is-dict { arrow.at("dash", default: "solid") } else { "solid" } + let arrow-lw = if is-dict { arrow.at("line-width", default: 1.0) } else { 1.0 } + + if raw-from in name-to-pos and raw-to in name-to-pos { + let fx = name-to-pos.at(raw-from) + let tx = name-to-pos.at(raw-to) + + let a-sw = sw * arrow-lw + let is-wavy = dash-style == "wavy" + let shaft-stroke = if dash-style == "solid" or is-wavy { + (paint: paint, thickness: a-sw) + } else { + (paint: paint, thickness: a-sw, dash: dash-style) + } + let head-stroke = (paint: paint, thickness: a-sw) + let mark-style = (end: ">", fill: paint, scale: arrow-mark-scale) + + // Rectangular arrow below text + let stagger = rect-count * 0.35 + rect-count = rect-count + 1 + + let bar-y = -(base-drop + 0.5 + stagger) + let drop-y = -(base-drop) + + if is-wavy { + // Wavy: smooth sine wave along each leg + let amp = 0.035 // wave amplitude + let wlen = 0.10 // wave length (one full cycle) + let samples-per-cycle = 12 // points per cycle for smoothness + + // Sine-wave along a vertical segment + let _wavy-v(x0, y0, y1, stk) = { + let dist = calc.abs(y1 - y0) + let sgn = if y1 > y0 { 1 } else { -1 } + let cycles = calc.max(1, calc.round(dist / wlen)) + let total = int(cycles * samples-per-cycle) + for k in range(total) { + let t0 = k / total + let t1 = (k + 1) / total + let py0 = y0 + sgn * t0 * dist + let py1 = y0 + sgn * t1 * dist + let px0 = x0 + amp * calc.sin(t0 * cycles * 2 * calc.pi) + let px1 = x0 + amp * calc.sin(t1 * cycles * 2 * calc.pi) + line((px0, py0), (px1, py1), stroke: stk) + } + } + + // Sine-wave along a horizontal segment + let _wavy-h(y0, x0, x1, stk) = { + let dist = calc.abs(x1 - x0) + let sgn = if x1 > x0 { 1 } else { -1 } + let cycles = calc.max(1, calc.round(dist / wlen)) + let total = int(cycles * samples-per-cycle) + for k in range(total) { + let t0 = k / total + let t1 = (k + 1) / total + let px0 = x0 + sgn * t0 * dist + let px1 = x0 + sgn * t1 * dist + let py0 = y0 + amp * calc.sin(t0 * cycles * 2 * calc.pi) + let py1 = y0 + amp * calc.sin(t1 * cycles * 2 * calc.pi) + line((px0, py0), (px1, py1), stroke: stk) + } + } + + // From: drop down (wavy) + _wavy-v(fx, drop-y, bar-y, shaft-stroke) + // Horizontal bar (wavy) + _wavy-h(bar-y, fx, tx, shaft-stroke) + // To: rise up (wavy stops early, straight into arrowhead) + let clear = 0.18 // clearance for a clean arrowhead + _wavy-v(tx, bar-y, drop-y - clear, shaft-stroke) + line((tx, drop-y - clear), (tx, drop-y - head-back), stroke: shaft-stroke) + let tiny = 0.01 + line((tx, drop-y - head-back - tiny), (tx, drop-y), stroke: head-stroke, mark: mark-style) + } else { + // From: drop down + line((fx, drop-y), (fx, bar-y), stroke: shaft-stroke) + // Horizontal bar + line((fx, bar-y), (tx, bar-y), stroke: shaft-stroke) + // To: rise up with arrowhead + line((tx, bar-y), (tx, drop-y - head-back), stroke: shaft-stroke) + let tiny = 0.01 + line((tx, drop-y - head-back - tiny), (tx, drop-y), stroke: head-stroke, mark: mark-style) + } + + // Delink mark on horizontal bar + if (rect-count - 1) in delinks { + let mid-x = (fx + tx) / 2 + _draw-delink(mid-x, bar-y, 1.0, 0.0, (paint: paint, thickness: a-sw)) + } + } + } + }) + + // When protect is true, extend the box downward to cover arrows + // so subsequent content doesn't overlap. When false (default), + // keep the box text-height only — correct for table cells with + // align: bottom. + if protect and arrows.len() > 0 { + let base-drop = 0.35 + let depth = base-drop + 0.5 + (arrows.len() - 1) * 0.35 + let arrow-depth = (depth + 0.15) * unit + let ref-content = text(size: fsz, "Hgy[") + let ref-height = measure(ref-content).height + box( + width: box-w, + height: ref-height + arrow-depth, + baseline: arrow-depth, + clip: false, + { + hide(ref-content) + place(top + left, canvas-body) + }, + ) + } else { + box(width: box-w, clip: false, { + hide(text(size: fsz, "Hgy[")) + place(top + left, canvas-body) + }) + } + } +} diff --git a/packages/preview/synkit/0.0.41/syntax.typ b/packages/preview/synkit/0.0.41/syntax.typ new file mode 100644 index 0000000000..f9260a1e8b --- /dev/null +++ b/packages/preview/synkit/0.0.41/syntax.typ @@ -0,0 +1,2681 @@ +// Syntax tree module for synkit +// Draws phrase structure trees from bracket notation input. +// Usage: #tree("[CP [C' [C did] [TP [DP she] [T' [T e] [VP [V leave]]]]]]") + +#import "@preview/cetz:0.5.2" +#import "_symbols.typ": apply-symbols as _apply-symbols, symbol-map as _symbol-map + +// ── Constants ──────────────────────────────────────────────────────────────── +#let _leaf-w = 1.0 // horizontal width per leaf +#let _v-gap = 1.2 // vertical gap between levels +#let _loff = 0.25 // label offset for anchor connections + + +// ── Tokenizer ──────────────────────────────────────────────────────────────── +// Splits bracket notation into tokens: "[", "]", and word strings. +#let _tokenize(input) = { + let tokens = () + let buf = "" + let brace-depth = 0 + let literal-bracket-depth = 0 + let chars = input.clusters() + let skip-next = false + for (i, ch) in chars.enumerate() { + if skip-next { + skip-next = false + } else if ch == "\\" and i + 1 < chars.len() and (chars.at(i + 1) == "[" or chars.at(i + 1) == "]") { + // Escaped square brackets are literal label characters, not tree structure. + let next = chars.at(i + 1) + if next == "[" { + literal-bracket-depth = literal-bracket-depth + 1 + } else { + literal-bracket-depth = calc.max(0, literal-bracket-depth - 1) + } + buf = buf + next + skip-next = true + } else if ch == "{" { + brace-depth = brace-depth + 1 + buf = buf + ch + } else if ch == "}" { + brace-depth = calc.max(0, brace-depth - 1) + buf = buf + ch + } else if brace-depth > 0 or literal-bracket-depth > 0 { + // Inside braces or escaped literal brackets: everything is literal. + buf = buf + ch + } else if ch == "[" or ch == "]" { + if buf.trim() != "" { tokens.push(buf.trim()) } + buf = "" + tokens.push(ch) + } else if ch == " " or ch == "\t" or ch == "\n" { + if buf.trim() != "" { tokens.push(buf.trim()) } + buf = "" + } else { + buf = buf + ch + } + } + if buf.trim() != "" { tokens.push(buf.trim()) } + tokens +} + +// ── Strip formatting markers for anchor naming ────────────────────────────── +// Removes *, **, _subscript, and ^superscript from a label to get the bare name. +#let _strip-fmt(label) = { + let s = label + // Remove escapes for literal formatting characters before stripping markers. + // This keeps anchors usable for labels like \muP\* -> muP, not muP\. + s = s + .replace("\\*", "") + .replace("\\@", "") + .replace("\\&", "") + .replace("\\~", "") + .replace("\\[", "") + .replace("\\]", "") + // Strip subscript: first _ and everything after (e.g., CP_i → CP) + if s.contains("_") { + let idx = s.position("_") + s = s.slice(0, idx) + } + // Strip superscript: first ^ and everything after (e.g., NP^max → NP) + if s.contains("^") { + let idx = s.position("^") + s = s.slice(0, idx) + } + // Strip literal feature suffixes after the base label (e.g., C'{INT,...} → C') + if s.contains("{") { + let idx = s.position("{") + s = s.slice(0, idx) + } + if s.contains("[") { + let idx = s.position("[") + s = s.slice(0, idx) + } + // Strip *, @, &, ~ for bold/italic/smallcaps/underline/strikethrough + s = s.replace("*", "") + s = s.replace("@", "") + s = s.replace("&", "") + s = s.replace("~", "") + // Strip angle brackets and commas (for semantic type labels like → ett) + s = s.replace("<", "") + s = s.replace(">", "") + s = s.replace(",", "") + // Strip symbol shortcuts: \lambda → lambda, \phiP → phiP, etc. + for (key, _val) in _symbol-map { + if s.contains(key) { + s = s.replace(key, key.slice(1)) // \lambda → lambda + } + } + s +} + +// ── Anchor key ─────────────────────────────────────────────────────────────── +// Canonical anchor stem used everywhere labels become automatic anchor names. +#let _anchor-key(label) = { + _strip-fmt(label).replace("'", "bar").replace("\u{2019}", "bar").replace(" ", "-") +} + +// ── Anchor name ────────────────────────────────────────────────────────────── +// Normalizes a label into an anchor name: lowercase, ' → p, spaces → -, append count. +#let _anchor-name(label, count) = { + _anchor-key(label) + str(count) +} + +// ── Parser ─────────────────────────────────────────────────────────────────── +// Recursive descent parser: tokens → tree node. +// Returns (node, next-position, updated-counts). +// Node: (label: str, anchor: str, children: array, is-leaf: bool) +#let _parse(tokens, pos, counts) = { + if tokens.at(pos) == "[" { + // Empty node: [ ] → blank placeholder + if tokens.at(pos + 1) == "]" { + let key = "empty" + let c = counts.at(key, default: 0) + 1 + counts.insert(key, c) + return ( + ( + label: "", + anchor: key + str(c), + children: (), + is-leaf: false, + ), + pos + 2, + counts, + ) + } + // Non-terminal: [LABEL children... ] + let label = tokens.at(pos + 1) + let key = _anchor-key(label) + let c = counts.at(key, default: 0) + 1 + counts.insert(key, c) + let anchor = key + str(c) + let children = () + let p = pos + 2 + while tokens.at(p) != "]" { + if tokens.at(p) == "[" { + let (child, np, nc) = _parse(tokens, p, counts) + children.push(child) + p = np + counts = nc + } else { + // Bare word = leaf child + let leaf-label = tokens.at(p) + let lk = _anchor-key(leaf-label) + let lc = counts.at(lk, default: 0) + 1 + counts.insert(lk, lc) + children.push(( + label: leaf-label, + anchor: lk + str(lc), + children: (), + is-leaf: true, + )) + p = p + 1 + } + } + // Skip closing ] + ( + ( + label: label, + anchor: anchor, + children: children, + is-leaf: false, + ), + p + 1, + counts, + ) + } else { + // Bare word at top level + let label = tokens.at(pos) + let key = _anchor-key(label) + let c = counts.at(key, default: 0) + 1 + counts.insert(key, c) + ( + ( + label: label, + anchor: key + str(c), + children: (), + is-leaf: true, + ), + pos + 1, + counts, + ) + } +} + + +// ── Collect all leaf labels under a node ───────────────────────────────────── +#let _collect-leaves(node) = { + if node.is-leaf or node.children.len() == 0 { return (node.label,) } + let result = () + for child in node.children { + result = result + _collect-leaves(child) + } + result +} + +// ── Find a node by anchor in the parsed tree ───────────────────────────────── +#let _find-node(node, anchor) = { + if node.anchor == anchor { return node } + if node.children.len() == 0 { return none } + for child in node.children { + let found = _find-node(child, anchor) + if found != none { return found } + } + none +} + +// ── Collect all leaf anchors under a node ──────────────────────────────────── +#let _collect-leaf-anchors(node) = { + if node.is-leaf or node.children.len() == 0 { return (node.anchor,) } + let result = () + for child in node.children { + result = result + _collect-leaf-anchors(child) + } + result +} + +// ── Detect trace leaves ───────────────────────────────────────────────────── +// A trace is any leaf whose label starts with *t* (explicit italic marker). +// Plain t/T is only a trace when followed by a subscript: t_i, T_DP, etc. +// Bare t or T without subscript is treated as a regular node (e.g., tense head). +#let _is-trace(label) = { + let s = label + // Explicit italic markers → always a trace + if s.starts-with("*t*") or s.starts-with("*T*") { return true } + // T0, t0, t^x → NOT traces (null heads, etc.) + if s.contains("0") or s.contains("^") { return false } + // Plain t/T: only a trace when followed by _subscript + if not s.contains("_") { return false } + let main = s.slice(0, s.position("_")) + main == "t" or main == "T" +} + +// Walk tree and collect trace info: (trace-number, leaf-anchor, parent-anchor, word-index-in-parent) +#let _find-traces(node, parent-anchor: none) = { + // Match traces as leaves OR as bracketed nodes with no children (e.g., [*t*_DP]) + if node.is-leaf or (node.children.len() == 0 and _is-trace(node.label)) { + if _is-trace(node.label) { + return ((leaf-anchor: node.anchor, parent-anchor: parent-anchor, label: node.label),) + } + return () + } + let result = () + for child in node.children { + result = result + _find-traces(child, parent-anchor: node.anchor) + } + result +} + +// ── Estimate rendered character count (strips formatting markers) ──────────── +// Counts visible characters after stripping *, @, &, _subscript, and ^superscript. +#let _esc-star = "\u{FFFD}" // placeholder for escaped \* +#let _esc-at = "\u{FFFC}" +#let _esc-amp = "\u{FFFB}" +#let _esc-tilde = "\u{FFFA}" +#let _esc-lbrack = "\u{FFF9}" +#let _esc-rbrack = "\u{FFF8}" + +#let _normalize-escapes(s) = { + s + .replace("\\*", _esc-star) + .replace("\\@", _esc-at) + .replace("\\&", _esc-amp) + .replace("\\~", _esc-tilde) + .replace("\\[", _esc-lbrack) + .replace("\\]", _esc-rbrack) +} + +#let _restore-escapes(s) = { + s + .replace(_esc-star, "*") + .replace(_esc-at, "@") + .replace(_esc-amp, "&") + .replace(_esc-tilde, "~") + .replace(_esc-lbrack, "[") + .replace(_esc-rbrack, "]") +} + +#let _find-brace-end(s) = { + let depth = 0 + for (i, ch) in s.clusters().enumerate() { + if ch == "{" { depth = depth + 1 } + if ch == "}" { depth = depth - 1 } + if depth == 0 { + return i + } + } + none +} + +#let _annotation-boundary(ch) = { + ( + ch == " " + or ch == "\t" + or ch == "\n" + or ch == "{" + or ch == "}" + or ch == "[" + or ch == "]" + or ch == "_" + or ch == "^" + ) +} + +#let _is-bracketed-subscript(s) = { + if type(s) != str { return false } + let trimmed = s.trim() + trimmed.starts-with("[") and trimmed.ends-with("]") +} + +#let _parse-label-parts(label) = { + let chars = label.clusters() + let main-chars = () + let rest-chars = () + let in-rest = false + for (i, ch) in chars.enumerate() { + if not in-rest and (ch == "_" or ch == "^" or (i > 0 and (ch == "{" or ch == "["))) { + in-rest = true + rest-chars.push(ch) + } else if in-rest { + rest-chars.push(ch) + } else { + main-chars.push(ch) + } + } + let main = if main-chars.len() == 0 { "" } else { main-chars.join() } + let rest = if rest-chars.len() == 0 { "" } else { rest-chars.join() } + let sub-text = none + let sup-text = none + let sub-braced = false + let sup-braced = false + let tail-text = "" + let rest-arr = rest.clusters() + let cursor = 0 + + while cursor < rest-arr.len() { + let ch = rest-arr.at(cursor) + if ch != "_" and ch != "^" { + tail-text = tail-text + rest-arr.slice(cursor).join() + break + } + + let after = rest-arr.slice(cursor + 1) + let ann = "" + let braced = false + let consumed = 0 + if after.len() > 0 and after.at(0) == "{" { + braced = true + let depth = 0 + let ann-chars = () + let end-found = false + for (j, ach) in after.enumerate() { + if ach == "{" { + depth = depth + 1 + if depth > 1 { ann-chars.push(ach) } + } else if ach == "}" { + depth = depth - 1 + if depth == 0 { + consumed = j + 1 + end-found = true + break + } else { + ann-chars.push(ach) + } + } else if depth >= 1 { + ann-chars.push(ach) + } + } + ann = if ann-chars.len() == 0 { "" } else { ann-chars.join() } + if not end-found { + consumed = after.len() + } + } else { + // LaTeX-style lazy scope: an unbraced _/^ grabs the next character. + // If that character starts a symbol command, keep the whole command. + if after.len() > 0 { + if after.at(0) == "\\" { + let ann-chars = ("\\",) + consumed = 1 + for ach in after.slice(1) { + if ach.match(regex("[A-Za-z]")) != none { + ann-chars.push(ach) + consumed = consumed + 1 + } else { + break + } + } + ann = ann-chars.join() + } else { + ann = after.at(0) + consumed = 1 + } + } + } + + if ch == "_" and sub-text == none { + sub-text = ann + sub-braced = braced + } else if ch == "^" and sup-text == none { + sup-text = ann + sup-braced = braced + } else { + tail-text = tail-text + ch + if braced { "{" + ann + "}" } else { ann } + } + cursor = cursor + 1 + consumed + } + + ( + main: main, + sub-text: sub-text, + sup-text: sup-text, + sub-braced: sub-braced, + sup-braced: sup-braced, + tail-text: tail-text, + ) +} + +#let _rendered-len(s) = { + let parts = _parse-label-parts(_normalize-escapes(_apply-symbols(s))) + let result = parts.main + parts.tail-text + // Strip formatting markers and braces + result = result.replace("*", "").replace("@", "").replace("&", "").replace("~", "").replace("{", "").replace("}", "") + result = _restore-escapes(result) + // Strip sub/superscript markers but keep the content (it contributes to width) + // _text and ^text → text is rendered smaller, count at ~0.7x + let words = result.split(" ") + let total = 0 + for w in words { + total = total + w.clusters().len() + total = total + 1 // space between words + } + let ann = "" + if parts.sup-text != none { ann = ann + parts.sup-text } + if parts.sub-text != none { ann = ann + parts.sub-text } + ann = _restore-escapes(_apply-symbols(ann).replace("*", "").replace("@", "").replace("&", "").replace("~", "")) + total = total + calc.ceil(ann.clusters().len() * 0.7) + calc.max(0, total - 1) // remove trailing space +} + +// ── Leaf count (triangle-aware) ────────────────────────────────────────────── +// If a node is in the triangle set, use at least 2 leaf widths for spacing. +// When \n breaks are present, use the widest line's word count instead of total. +// Wide leaf labels claim proportionally more slots. +#let _leaf-count(node, tri-set, leaf-w: 1.0, content-size: 0.8, annotation-leaf-widths: (:), is-horiz: false) = { + if node.is-leaf or node.children.len() == 0 { + if is-horiz { + return 1 + } + // Check if the label is wider than one slot + let char-w = 0.22 * content-size + let label-w = _rendered-len(node.label) * char-w + let slots = calc.max(1, calc.ceil(label-w / leaf-w)) + return slots + } + if node.anchor in tri-set { + if is-horiz { + let lines = _collect-leaves(node).join(" ").split(" \\n ") + let lines = if lines.len() == 1 { _collect-leaves(node).join(" ").split("\\n") } else { lines } + return calc.max(1, lines.len()) + } + // Use minimal slot count — triangle text overflows visually, + // and rightward collision with siblings is resolved in the layout loop. + return 2 + } + let total = 0 + for child in node.children { + total = total + _leaf-count( + child, + tri-set, + leaf-w: leaf-w, + content-size: content-size, + annotation-leaf-widths: annotation-leaf-widths, + is-horiz: is-horiz, + ) + } + if is-horiz { + return total + } + // Ensure non-leaf node's own label fits within the allocated width. + // Node labels use full-size font (char-w ≈ 0.22), so wide labels like + // ⟨st,⟨st,t⟩⟩ need more slots than their leaf count would suggest. + // Uses exact (non-ceiled) width to avoid over-spacing. + let char-w = 0.22 + let label-w = _rendered-len(node.label) * char-w + let needed = label-w / leaf-w + let annotation-needed = annotation-leaf-widths.at(node.anchor, default: 0) + calc.max(total, needed, annotation-needed) +} + +// ── Layout ─────────────────────────────────────────────────────────────────── +// Recursive layout: positions each node based on leaf-proportional spacing. +// Triangle nodes are collapsed to a single leaf with combined label. +// Returns flat list of (label, anchor, x, y, parent-xy, is-leaf, is-triangle). +#let _syntax-layout( + node, + x0, + y, + parent-xy, + parent-anchor, + leaf-w, + v-gap, + tri-set, + is-horiz: false, + append-map: (:), + content-size: 0.8, + level: 0, + drop-map: (:), + node-spacing-map: (:), + sister-spacing-map: (:), + sister-node-map: (:), + annotation-map: (:), + annotation-leaf-widths: (:), + annotation-gaps: (:), +) = { + if node.is-leaf or node.children.len() == 0 { + let x = x0 + leaf-w / 2 + return ( + ( + label: node.label, + anchor: node.anchor, + x: x, + y: y, + par: parent-xy, + par-anchor: parent-anchor, + is-leaf: true, + is-terminal: node.is-leaf, // true only for bare words, not empty bracket nodes + is-triangle: false, + ), + ) + } + + // Triangle node: collapse entire subtree into parent + single combined leaf + if node.anchor in tri-set { + let lc = _leaf-count( + node, + tri-set, + leaf-w: leaf-w, + content-size: content-size, + annotation-leaf-widths: annotation-leaf-widths, + is-horiz: is-horiz, + ) + let my-x = x0 + lc * leaf-w / 2 + let leaves = _collect-leaves(node) + let combined-label = leaves.join(" ") + let tri-leaves = leaves // individual labels for _display-label rendering + return ( + ( + label: node.label, + anchor: node.anchor, + x: my-x, + y: y, + par: parent-xy, + par-anchor: parent-anchor, + is-leaf: false, + is-triangle: true, + tri-label: combined-label, + tri-leaves: tri-leaves, + tri-y: y - v-gap - annotation-gaps.at(node.anchor, default: 0), + tri-span: lc * leaf-w, // allocated vertical span for horizontal triangles + ), + ) + } + + // Non-terminal: lay out children, then center self + let result = () + let cursor = x0 + let child-positions = () + + // Reserve extra annotation width outside the subtree, not between children. + // This keeps siblings as tight as their own labels allow while still giving + // the parent annotation enough room at the next level up. + let natural-w = node + .children + .map(c => _leaf-count( + c, + tri-set, + leaf-w: leaf-w, + content-size: content-size, + annotation-leaf-widths: annotation-leaf-widths, + is-horiz: is-horiz, + ) * leaf-w) + .sum(default: 0) + let reserved-w = if is-horiz { + natural-w + } else { + calc.max(natural-w, annotation-leaf-widths.at(node.anchor, default: 0) * leaf-w) + } + let cursor = x0 + calc.max(0, (reserved-w - natural-w) / 2) + + for (i, child) in node.children.enumerate() { + let child-leaves = _leaf-count( + child, + tri-set, + leaf-w: leaf-w, + content-size: content-size, + annotation-leaf-widths: annotation-leaf-widths, + is-horiz: is-horiz, + ) + // Per-gap horizontal multiplier: node-specific > level > default. + // A node-specific entry scales the gap after that child, i.e. between + // this child and its next sister. + let h-mult = if child.anchor in sister-node-map { + sister-node-map.at(child.anchor) + } else if str(level + 1) in sister-spacing-map { + sister-spacing-map.at(str(level + 1)) + } else { 1.0 } + let child-width = child-leaves * leaf-w + // Pre-check: if this child is a single leaf, check if its label overflows + // leftward into the previous sibling's space. If so, push cursor right. + let _overflow-pad = 0.2 * calc.min(child-width, 1.0) // scale padding with effective slot width + if child.is-leaf and not is-horiz { + let char-w = 0.22 * content-size + let label-chars = _rendered-len(child.label) + let text-half-w = calc.max(label-chars * char-w / 2, 0.3 * calc.min(child-width, 1.0)) + let slot-half-w = child-width / 2 + let left-overflow = text-half-w - slot-half-w + if left-overflow > 0 { + cursor = cursor + left-overflow + _overflow-pad + } + } + // Pre-check: if this child is a triangle, check if its text would overflow + // leftward into the previous sibling's space. If so, push cursor right first. + if child.anchor in tri-set and not is-horiz { + let leaves = _collect-leaves(child) + let joined = leaves.join(" ") + let lines = joined.split(" \\n ") + let lines = if lines.len() == 1 { joined.split("\\n") } else { lines } + let char-w = 0.22 * content-size + let widest-chars = lines.fold(0, (acc, l) => { + calc.max(acc, _rendered-len(l.trim())) + }) + let text-half-w = calc.max(widest-chars * char-w / 2, 0.3 * calc.min(child-width, 1.0)) + let slot-half-w = child-width / 2 + let left-overflow = text-half-w - slot-half-w + if left-overflow > 0 { + cursor = cursor + left-overflow + _overflow-pad + } + } + // Per-child vertical gap: node-specific override > level override > default + let child-gap = ( + v-gap + * if child.anchor in node-spacing-map { + node-spacing-map.at(child.anchor) + } else if str(level + 1) in drop-map { + drop-map.at(str(level + 1)) + } else { 1.0 } + ) + // Extra gap when *this* node (the parent) has an annotation + if node.anchor in annotation-gaps { + child-gap = child-gap + annotation-gaps.at(node.anchor) + } + let child-nodes = _syntax-layout( + child, + cursor, + y - child-gap, + none, + none, + leaf-w, + v-gap, + tri-set, + is-horiz: is-horiz, + append-map: append-map, + content-size: content-size, + level: level + 1, + drop-map: drop-map, + node-spacing-map: node-spacing-map, + sister-spacing-map: sister-spacing-map, + sister-node-map: sister-node-map, + annotation-map: annotation-map, + annotation-leaf-widths: annotation-leaf-widths, + annotation-gaps: annotation-gaps, + ) + result = result + child-nodes + let child-pos = if child.is-leaf or child.anchor in tri-set { + child-nodes.at(0) + } else { + child-nodes.at(-1) + } + child-positions.push(child-pos) + cursor = cursor + child-width + // If this child is a triangle in a vertical tree, check if rendered text + // overflows its slot width. Push cursor so the next sibling doesn't overlap. + // In horizontal trees, triangle text extends outward, not into sibling space. + if child.anchor in tri-set and not is-horiz { + let leaves = _collect-leaves(child) + let joined = leaves.join(" ") + let lines = joined.split(" \\n ") + let lines = if lines.len() == 1 { joined.split("\\n") } else { lines } + let char-w = 0.22 * content-size + let widest-chars = lines.fold(0, (acc, l) => { + calc.max(acc, _rendered-len(l.trim())) + }) + let text-half-w = calc.max(widest-chars * char-w / 2, 0.3 * calc.min(child-width, 1.0)) + let slot-half-w = child-width / 2 + let overflow = text-half-w - slot-half-w + if overflow > 0 { + cursor = cursor + overflow + _overflow-pad + } + } + // Post-check: scan the child's entire subtree for rightward overflow. + // Any node whose label extends past cursor pushes cursor further right, + // preventing cross-depth overlaps with the next sibling's subtree. + if not is-horiz and child-nodes.len() > 0 { + let _post-pad = 0.15 * calc.min(child-width, 1.0) + for cn in child-nodes { + let cw = if cn.is-leaf or cn.at("is-terminal", default: false) { + 0.22 * content-size + } else { 0.22 } + let hw = _rendered-len(cn.label) * cw / 2 + let right-edge = cn.x + hw + if right-edge > cursor { + cursor = right-edge + _post-pad + } + } + } + // Post-check: if this child is a single leaf, check if its label overflows + // rightward into the next sibling's space. Push cursor if so. + if child.is-leaf and not is-horiz { + let char-w = 0.22 * content-size + let label-chars = _rendered-len(child.label) + let text-half-w = calc.max(label-chars * char-w / 2, 0.3 * calc.min(child-width, 1.0)) + let slot-half-w = child-width / 2 + let overflow = text-half-w - slot-half-w + if overflow > 0 { + cursor = cursor + overflow + _overflow-pad + } + } + // If this child has an append annotation, push cursor to make room + if child.anchor in append-map { + let app-text = append-map.at(child.anchor) + // Strip formatting markers for width estimation + let stripped = app-text.replace("@", "").replace("*", "").replace("&", "").replace("~", "") + let app-char-w = 0.15 // subscript chars are smaller + let app-width = stripped.clusters().len() * app-char-w + cursor = cursor + app-width + } + + // Apply local spread to the actual gap between adjacent sisters. + // Default center-to-center distance is (left-slot + right-slot) / 2. + // Multiplying that quantity makes spread-local behave like drop-local: + // 0.5 halves the local spread, 1.5 increases it by 50%. + if i < node.children.len() - 1 { + let next-child = node.children.at(i + 1) + let next-leaves = _leaf-count( + next-child, + tri-set, + leaf-w: leaf-w, + content-size: content-size, + annotation-leaf-widths: annotation-leaf-widths, + is-horiz: is-horiz, + ) + let next-width = next-leaves * leaf-w + let pair-mult = calc.max(h-mult, 0.0) + let extra-gap = (pair-mult - 1.0) * (child-width + next-width) / 2 + cursor = cursor + extra-gap + } + } + + // Center this node over its children's span + let first-child-x = child-positions.at(0).x + let last-child-x = child-positions.at(-1).x + let my-x = (first-child-x + last-child-x) / 2 + + // Update children's parent pointers + let updated-result = () + for entry in result { + let is-direct-child = node.children.any(c => c.anchor == entry.anchor) + if is-direct-child { + updated-result.push((..entry, par: (my-x, y), par-anchor: node.anchor)) + } else { + updated-result.push(entry) + } + } + + // Add this node + updated-result.push(( + label: node.label, + anchor: node.anchor, + x: my-x, + y: y, + par: parent-xy, + par-anchor: parent-anchor, + is-leaf: false, + is-triangle: false, + )) + + updated-result +} + +// ── Display label ──────────────────────────────────────────────────────────── +// Renders a node label as content. Handles: +// ' → prime symbol (′) +// **text** → bold +// *text* → italic +// label_x → subscript x +// label^x → superscript x +// label^x_y → both superscript and subscript +#let _display-label(label) = { + // ── Angle bracket protector: → ⟨et,t⟩ ── + let label = _normalize-escapes(label.replace("<", "⟨").replace(">", "⟩")) + // ── Auto-italic traces: t_X or T_X → *t*_X or *T*_X ── + // Only when there is a subscript (bare t/T without subscript is a regular node) + let label = { + let label-parts = _parse-label-parts(label) + let main = label-parts.main + let bare = main.replace("*", "").replace("@", "").replace("&", "").replace("~", "") + if not bare.contains("0") and (bare == "t" or bare == "T") and label-parts.sub-text != none { + "*" + main + "*" + if label.len() > main.len() { label.slice(main.len()) } else { "" } + } else { label } + } + let parts = _parse-label-parts(label) + let main = parts.main + let sub-text = parts.sub-text + let sup-text = parts.sup-text + let tail-text = parts.tail-text + // Helper: italicize Greek Unicode characters within a string + let _greek-set = "αβγδεζηθικλμνξπρστυφχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΠΡΣΤΥΦΧΨΩ" + let _italicize-greek(s) = { + if type(s) != str { return s } + let chars = s.clusters() + if not chars.any(c => _greek-set.contains(c)) { return s } + let out = [] + let buf = "" + for c in chars { + if _greek-set.contains(c) { + if buf != "" { out = out + [#buf]; buf = "" } + out = out + emph(c) + } else { + buf = buf + c + } + } + if buf != "" { out = out + [#buf] } + out + } + let _display-chars(s) = { + let display = _restore-escapes(_apply-symbols(s)) + let display = if display.contains("'") or display.contains("'") { + let parts = display.split("'") + let parts = if parts.len() == 1 { display.split("'") } else { parts } + parts.at(0) + "′" + parts.slice(1).join("′") + } else { display } + let chars = display.clusters() + let parts = () + let buf = "" + for (i, ch) in chars.enumerate() { + if ch == "0" and i > 0 and chars.at(i - 1).match(regex("\d")) == none { + if buf != "" { parts.push((text: buf)) } + buf = "" + parts.push((zero: true)) + } else { + buf = buf + ch + } + } + if buf != "" { parts.push((text: buf)) } + if parts.any(p => p.keys().contains("zero")) { + // Has auto-superscript zeros: build mixed content + let out = [] + for p in parts { + if p.keys().contains("zero") { + out = out + [#super[0]] + } else { + out = out + _italicize-greek(p.text) + } + } + out + } else { + display // plain string, no zeros to superscript + } + } + let _plain-content(s) = { + let content = _display-chars(s) + if type(content) == str { + _italicize-greek(content) + } else { + content + } + } + let _inline-content(s) = { + let pieces = () + let active = none + let active-buf = "" + let buf = "" + let chars = s.clusters() + let i = 0 + while i < chars.len() { + let ch = chars.at(i) + let token = if ch == "*" and i + 1 < chars.len() and chars.at(i + 1) == "*" { + "**" + } else if ch == "*" or ch == "@" or ch == "&" or ch == "~" { + ch + } else { none } + if token != none { + if active == none { + if buf != "" { pieces.push((text: buf, style: none)) } + buf = "" + active = token + } else if active == token { + pieces.push((text: active-buf, style: token)) + active = none + active-buf = "" + } else { + active-buf = active-buf + token + } + i = i + token.len() + } else { + if active == none { + buf = buf + ch + } else { + active-buf = active-buf + ch + } + i = i + 1 + } + } + if active != none { + buf = buf + active + active-buf + } + if buf != "" { pieces.push((text: buf, style: none)) } + let out = [] + for piece in pieces { + let body = _plain-content(piece.text) + if piece.style == "**" { + out = out + [*#body*] + } else if piece.style == "*" { + out = out + emph(body) + } else if piece.style == "@" { + out = out + smallcaps(body) + } else if piece.style == "&" { + out = out + underline(body) + } else if piece.style == "~" { + out = out + strike(body) + } else { + out = out + body + } + } + out + } + let _sub-content(s) = if _is-bracketed-subscript(s) { + _inline-content(s) + } else { + emph(_inline-content(s)) + } + let body = _inline-content(main) + let result = if sup-text != none and sup-text != "" and sub-text != none and sub-text != "" { + let sup-display = _inline-content(sup-text) + let sub-display = _sub-content(sub-text) + let sup-r = [#super[#sup-display]] + let sub-r = [#sub[#sub-display]] + [#body#sup-r#sub-r] + } else if sup-text != none and sup-text != "" { + let sup-display = _inline-content(sup-text) + [#body#super[#sup-display]] + } else if sub-text != none and sub-text != "" { + let sub-display = _sub-content(sub-text) + [#body#sub[#sub-display]] + } else { body } + // Append tail text (e.g., +T+mangez after _{[+Q]}) + let final = if tail-text != "" { + [#result#_inline-content(tail-text)] + } else { result } + final +} + +// ── Inline formatter for append text ──────────────────────────────────────── +// Processes @...@ segments as smallcaps, &...& as underline, *...* as italic, +// **...** as bold. Everything else is plain text. +#let _format-inline(s) = { + let parts = s.split("@") + let result = () + for (i, part) in parts.enumerate() { + if calc.rem(i, 2) == 1 { + // Odd segments: smallcaps + result.push(smallcaps(part)) + } else if part != "" { + result.push(part) + } + } + result.join() +} + +// ── Estimate label half-width in canvas units ─────────────────────────────── +// Used for horizontal trees where branch offsets must clear the label width. +#let _label-half-w(label) = { + let stripped = _strip-fmt(label) + let char-w = 0.28 // approximate character width in canvas units + _apply-symbols(stripped).clusters().len() * char-w / 2 + 0.05 +} + +// ── Delink mark ───────────────────────────────────────────────────────────── +// Draws two perpendicular bars at a given point along a given tangent direction. +// (mx, my): midpoint on the path; (tang-x, tang-y): tangent direction (will be normalized). +#let _draw-delink(mx, my, tang-x, tang-y, sw) = { + let len = calc.sqrt(tang-x * tang-x + tang-y * tang-y) + if len == 0 { return } + let dir-x = tang-x / len + let dir-y = tang-y / len + let perp-x = -dir-y + let perp-y = dir-x + let bar = 0.15 + let gap = 0.03 + for sign in (-1, 1) { + let cx = mx + sign * gap * dir-x + let cy = my + sign * gap * dir-y + cetz.draw.line( + (cx - bar * perp-x, cy - bar * perp-y), + (cx + bar * perp-x, cy + bar * perp-y), + stroke: sw, + ) + } +} + + +// ── Main function ──────────────────────────────────────────────────────────── +/// Draw a syntax tree from bracket notation +/// +/// Parses a bracket-notation string and renders a phrase structure tree. +/// Each node receives an automatic anchor name (lowercased label + counter, +/// e.g. `"cp1"`, `"tp2"`) that can be used for cross-node arrows. +/// +/// Arguments: +/// - input (string): Bracket notation, e.g. `"[CP [C' [C did] [TP ...]]]"` +/// - arrows (array): Cross-node arrows. Each entry is either `(from, to)` or a +/// dict with keys: `from`, `to`, `color`, `bend` (arc depth, auto if omitted), +/// `shift` (horizontal bias of arc apex, default `0`), `dash` (`"dashed"`, +/// `"solid"`, `"dotted"`, etc.). Arrow names use the automatic anchors +/// and always target leaf content (the "down" position). (default: `()`) +/// - scale (number): Uniform scale factor (default: `1.0`) +/// - drop (number): Multiplier for vertical distance between levels +/// (default: `1.0`). A value of `1.2` increases branch length by 20%. +/// - spread (number): Horizontal width per leaf in canvas units (default: `1.0`) +/// - triangle (array): Anchor names whose branch should render as a triangle +/// for elided structure, e.g. `("dp1",)` (default: `()`) +/// - curved (bool): Draw arrows as Bézier curves (default: `false`) +/// - direction (string): Growth direction of the tree: `"down"` (default), +/// `"up"`, `"right"`, or `"left"`. +/// - highlight (array): Anchor names to draw a box around (like `\fbox` in LaTeX). +/// Bare names default to the node label; use `"dp1down"` to box the leaf content +/// instead. (default: `()`) +/// - bottom (bool): Align all terminal words at the bottom of the tree. When `true`, +/// leaves are pushed to the lowest level regardless of depth. (default: `false`) +/// - dash-branches (array): Array of `(parent, child)` anchor pairs whose branch +/// line should be dashed instead of solid, e.g. `dash-branches: (("np1", "det1"),)`. +/// (default: `()`) +/// - delinks (array): Anchor names matching arrow `from` fields. The delink mark +/// (two perpendicular bars) is drawn on the matching arrow's shaft, e.g. +/// `delinks: ("dp3",)`. Only interpreted when a matching arrow exists. (default: `()`) +/// - index (array): Coreference subscripts. Array of single-key dicts mapping anchor +/// names to index strings, e.g. `(("cp1": "i"), ("np2": "j"))`. Rendered as +/// subscripts after the node label. (default: `()`) +/// - drop-local (array): Per-level or per-node branch length multipliers. +/// Each entry is a tuple where the first element is a level number (int) or +/// anchor name (string): +/// - `(1, 1.5)` — all level-1 branches are 50% longer +/// - `("ip2", 0.5)` — only the branch arriving at `ip2` is 50% shorter +/// Node-specific entries override level entries. (default: `()`) +/// - spread-local (array): Per-level or per-node horizontal spacing multipliers +/// between sister nodes. Same format as `drop-local`: +/// - `(1, 1.5)` — level-1 sisters are 50% wider apart +/// - `("ip2", 0.5)` — the gap after `ip2` is 50% narrower +/// (default: `()`) +/// - dominance (array): Long-distance dominance lines (no arrowheads). Each entry +/// is a tuple `("from-anchor", "to-anchor")` or a dict with optional `ctrl`: +/// `(from: "np4", to: "np1", ctrl: (-1.0, -0.5))`. Lines depart south and +/// arrive north, matching branch connection points. (default: `()`) +/// - color (array): Colorize nodes, leaf content, or branches. Each entry is a tuple: +/// - `("np1", red)` — color the node label text of `np1` +/// - `("np1down", blue)` — color the leaf/content text under `np1` +/// - `("vp1", "v1", yellow)` — color the branch from `vp1` to `v1` +/// (default: `()`) +/// - annotation (array): Semantic annotations displayed between a node label and +/// its branches. Each entry is `("anchor", content)` where content is Typst +/// content (use `$...$` for math/logic). Example: +/// `annotation: (("dp1", $lambda Q forall x$),)` (default: `()`) +/// - annotation-size (float): Size multiplier for annotation text relative to base +/// font size. The vertical gap between node and branches adjusts automatically. +/// (default: `0.70`) +/// - annotation-leading (length or auto): Line spacing for multi-line annotations. +/// Use smaller values like `0.3em` to tighten line spacing. +/// (default: `auto`, which uses `0.45em`) +/// - show-refs (bool): Show generated node references near labels for debugging. +/// Triangle nodes also show their `-down` content reference. (default: `false`) +/// +/// Returns: CeTZ drawing of the syntax tree +/// +/// Example: +/// ``` +/// #tree("[CP [C' [C did] [TP [DP she] [T' [T e] [VP [V leave]]]]]]") +/// ``` +#let tree( + input, + arrows: (), + scale: 1.0, + spread: 1.0, + triangle: (), + content-size: 0.8, + node-size: 1.0, + curved: false, + direction: "down", + highlight: (), + bottom: false, + terminal-branch: false, + dash-branches: (), + delinks: (), + index: (), + append: (), + drop: 1.0, + drop-local: (), + spread-local: (), + dominance: (), + color: (), + annotation: (), + annotation-size: 0.70, + annotation-leading: auto, + line-width: 1.0, + font: none, + numbers: (), + numbers-size: 0.85, + show-refs: false, +) = { + let scale-factor = scale + let is-horiz = direction == "right" or direction == "left" + let leaf-w = spread + let v-gap = if is-horiz { 1.2 * drop * 1.05 } else { 1.2 * drop } + + // ── Build drop-local lookup maps ───────────────────── + let _drop-map = (:) // str(level) → multiplier + let _node-spacing-map = (:) // anchor → multiplier + // Normalize: single entry → array + let ls-entries = if drop-local == () { + () + } else if type(drop-local.at(0, default: none)) != array { + (drop-local,) + } else { + drop-local + } + for entry in ls-entries { + let key = entry.at(0) + let mult = entry.at(1) + if type(key) == int { + _drop-map.insert(str(key), mult) + } else if type(key) == str { + _node-spacing-map.insert(key, mult) + } + } + + // ── Build spread-local lookup maps ────────────────────────────── + let _sister-spacing-map = (:) // str(level) → multiplier + let _sister-node-map = (:) // anchor → multiplier + let ss-entries = if spread-local == () { + () + } else if type(spread-local.at(0, default: none)) != array { + (spread-local,) + } else { + spread-local + } + for entry in ss-entries { + let key = entry.at(0) + let mult = entry.at(1) + if type(key) == int { + _sister-spacing-map.insert(str(key), mult) + } else if type(key) == str { + _sister-node-map.insert(key, mult) + } + } + + // ── Build color lookup maps ─────────────────────────────────── + // Normalize: single tuple → array of tuples + let color-entries = if color == () { + () + } else if type(color.at(0, default: none)) != array { + // Single entry like (\"np1\", red) — wrap it + (color,) + } else { + color + } + // node-color-map: anchor → color (for node labels) + // down-color-map: anchor → color (for leaf content, keyed without "down" suffix) + // branch-color-map: "parent|child" → color (for branches) + let node-color-map = (:) + let down-color-map = (:) + let branch-color-map = (:) + for entry in color-entries { + if entry.len() == 3 { + // Branch color: (parent-anchor, child-anchor, color) + let key = entry.at(0) + "|" + entry.at(1) + branch-color-map.insert(key, entry.at(2)) + } else if entry.len() == 2 { + let name = entry.at(0) + let c = entry.at(1) + if type(name) == str and name.ends-with("-down") { + let base = name.slice(0, name.len() - 5) + down-color-map.insert(base, c) + } else { + node-color-map.insert(name, c) + } + } + } + // Bottom-aligned leaves require terminal branches; otherwise looks weird + let terminal-branch = if bottom { true } else { terminal-branch } + + // Parse + let tokens = _tokenize(input) + let (tree, _, _) = _parse(tokens, 0, (:)) + + // Build triangle set from anchor names + let tri-set = triangle + + // Auto-triangle: phrase nodes (label len > 1, ends in P) with only leaf children + let _auto-tri(node) = { + let result = () + if not node.is-leaf and node.children.len() > 0 { + let stripped = _strip-fmt(node.label) + let is-phrase = (stripped.len() > 1 and lower(stripped).ends-with("p")) or node.label.ends-with(">") + let all-leaves = node.children.all(c => c.is-leaf) + + if is-phrase and all-leaves { + result.push(node.anchor) + } + + for child in node.children { + result = result + _auto-tri(child) + } + } + result + } + let tri-set = tri-set + _auto-tri(tree) + + // Build append map: anchor → formatted subscript text + let append-map = (:) + for entry in append { + let (anchor, text-str) = entry + append-map.insert(anchor, text-str) + } + + // Build annotation map: anchor → Typst content + let annotation-map = (:) + for entry in annotation { + let (anchor, annotation-content) = entry + annotation-map.insert(anchor, annotation-content) + } + let annotation-gap = calc.max(annotation-size * (0.45 / 0.70), 0.25) + + let _body = context { + let em-in-cu = text.size / (scale-factor * 1cm) + let fsz = 12 * scale-factor * 1pt + + // Measure annotation widths and heights; compute per-anchor gaps + let annotation-leaf-widths = (:) + let annotation-gaps = (:) + // Resolve annotation leading + let annotation-leading-val = if annotation-leading == auto { 0.45em } else { annotation-leading } + for (anchor, annotation-content) in annotation-map { + let annotation-body = { + set text(size: fsz * annotation-size) + set par(leading: annotation-leading-val) + annotation-content + } + let measured = measure(annotation-body) + // Convert measured width to leaf-width units (each leaf = leaf-w * scale-factor * 1cm) + let width-in-units = measured.width / (leaf-w * scale-factor * 1cm) + annotation-leaf-widths.insert(anchor, width-in-units) + // Convert measured height to canvas units for vertical gap + let height-in-units = measured.height / (scale-factor * 1cm) + let gap = calc.max(height-in-units + 0.30, annotation-gap) + annotation-gaps.insert(anchor, gap) + } + + // Layout (triangle-aware) + let nodes = _syntax-layout( + tree, + 0.0, + 0.0, + none, + none, + leaf-w, + v-gap, + tri-set, + is-horiz: is-horiz, + append-map: append-map, + content-size: content-size, + level: 0, + drop-map: _drop-map, + node-spacing-map: _node-spacing-map, + sister-spacing-map: _sister-spacing-map, + sister-node-map: _sister-node-map, + annotation-map: annotation-map, + annotation-leaf-widths: annotation-leaf-widths, + annotation-gaps: annotation-gaps, + ) + + // Bottom-align: push all leaves and triangle text to the lowest y in the tree + if bottom { + let min-y = nodes.fold(0.0, (acc, e) => { + if e.is-leaf { calc.min(acc, e.y) } else { acc } + }) + // Also consider triangle leaf positions + let min-y = nodes.fold(min-y, (acc, e) => { + if e.at("is-triangle", default: false) { calc.min(acc, e.at("tri-y")) } else { acc } + }) + nodes = nodes.map(e => { + if e.is-leaf { (..e, y: min-y) } else if e.at("is-triangle", default: false) { + (..e, tri-y: min-y, bottom-aligned: true) + } else { e } + }) + } + + // Reduce terminal-to-parent gap when no branch line is drawn + // (skip when bottom-aligned, since bottom alignment should take precedence) + if not terminal-branch and not bottom { + nodes = nodes.map(e => { + if e.at("is-terminal", default: false) and e.par != none { + // Horizontal trees need more gap (labels extend from position) + let pull = if is-horiz { 0.2 } else { 0.5 } + let mid-y = e.y + (e.par.at(1) - e.y) * pull + (..e, y: mid-y) + } else { e } + }) + } + + // Align terminal leaves with sibling triangles when terminal branches are drawn + if terminal-branch and not bottom { + // Build parent → min child y map (considering tri-y for triangles) + let parent-min-y = (:) + for e in nodes { + if e.par != none { + let pk = e.at("par-anchor", default: "") + if pk != "" { + let cy = if e.at("is-triangle", default: false) { e.at("tri-y") } else if e.is-leaf { e.y } else { none } + if cy != none { + let cur = parent-min-y.at(pk, default: cy) + parent-min-y.insert(pk, calc.min(cur, cy)) + } + } + } + } + // Push terminal leaves to their parent's min child y + nodes = nodes.map(e => { + if e.at("is-terminal", default: false) and e.par != none { + let pk = e.at("par-anchor", default: "") + if pk != "" and pk in parent-min-y { + let target-y = parent-min-y.at(pk) + if target-y < e.y { + (..e, y: target-y, is-terminal-aligned: true) + } else { e } + } else { e } + } else { e } + }) + } + + // Direction transform: map layout coords (always computed as "down") to final coords + let _tx(x, y) = { + if direction == "up" { (x, -y) } else if direction == "right" { (-y, -x) } else if direction == "left" { + (y, -x) + } else { (x, y) } + } + // Growth direction vector (from parent toward child in final coords) + let (gdx, gdy) = if direction == "up" { (0, 1) } else if direction == "right" { (1, 0) } else if ( + direction == "left" + ) { + (-1, 0) + } else { (0, -1) } + + // Build per-node outgoing offset (from center to where branch departs) + // and incoming offset (from center to where branch arrives). + // Vertical: symmetric, fixed _loff. + // Horizontal: labels are aligned (left for "right", right for "left"), + // so outgoing = full label width, incoming = small gap. + let node-out = (:) // offset for branches leaving this node + let node-in = (:) // offset for branches arriving at this node + for e in nodes { + if is-horiz { + let full-w = _label-half-w(e.label) * 2 + let is-tri = e.at("is-triangle", default: false) + node-out.insert(e.anchor, if is-tri { full-w + 0.25 } else { full-w }) + node-in.insert(e.anchor, 0.05) + } else { + node-out.insert(e.anchor, _loff) + node-in.insert(e.anchor, _loff) + } + } + + // Increase node-out for nodes with annotations to push branches below the annotation + for (anchor, _) in annotation-map { + let current = node-out.at(anchor, default: _loff) + node-out.insert(anchor, current + annotation-gaps.at(anchor, default: annotation-gap)) + } + + // Transform all node coordinates + nodes = nodes.map(e => { + let (nx, ny) = _tx(e.x, e.y) + let new-par = if e.par != none { + let (px, py) = _tx(e.par.at(0), e.par.at(1)) + (px, py) + } else { none } + let result = (..e, x: nx, y: ny, par: new-par) + if e.at("is-triangle", default: false) { + let (_, ty-raw) = _tx(e.x, e.at("tri-y")) + // For horizontal directions, tri position needs both coords + let (tri-nx, tri-ny) = _tx(e.x, e.at("tri-y")) + (..result, tri-y: tri-ny, tri-x: tri-nx) + } else { result } + }) + + // Build name-to-pos dict (outside canvas, following geom.typ pattern) + // Also build arrow-off-map: per-anchor arrow clearance (distance from reference to below text) + let _text-half-h = 0.2 + let _arrow-gap = 0.25 + let name-to-pos = (:) + let arrow-off-map = (:) + let label-hw-map = (:) // per-anchor label half-width (horizontal semi-axis for degree arrows) + let regular-off = _text-half-h + _arrow-gap // 0.45: from text center to below text + gap + for e in nodes { + name-to-pos.insert(e.anchor, (e.x, e.y, _loff)) + arrow-off-map.insert(e.anchor, regular-off) + label-hw-map.insert(e.anchor, _rendered-len(e.label) * 0.28 / 2 + 0.05) + } + + // Add "down" positions: point to leaf content below each non-leaf node. + // Walk the parsed tree to find leaf descendants for each node. + let _build-down(node, ntp, aom, lhw) = { + if node.is-leaf or node.children.len() == 0 { + // Leaf: "-down" is same as the node + ntp.insert(node.anchor + "-down", ntp.at(node.anchor)) + aom.insert(node.anchor + "-down", regular-off) + lhw.insert(node.anchor + "-down", _rendered-len(node.label) * 0.28 / 2 + 0.05) + return (ntp, aom, lhw) + } + // Triangle node: "-down" = the combined label position (tri-y) + let tri-entry = nodes.filter(e => e.anchor == node.anchor and e.at("is-triangle", default: false)) + if tri-entry.len() > 0 { + let te = tri-entry.at(0) + ntp.insert(node.anchor + "-down", (te.x, te.at("tri-y"), _loff)) + // Triangle text: top is at tri-y + gdy*tri-text-gap, so offset = tri-text-gap + text-height + gap + let tri-off = 0.05 + _text-half-h * 2 + _arrow-gap + aom.insert(node.anchor + "-down", tri-off) + // Triangle text width: use the widest line of the combined label + let tri-label = te.at("tri-label") + let tri-lines = tri-label.split(" \\n ") + let tri-lines = if tri-lines.len() == 1 { tri-label.split("\\n") } else { tri-lines } + let widest = tri-lines.fold(0, (acc, l) => calc.max(acc, _rendered-len(l.trim()))) + let char-w = 0.22 * content-size + let tri-hw = calc.max(widest * char-w / 2, 0.3) + lhw.insert(node.anchor + "-down", tri-hw) + return (ntp, aom, lhw) + } + // Non-triangle non-leaf: find leaf descendants, average their positions + let leaf-anchors = _collect-leaf-anchors(node) + let found = leaf-anchors.filter(a => a in ntp) + if found.len() > 0 { + let avg-x = found.map(a => ntp.at(a).at(0)).fold(0.0, (a, b) => a + b) / found.len() + let ys = found.map(a => ntp.at(a).at(1)) + let leaf-y = if gdy < 0 { calc.min(..ys) } else { calc.max(..ys) } + ntp.insert(node.anchor + "-down", (avg-x, leaf-y, _loff)) + aom.insert(node.anchor + "-down", regular-off) + // Span of leaf descendants as half-width + let xs = found.map(a => ntp.at(a).at(0)) + let span-hw = if xs.len() > 1 { + (calc.max(..xs) - calc.min(..xs)) / 2 + 0.3 + } else { + ( + _rendered-len(nodes.filter(e => e.anchor == found.at(0)).at(0, default: (label: "XX")).label) * 0.28 / 2 + + 0.05 + ) + } + lhw.insert(node.anchor + "-down", span-hw) + } + // Recurse into children + for child in node.children { + (ntp, aom, lhw) = _build-down(child, ntp, aom, lhw) + } + (ntp, aom, lhw) + } + (name-to-pos, arrow-off-map, label-hw-map) = _build-down(tree, name-to-pos, arrow-off-map, label-hw-map) + + // Build trace anchors: trace1, trace2, etc. + let trace-infos = _find-traces(tree) + let trace-count = 0 + for ti in trace-infos { + trace-count = trace-count + 1 + let trace-anchor = "trace" + str(trace-count) + // Check if this trace is inside a triangle + let parent-is-tri = ti.parent-anchor in tri-set + if parent-is-tri { + // Find the triangle entry to get its position + let tri-entries = nodes.filter(e => e.anchor == ti.parent-anchor and e.at("is-triangle", default: false)) + if tri-entries.len() > 0 { + let te = tri-entries.at(0) + let tri-leaves = te.at("tri-leaves") + // Find the trace's word index in the leaf list (skip \n markers) + let word-idx = 0 + let total-words = tri-leaves.filter(w => w != "\\n").len() + for (i, leaf) in tri-leaves.enumerate() { + if leaf == "\\n" { continue } + if _is-trace(leaf) { break } + word-idx = word-idx + 1 + } + // Use the triangle's "down" position as base (same y that works for arrows) + let down-key = ti.parent-anchor + "-down" + if down-key in name-to-pos { + let (down-x, down-y, down-loff) = name-to-pos.at(down-key) + let down-off = arrow-off-map.at(down-key, default: regular-off) + // Estimate x offset for the trace word within the text + let char-w = 0.22 * content-size + let tri-label = te.at("tri-label") + let tri-text-lines = tri-label.split(" \\n ") + let tri-text-lines = if tri-text-lines.len() == 1 { tri-label.split("\\n") } else { tri-text-lines } + let widest = tri-text-lines.fold(0, (acc, l) => calc.max(acc, _rendered-len(l.trim()))) + let half-w = calc.max(widest * char-w / 2, 0.3) + let vert-growth = direction == "down" or direction == "up" + let frac = (word-idx + 0.5) / total-words + // Shift from text anchor to text center: + // Triangle text is rendered with anchor "north"/"south" at tri-y + gdy*0.05. + // Regular nodes use anchor "center", so their position IS the center. + // To match, offset by tri-text-gap + text-half-height toward growth. + let tri-text-gap = 0.05 + let center-shift = tri-text-gap + _text-half-h * content-size + // sub[] extends the trace word visually to the right (in physical + // units), shifting its apparent center; compensate in canvas units. + let x-sub-correction = -0.08 / scale + let (trace-x, trace-y) = if vert-growth { + (down-x - half-w + frac * 2 * half-w + x-sub-correction, down-y + gdy * center-shift) + } else { + (down-x + gdx * center-shift, down-y - half-w + frac * 2 * half-w + x-sub-correction) + } + name-to-pos.insert(trace-anchor, (trace-x, trace-y, _loff)) + // Extra clearance: Typst's sub[] positions subscripts beyond the + // content bounding box that CeTZ measures for anchor placement. + // The overflow is constant in physical units, so we divide by + // scale to keep the physical gap consistent across scales. + let trace-off = regular-off + 0.20 / scale + arrow-off-map.insert(trace-anchor, trace-off) + label-hw-map.insert(trace-anchor, _rendered-len(ti.label) * 0.28 / 2 + 0.05) + } + } + } else { + // Non-triangle: trace is a regular leaf, use its position + if ti.leaf-anchor in name-to-pos { + name-to-pos.insert(trace-anchor, name-to-pos.at(ti.leaf-anchor)) + let trace-off = _text-half-h + 0.05 + arrow-off-map.insert(trace-anchor, trace-off) + label-hw-map.insert(trace-anchor, _label-half-w(ti.label)) + } + } + } + + // Resolve highlight names into a set of actual node anchors to box. + // Default: bare name → node itself (unlike arrows which default to "down"). + // "dp3-down" → box the leaf descendants of dp3. + let box-set = () + for h in highlight { + if h.ends-with("-down") { + let base = h.slice(0, h.len() - 5) + let target = _find-node(tree, base) + if target != none { + box-set = box-set + _collect-leaf-anchors(target) + } + } else if h.ends-with("up") { + let base = h.slice(0, h.len() - 2) + box-set.push(base) + } else { + box-set.push(h) + } + } + + // Build index lookup: anchor → subscript string. + // Default: bare name → leaf content ("down"), like arrows. + // "dp1up" → attach index to the DP node label itself. + let index-map = (:) + for entry in index { + for (k, v) in entry.pairs() { + if k.ends-with("up") { + index-map.insert(k.slice(0, k.len() - 2), v) + } else if k.ends-with("-down") { + let base = k.slice(0, k.len() - 5) + let target = _find-node(tree, base) + if target != none { + for leaf in _collect-leaf-anchors(target) { + index-map.insert(leaf, v) + } + } + } else { + // Bare name: default to "down" only if node has exactly one leaf descendant. + // For complex nodes (CP with many children), stay on the node itself. + let target = _find-node(tree, k) + if target != none and not target.is-leaf and target.children.len() > 0 { + let leaves = _collect-leaf-anchors(target) + if leaves.len() == 1 { + index-map.insert(leaves.at(0), v) + } else { + index-map.insert(k, v) + } + } else { + index-map.insert(k, v) + } + } + } + } + + // Build numbers lookup: anchor → circled digit + let numbers-map = (:) + let _circled = ("①", "②", "③", "④", "⑤", "⑥", "⑦", "⑧", "⑨", "⑩", + "⑪", "⑫", "⑬", "⑭", "⑮", "⑯", "⑰", "⑱", "⑲", "⑳") + // Normalize: single entry (("a", 1),) vs array of entries + let num-entries = if numbers.len() > 0 and type(numbers.at(0)) == str { + (numbers,) + } else { numbers } + for entry in num-entries { + let anchor = entry.at(0) + let n = entry.at(1) + let display = if n >= 1 and n <= 20 { _circled.at(n - 1) } else { "(" + str(n) + ")" } + numbers-map.insert(anchor, display) + } + + // Normalize arrows: + // - single dict: (from: "a", to: "b") → wrapped in array + // - single flat pair: ("a", "b") → wrapped in array + // - array of arrows: (("a", "b"), ...) → used as-is + let arrows = if type(arrows) == dictionary { + (arrows,) + } else if arrows.len() > 0 and type(arrows.at(0)) == str { + (arrows,) + } else { arrows } + + // Colors + let _norm = luma(15%) + + box(inset: 1.2em, baseline: 40%, { + cetz.canvas(length: scale-factor * 1cm, { + import cetz.draw: * + + let node-fsz = fsz * node-size // non-terminal node labels + let content-fsz = fsz * content-size // terminal/leaf content + let sw = 0.05em * scale-factor * line-width + let arrow-sw = 0.018 + let arrow-mark-scale = 0.5 + let ref-color = luma(55%) + let ref-fsz = fsz * 0.55 + let ref-items = () + + let draw-ref(pos, name, side) = { + if show-refs { + let (x, y) = pos + let off = 0.26 + let (rx, ry, anch) = if side == "below" { + (x, y - off, "north") + } else if side == "above" { + (x, y + off, "south") + } else if side == "before" { + (x - off, y, "east") + } else { + (x + off, y, "west") + } + content( + (rx, ry), + box( + fill: white, + stroke: 0.25pt + red, + inset: (x: 0.22em, y: 0.10em), + text(size: ref-fsz, fill: ref-color, font: "Courier New", weight: "bold", name), + ), + anchor: anch, + ) + } + } + + let ref-side-node = if direction == "up" { "above" } else if direction == "right" { + "before" + } else if direction == "left" { "after" } else { "below" } + let ref-side-down = if direction == "up" { "below" } else if direction == "right" { + "after" + } else if direction == "left" { "before" } else { "above" } + + // ── Draw edges ────────────────────────────────────────────────── + // Triangle nodes still get a line FROM their parent TO them; + // the triangle itself replaces the lines from the node to its children. + for e in nodes { + if e.par != none and (terminal-branch or not e.at("is-terminal", default: false)) { + let branch-key = e.at("par-anchor", default: "") + "|" + e.anchor + let col = branch-color-map.at(branch-key, default: _norm) + let is-dashed = ( + e.at("par-anchor", default: none) != none + and dash-branches.any(pair => { + pair.at(0) == e.par-anchor and pair.at(1) == e.anchor + }) + ) + let edge-stroke = if is-dashed { + (paint: col, thickness: sw, dash: "dashed") + } else { + (paint: col, thickness: sw) + } + let par-off = node-out.at(e.par-anchor, default: _loff) + let child-off = node-in.at(e.anchor, default: _loff) + line( + (e.par.at(0) + gdx * par-off, e.par.at(1) + gdy * par-off), + (e.x - gdx * child-off, e.y - gdy * child-off), + stroke: edge-stroke, + ) + } + } + + // ── Draw triangles ────────────────────────────────────────────── + for e in nodes { + if e.at("is-triangle", default: false) { + let col = _norm + let tri-label = e.at("tri-label") + // Triangle label position + let tlx = e.at("tri-x", default: e.x) + let tly = e.at("tri-y") + let vert-growth = direction == "down" or direction == "up" + // Compute half-spread for triangle base + let half-w = if vert-growth { + // Vertical trees: base width from text character width + let char-w = 0.22 * content-size + let tri-text-lines = tri-label.split(" \\n ") + let tri-text-lines = if tri-text-lines.len() == 1 { tri-label.split("\\n") } else { tri-text-lines } + let widest = tri-text-lines.fold(0, (acc, l) => calc.max(acc, _rendered-len(l.trim()))) + calc.max(widest * char-w / 2, 0.3) + } else { + // Horizontal trees: base height proportional to number of text lines + let tri-text-lines = tri-label.split(" \\n ") + let tri-text-lines = if tri-text-lines.len() == 1 { tri-label.split("\\n") } else { tri-text-lines } + let n-lines = tri-text-lines.len() + let line-h = 0.55 // approximate height per line in canvas units + calc.max(n-lines * line-h / 2, 0.4) + } + // Apex: node center offset toward children (same as branch offset) + let has-sub = e.anchor in annotation-map + let tri-off = node-out.at(e.anchor, default: _loff) + let apex = (e.x + gdx * tri-off, e.y + gdy * tri-off) + // Base endpoints (perpendicular to growth) + let (b1, b2) = if vert-growth { + ( + (tlx - half-w, tly - gdy * _loff), + (tlx + half-w, tly - gdy * _loff), + ) + } else { + // Extend base outward so the triangle depth matches the apex-to-text distance + let base-ext = _loff + ( + (tlx + gdx * base-ext, tly - half-w), + (tlx + gdx * base-ext, tly + half-w), + ) + } + line(apex, b1, stroke: (paint: col, thickness: sw)) + line(apex, b2, stroke: (paint: col, thickness: sw)) + line(b1, b2, stroke: (paint: col, thickness: sw)) + } + } + + // ── Draw node labels ──────────────────────────────────────────── + for e in nodes { + let col = if e.at("is-terminal", default: false) { + down-color-map.at(e.at("par-anchor", default: ""), default: _norm) + } else { + node-color-map.at(e.anchor, default: _norm) + } + let display = _display-label(e.label) + // Use smaller font for terminal content (leaves), full size for node labels. + // Also treat bracketed nodes with no uppercase letters as content-sized + // (e.g., [and] is a conjunction, not a syntactic category). + let _has-upper = _strip-fmt(e.label).match(regex("[A-Z]")) != none + let sz = if e.at("is-terminal", default: false) or (e.is-leaf and not _has-upper) { content-fsz } else { + node-fsz + } + // Append coreference subscript if present + let idx = index-map.at(e.anchor, default: none) + // Build base label with optional coreference index + let base-label = if idx != none { + let idx-style = if _is-bracketed-subscript(idx) { "normal" } else { "italic" } + [#text(size: sz, fill: col, display)#sub[#text( + font: font, + size: sz * 0.75, + style: idx-style, + fill: col, + idx, + )]] + } else { + text(size: sz, fill: col, display) + } + // Append is drawn separately below, so label-content is just the base + let label-content = base-label + let boxed = e.anchor in box-set + let label-body = if boxed { + box(stroke: 0.5pt + col, inset: 2pt, label-content) + } else { + label-content + } + + // CeTZ anchor for label alignment in horizontal trees + let label-anchor = if direction == "right" { "west" } else if direction == "left" { "east" } else { "center" } + + if e.at("is-triangle", default: false) { + // Draw the node label (e.g. "DP") + content((e.x, e.y), label-body, anchor: label-anchor) + if show-refs { ref-items.push((pos: (e.x, e.y), name: e.anchor, side: ref-side-node)) } + // Draw combined triangle label using _display-label for formatting + let tri-leaves = e.at("tri-leaves") + let tri-leaf-boxed = highlight.any(h => h == e.anchor + "-down") + let tri-col = down-color-map.at(e.anchor, default: _norm) + // Build rendered content for each leaf, split by \n markers + let lines = ((),) // array of arrays (one per line) + for leaf in tri-leaves { + if leaf == "\\n" { + lines.push(()) // start a new line + } else { + lines.at(-1).push(leaf) + } + } + let line-contents = lines.map(words => { + // Render each word, then join into a single text element + // to avoid paragraph-level line spacing from content joins + let rendered = words.map(w => _display-label(w)) + let joined = text(size: content-fsz, fill: tri-col, rendered.join([ ])) + if tri-leaf-boxed { box(stroke: 0.5pt + tri-col, inset: 2pt, joined) } else { joined } + }) + let tri-align = if direction == "right" { left } else if direction == "left" { right } else { center } + let tri-body = if line-contents.len() > 1 { + align(tri-align, stack(spacing: 0.35em, ..line-contents)) + } else { + line-contents.at(0) + } + let is-bottom-aligned = e.at("bottom-aligned", default: false) + let tri-text-gap = if is-bottom-aligned { 0 } else if is-horiz { 0.80 } else { 0.05 } + let tlx2 = e.at("tri-x", default: e.x) + let tly2 = e.at("tri-y") + // Bottom-aligned triangles should use the same directional anchoring + // as regular terminals so mixed triangle/non-triangle leaves keep the + // same shape-to-text gap. + let tri-anchor = if direction == "up" { "south" } else if ( + direction == "down" + ) { "north" } else if ( + direction == "right" + ) { "west" } else { "east" } + let tri-label-pos = (tlx2 + gdx * tri-text-gap, tly2 + gdy * tri-text-gap) + content(tri-label-pos, tri-body, anchor: tri-anchor) + if show-refs { ref-items.push((pos: tri-label-pos, name: e.anchor + "-down", side: ref-side-down)) } + } else { + // In horizontal trees, pull terminal leaves closer to their parent + let (lx, ly) = (e.x, e.y) + let cur-anchor = label-anchor + let is-terminal = e.at("is-terminal", default: false) + let is-term-aligned = e.at("is-terminal-aligned", default: false) + // Synchronize terminal nodes with triangles when terminal branches are drawn + if (is-terminal or is-term-aligned) and terminal-branch and not bottom { + let tri-text-gap = if is-horiz { 0.80 } else { 0.05 } + lx = lx + gdx * tri-text-gap + ly = ly + gdy * tri-text-gap + cur-anchor = if direction == "up" { "south" } else if direction == "down" { "north" } else if ( + direction == "right" + ) { "west" } else { "east" } + } else if not is-horiz and is-terminal { + // Vertical terminal content should grow away from the tree, not be + // centered on the terminal point. Center anchoring makes words with + // different glyph shapes look vertically misaligned even when their + // layout coordinates are identical. + cur-anchor = if direction == "up" { "south" } else { "north" } + } else if is-horiz and is-terminal and e.par != none { + let pull = 0.4 // fraction of distance to reclaim + lx = lx + (e.par.at(0) - lx) * pull + ly = ly + (e.par.at(1) - ly) * pull + } + content((lx, ly), label-body, anchor: cur-anchor) + if show-refs { ref-items.push((pos: (lx, ly), name: e.anchor, side: ref-side-node)) } + } + // Draw circled number to the left of the node + let num-display = numbers-map.at(e.anchor, default: none) + if num-display != none { + let label-hw = _label-half-w(e.label) + let num-body = text(size: sz * numbers-size, num-display) + let num-gap = 0.08 // small gap between number and label + content((e.x - label-hw - num-gap, e.y), num-body, anchor: "east") + } + // Draw append subscript as separate content (doesn't affect branch targeting) + let app = append-map.at(e.anchor, default: none) + if app != none { + let app-content = _format-inline(app) + let app-body = sub[#text(size: sz * 0.75, fill: col, app-content)] + // Estimate label half-width to position append at the right edge + let label-hw = _label-half-w(e.label) + // Position to the right of the label, anchored at west (left edge of append) + content((e.x + label-hw, e.y), app-body, anchor: "north-west") + } + // Draw annotation between node label and branches + let annotation-content = annotation-map.at(e.anchor, default: none) + if annotation-content != none and not e.at("is-terminal", default: false) { + let annotation-y-off = _loff + 0.10 + let annotation-body = { + set text(size: fsz * annotation-size, fill: col) + set par(leading: annotation-leading-val) + set align(center) + annotation-content + } + let annotation-anchor = if direction == "up" { "south" } else if direction == "right" { "west" } else if ( + direction == "left" + ) { "east" } else { "north" } + content( + (e.x + gdx * annotation-y-off, e.y + gdy * annotation-y-off), + annotation-body, + anchor: annotation-anchor, + ) + } + } + + // ── Draw arrows (only for vertical trees) ──────────────────────── + if not is-horiz { + let head-back = 0.12 + // Compute extremal position along growth axis for rectangular arrow clearance + // For "down": lowest y; for "up": highest y; for "right": rightmost x; for "left": leftmost x + let y-floor = { + let vals = nodes.map(e => { + let v = if direction == "right" or direction == "left" { e.x } else { e.y } + if e.at("is-triangle", default: false) { + let tv = if direction == "right" or direction == "left" { e.at("tri-x", default: e.x) } else { + e.at("tri-y") + } + if direction == "up" or direction == "left" { calc.max(v, tv) } else { calc.min(v, tv) } + } else { + v + } + }) + if direction == "up" or direction == "left" { + vals.fold(0.0, (a, b) => calc.max(a, b)) + } else { + vals.fold(0.0, (a, b) => calc.min(a, b)) + } + } + + let rect-count = 0 // counter for staggering rectangular arrows + for arrow in arrows { + let is-dict = type(arrow) == dictionary + let raw-from = if is-dict { arrow.at("from") } else { arrow.at(0) } + let raw-to = if is-dict { arrow.at("to") } else { arrow.at(1) } + let paint = if is-dict { arrow.at("color", default: _norm) } else if arrow.len() >= 3 { + arrow.at(2) + } else { _norm } + let bend-val = if is-dict { arrow.at("bend", default: none) } else { none } + let shift-val = if is-dict { arrow.at("shift", default: 0.0) } else { 0.0 } + let dash-style = if is-dict { arrow.at("dash", default: "dashed") } else { "dashed" } + let arrow-lw = if is-dict { arrow.at("line-width", default: 1.0) } else { 1.0 } + + // Check if this arrow should be delinked (match raw from or to name) + let is-delinked = delinks.any(d => d == raw-from or d == raw-to) + + // Parse degree suffix: "np1-300" → (base: "np1", degree: 300) + // Checks full name in name-to-pos first to avoid conflicts with + // anchors that naturally end in dash-digits (e.g. "n-31" from label "N 3"). + let _parse-deg(name) = { + if name in name-to-pos { return (name, none) } + let m = name.match(regex("^(.+)-(\d{1,3})$")) + if m != none { + let base = m.captures.at(0) + let deg = int(m.captures.at(1)) + if base in name-to-pos { return (base, deg) } + } + (name, none) + } + let (from-base, from-deg) = _parse-deg(raw-from) + let (to-base, to-deg) = _parse-deg(raw-to) + + // Resolve arrow names: + // - "vp3" or "vp3-down" → leaf content below node (default) + // - "vp3-top" → node label itself (arrow exits from side) + let _resolve(name) = { + if name.ends-with("-top") or name.ends-with("-down") { + name + } else { + let base = name + if base + "-down" in name-to-pos { base + "-down" } else { base } + } + } + // Check for -top suffix (node label as endpoint) + let from-is-top = from-base.ends-with("-top") + let to-is-top = to-base.ends-with("-top") + let from-name = _resolve(from-base) + let to-name = _resolve(to-base) + // For -top: strip suffix and use the node position directly + if from-is-top { + from-name = from-base.slice(0, from-base.len() - 4) + } + if to-is-top { + to-name = to-base.slice(0, to-base.len() - 4) + } + + if from-name in name-to-pos and to-name in name-to-pos { + let (fx, fy, f-loff) = name-to-pos.at(from-name) + let (tx, ty, t-loff) = name-to-pos.at(to-name) + + // Offset: -top endpoints exit from the side of the label, + // regular endpoints offset in growth direction (below text) + // Extra padding on "from" offset: the arrowhead mark at the "to" + // end visually shortens the line, creating implicit clearance there. + // The "from" end has no mark, so we add equivalent padding (~0.15). + let f-off = arrow-off-map.at(from-name, default: 0.45) + 0.15 + let t-off = arrow-off-map.at(to-name, default: 0.45) + // For degree: exit at specified angle on invisible ellipse around node + // Horizontal semi-axis = label half-width + gap (clears text edge) + // Vertical semi-axis = arrow offset (already includes gap) + // For -top: exit horizontally from label side + // Default: offset in growth direction (below text) + let _deg-h-pad = 0.25 // horizontal padding beyond text edge + if from-deg != none { + let rad = from-deg * calc.pi / 180 + let hw = label-hw-map.at(from-name, default: 0.35) + _deg-h-pad + fx = fx + hw * calc.cos(rad) + fy = fy + f-off * calc.sin(rad) + } else if from-is-top { + let side = if tx < fx { -1 } else { 1 } // left or right based on target + let hw = _label-half-w(nodes.filter(e => e.anchor == from-name).at(0, default: (label: "XX")).label) + fx = fx + side * hw + } else { + // Offset in growth direction (same as "to" endpoint) + fx = fx + gdx * f-off + fy = fy + gdy * f-off + } + if to-deg != none { + let rad = to-deg * calc.pi / 180 + let hw = label-hw-map.at(to-name, default: 0.35) + _deg-h-pad + tx = tx + hw * calc.cos(rad) + ty = ty + t-off * calc.sin(rad) + } else if to-is-top { + let side = if fx < tx { -1 } else { 1 } + let hw = _label-half-w(nodes.filter(e => e.anchor == to-name).at(0, default: (label: "XX")).label) + tx = tx + side * hw + } else { + tx = tx + gdx * t-off + ty = ty + gdy * t-off + } + let dx = tx - fx + let dy = ty - fy + let len = calc.sqrt(dx * dx + dy * dy) + if len == 0 { continue } + + let a-sw = arrow-sw * arrow-lw + let shaft-stroke = if dash-style == "solid" { + (paint: paint, thickness: a-sw) + } else { + (paint: paint, thickness: a-sw, dash: dash-style) + } + let head-stroke = (paint: paint, thickness: a-sw) + let mark-style = (end: ">", fill: paint, scale: arrow-mark-scale) + + // bend or shift present → force curved for this arrow + let is-curved = curved or bend-val != none or shift-val != 0.0 + if is-curved { + // Quadratic Bézier (parabolic arc) + // Auto-calculate bend if not specified: proportional to distance + let bend = if bend-val != none { bend-val } else { + calc.max(calc.abs(dx) * 0.3, calc.abs(dy) * 0.3, 0.6) + } + // Control point: centered perpendicular to growth, offset in growth direction + let cp = if direction == "right" or direction == "left" { + let mid-y = (fy + ty) / 2 + shift-val + let ext = if direction == "right" { + calc.max(fx, tx) + bend + } else { + calc.min(fx, tx) - bend + } + (ext, mid-y) + } else { + let mid-x = (fx + tx) / 2 + shift-val + let ext = if direction == "up" { + calc.max(fy, ty) + bend + } else { + calc.min(fy, ty) - bend + } + (mid-x, ext) + } + // Convert quadratic to cubic: C1 = P0 + 2/3*(cp - P0), C2 = P2 + 2/3*(cp - P2) + let c1 = (fx + 2.0 / 3.0 * (cp.at(0) - fx), fy + 2.0 / 3.0 * (cp.at(1) - fy)) + let c2 = (tx + 2.0 / 3.0 * (cp.at(0) - tx), ty + 2.0 / 3.0 * (cp.at(1) - ty)) + // Tangent at endpoint (cubic: B'(1) = 3(P3 - C2)) + let tang-x = tx - c2.at(0) + let tang-y = ty - c2.at(1) + let ed = calc.sqrt(tang-x * tang-x + tang-y * tang-y) + let (tang-x, tang-y) = if ed > 0 { (tang-x / ed, tang-y / ed) } else { (dx / len, dy / len) } + let hb = calc.min(head-back, len * 0.4) + let hax = tx - tang-x * hb + let hay = ty - tang-y * hb + bezier((fx, fy), (hax, hay), c1, c2, stroke: shaft-stroke) + let tiny = 0.01 + line((hax - tang-x * tiny, hay - tang-y * tiny), (tx, ty), stroke: head-stroke, mark: mark-style) + if is-delinked { + // Cubic midpoint at t=0.5, using actual drawn endpoint (hax, hay) + let mx = 0.125 * fx + 3 * 0.125 * c1.at(0) + 3 * 0.125 * c2.at(0) + 0.125 * hax + let my = 0.125 * fy + 3 * 0.125 * c1.at(1) + 3 * 0.125 * c2.at(1) + 0.125 * hay + // Cubic tangent at t=0.5 + let dtx = 3 * (0.25 * (c1.at(0) - fx) + 0.5 * (c2.at(0) - c1.at(0)) + 0.25 * (hax - c2.at(0))) + let dty = 3 * (0.25 * (c1.at(1) - fy) + 0.5 * (c2.at(1) - c1.at(1)) + 0.25 * (hay - c2.at(1))) + _draw-delink(mx, my, dtx, dty, (paint: paint, thickness: sw)) + } + } else { + // Rectangular (right-angle) path along growth axis + // Base floor: same for all arrows (endpoints drop to here) + let base-clearance = 1.0 + let stagger = rect-count * 0.5 + rect-count = rect-count + 1 + let sign = if direction == "up" or direction == "left" { 1 } else { -1 } + let base-floor = y-floor + sign * base-clearance + let bar-val = base-floor + sign * stagger + let hb = head-back + if direction == "right" or direction == "left" { + // Horizontal growth: vertical bar + line((fx, fy), (bar-val, fy), stroke: shaft-stroke) + line((bar-val, fy), (bar-val, ty), stroke: shaft-stroke) + line((bar-val, ty), (tx + gdx * hb, ty), stroke: shaft-stroke) + let tiny = 0.01 + line((tx + gdx * (hb + tiny), ty), (tx, ty), stroke: head-stroke, mark: mark-style) + if is-delinked { + let mid-y = (fy + ty) / 2 + _draw-delink(bar-val, mid-y, 0.0, 1.0, (paint: paint, thickness: sw)) + } + } else { + // Vertical growth: horizontal bar + line((fx, fy), (fx, bar-val), stroke: shaft-stroke) + line((fx, bar-val), (tx, bar-val), stroke: shaft-stroke) + line((tx, bar-val), (tx, ty + gdy * hb), stroke: shaft-stroke) + let tiny = 0.01 + line((tx, ty + gdy * (hb + tiny)), (tx, ty), stroke: head-stroke, mark: mark-style) + if is-delinked { + let mid-x = (fx + tx) / 2 + _draw-delink(mid-x, bar-val, 1.0, 0.0, (paint: paint, thickness: sw)) + } + } + } + } + } + } // end if not is-horiz (arrows) + + // ── Draw dominance lines ────────────────────────────────────── + // Normalize: single entry → array of entries + let dom-entries = if dominance == () { + () + } else if type(dominance.at(0, default: none)) != array and type(dominance.at(0, default: none)) != dictionary { + // Single entry like ("np4", "np1") — wrap it + if type(dominance) == dictionary { (dominance,) } else { (dominance,) } + } else { + dominance + } + for entry in dom-entries { + let is-dict = type(entry) == dictionary + let raw-from = if is-dict { entry.at("from") } else { entry.at(0) } + let raw-to = if is-dict { entry.at("to") } else { entry.at(1) } + let ctrl-val = if is-dict { entry.at("ctrl", default: none) } else { none } + let dom-color = if is-dict { entry.at("color", default: _norm) } else { _norm } + let dom-dash = if is-dict { entry.at("dash", default: "solid") } else { "solid" } + + if raw-from in name-to-pos and raw-to in name-to-pos { + let (fx, fy, _) = name-to-pos.at(raw-from) + let (tx, ty, _) = name-to-pos.at(raw-to) + + // Depart south (node-out), arrive north (node-in) — matching branches + let f-out = node-out.at(raw-from, default: _loff) + let t-in = node-in.at(raw-to, default: _loff) + fx = fx + gdx * f-out + fy = fy + gdy * f-out + tx = tx - gdx * t-in + ty = ty - gdy * t-in + + let dx = tx - fx + let dy = ty - fy + let len = calc.sqrt(dx * dx + dy * dy) + if len == 0 { continue } + + let dom-stroke = (paint: dom-color, thickness: sw, dash: dom-dash) + + // Default S-curve: depart in growth direction, arrive against it + // ctrl adjusts (adds to) these defaults + let v-reach = calc.abs(dy) + let h-reach = calc.abs(dx) + let lift1 = calc.max(v-reach * 0.50, h-reach * 0.20, 0.50) + let dip2 = -calc.max(v-reach * 0.25, 0.40) + // Apply growth direction sign + let (default-c1y, default-c2y) = if direction == "up" { + (-lift1, -dip2) + } else { + (lift1, dip2) + } + let adj0 = if ctrl-val != none { ctrl-val.at(0) } else { 0 } + let adj1 = if ctrl-val != none { ctrl-val.at(1) } else { 0 } + let ctrl1 = (fx + dx * 0.30, fy + default-c1y + adj0) + let ctrl2 = (tx - dx * 0.30, ty + default-c2y + adj1) + bezier((fx, fy), (tx, ty), ctrl1, ctrl2, stroke: dom-stroke) + } + } + + // ── Draw debug references last so they stay in the foreground ─── + for ref-item in ref-items { + draw-ref(ref-item.pos, ref-item.name, ref-item.side) + } + }) + }) + } + + if font != none { + set text(font: font) + _body + } else { + _body + } +} + +// ── Multi-tree group ────────────────────────────────────────────────────────── +// Renders multiple syntax trees in a single canvas with cross-tree +// equivalence lines. Follows the geom-group() pattern from phonokit. +// +// Each positional argument is a spec dict with the same keys as tree(): +// (input: "[S [NP ...] [VP ...]]", direction: "down", spread: 1.0, ...) +// +// Node anchors are suffixed with tree index: "np1-1" = first NP in tree 1. +// The "-down" variant goes before the index: "np1-down-1". +// +// Equivalence entries: ("np1-1", "np1-2") or (from: "np1-1", to: "np1-2", ...) + +#let garden( + ..trees, + equivalence: (), + gap: 2.0, + scale: 1.0, + line-width: 1.0, + font: none, +) = { + let specs = trees.pos() + let scale-factor = scale + + let _body = context { + let fsz = 12 * scale-factor * 1pt + let _norm = luma(15%) + + // ── Per-tree computation ────────────────────────────────────────────── + let all-td = () // array of tree-data dicts + + for (idx, spec) in specs.enumerate() { + let tidx = idx + 1 + let input = spec.at("input") + let direction = spec.at("direction", default: "down") + let spread-val = spec.at("spread", default: 1.0) + let drop-val = spec.at("drop", default: 1.0) + let content-size = spec.at("content-size", default: 0.8) + let node-size = spec.at("node-size", default: 1.0) + let triangle-arg = spec.at("triangle", default: ()) + let terminal-branch = spec.at("terminal-branch", default: false) + let bottom = spec.at("bottom", default: true) + + let is-horiz = direction == "right" or direction == "left" + let leaf-w = spread-val + let v-gap = if is-horiz { 1.2 * drop-val * 1.05 } else { 1.2 * drop-val } + + // Parse + let tokens = _tokenize(input) + let (tree, _, _) = _parse(tokens, 0, (:)) + + // Auto-triangle + let tri-set = triangle-arg + let _auto-tri(node) = { + let result = () + if not node.is-leaf and node.children.len() > 0 { + let stripped = _strip-fmt(node.label) + let is-phrase = stripped.len() > 1 and lower(stripped).ends-with("p") + let all-leaves = node.children.all(c => c.is-leaf) + if is-phrase and all-leaves { result.push(node.anchor) } + for child in node.children { result = result + _auto-tri(child) } + } + result + } + let tri-set = tri-set + _auto-tri(tree) + + // Layout + let nodes = _syntax-layout( + tree, + 0.0, + 0.0, + none, + none, + leaf-w, + v-gap, + tri-set, + is-horiz: is-horiz, + append-map: (:), + content-size: content-size, + level: 0, + drop-map: (:), + node-spacing-map: (:), + sister-spacing-map: (:), + sister-node-map: (:), + annotation-map: (:), + annotation-leaf-widths: (:), + ) + + // Bottom-align + if bottom { + terminal-branch = true + let min-y = nodes.fold(0.0, (acc, e) => if e.is-leaf { calc.min(acc, e.y) } else { acc }) + let min-y = nodes.fold(min-y, (acc, e) => { + if e.at("is-triangle", default: false) { calc.min(acc, e.at("tri-y")) } else { acc } + }) + nodes = nodes.map(e => { + if e.is-leaf { (..e, y: min-y) } else if e.at("is-triangle", default: false) { + (..e, tri-y: min-y, bottom-aligned: true) + } else { e } + }) + } + + // Terminal pull (reduce gap when no branch line drawn) + if not terminal-branch { + nodes = nodes.map(e => { + if e.at("is-terminal", default: false) and e.par != none { + let pull = if is-horiz { 0.2 } else { 0.5 } + (..e, y: e.y + (e.par.at(1) - e.y) * pull) + } else { e } + }) + } + + // Direction transform + let _tx(x, y) = { + if direction == "up" { (x, -y) } else if direction == "right" { (-y, -x) } else if direction == "left" { + (y, -x) + } else { (x, y) } + } + let (gdx, gdy) = if direction == "up" { (0, 1) } else if direction == "right" { (1, 0) } else if ( + direction == "left" + ) { (-1, 0) } else { (0, -1) } + + // Node out/in offsets for branch connections + let node-out = (:) + let node-in = (:) + for e in nodes { + if is-horiz { + let full-w = _label-half-w(e.label) * 2 + let is-tri = e.at("is-triangle", default: false) + node-out.insert(e.anchor, if is-tri { full-w + 0.25 } else { full-w }) + node-in.insert(e.anchor, 0.05) + } else { + node-out.insert(e.anchor, _loff) + node-in.insert(e.anchor, _loff) + } + } + + // Transform coordinates + nodes = nodes.map(e => { + let (nx, ny) = _tx(e.x, e.y) + let new-par = if e.par != none { + let (px, py) = _tx(e.par.at(0), e.par.at(1)) + (px, py) + } else { none } + let result = (..e, x: nx, y: ny, par: new-par) + if e.at("is-triangle", default: false) { + let (tri-nx, tri-ny) = _tx(e.x, e.at("tri-y")) + (..result, tri-y: tri-ny, tri-x: tri-nx) + } else { result } + }) + + // Build name-to-pos, arrow-off-map, label-hw-map with tree-index suffix + let _text-half-h = 0.2 + let _arrow-gap = 0.25 + let regular-off = _text-half-h + _arrow-gap + let ntp = (:) + let aom = (:) + let lhw = (:) + let sfx = "-" + str(tidx) + for e in nodes { + ntp.insert(e.anchor + sfx, (e.x, e.y, _loff)) + aom.insert(e.anchor + sfx, regular-off) + lhw.insert(e.anchor + sfx, _rendered-len(e.label) * 0.28 / 2 + 0.05) + } + + // Build -down entries (leaf content positions) + let _build-down-g(node, ntp, aom, lhw) = { + if node.is-leaf or node.children.len() == 0 { + ntp.insert(node.anchor + "-down" + sfx, ntp.at(node.anchor + sfx)) + aom.insert(node.anchor + "-down" + sfx, regular-off) + lhw.insert(node.anchor + "-down" + sfx, _rendered-len(node.label) * 0.28 / 2 + 0.05) + return (ntp, aom, lhw) + } + let tri-entry = nodes.filter(e => e.anchor == node.anchor and e.at("is-triangle", default: false)) + if tri-entry.len() > 0 { + let te = tri-entry.at(0) + ntp.insert(node.anchor + "-down" + sfx, (te.x, te.at("tri-y"), _loff)) + let tri-off = 0.05 + _text-half-h * 2 + _arrow-gap + aom.insert(node.anchor + "-down" + sfx, tri-off) + let tri-label = te.at("tri-label") + let tri-lines = tri-label.split(" \\n ") + let tri-lines = if tri-lines.len() == 1 { tri-label.split("\\n") } else { tri-lines } + let widest = tri-lines.fold(0, (acc, l) => calc.max(acc, _rendered-len(l.trim()))) + let char-w = 0.22 * content-size + lhw.insert(node.anchor + "-down" + sfx, calc.max(widest * char-w / 2, 0.3)) + return (ntp, aom, lhw) + } + let leaf-anchors = _collect-leaf-anchors(node) + let found = leaf-anchors.map(a => a + sfx).filter(a => a in ntp) + if found.len() > 0 { + let avg-x = found.map(a => ntp.at(a).at(0)).fold(0.0, (a, b) => a + b) / found.len() + let ys = found.map(a => ntp.at(a).at(1)) + let leaf-y = if gdy < 0 { calc.min(..ys) } else { calc.max(..ys) } + ntp.insert(node.anchor + "-down" + sfx, (avg-x, leaf-y, _loff)) + aom.insert(node.anchor + "-down" + sfx, regular-off) + let xs = found.map(a => ntp.at(a).at(0)) + let span-hw = if xs.len() > 1 { + (calc.max(..xs) - calc.min(..xs)) / 2 + 0.3 + } else { + ( + _rendered-len( + nodes.filter(e => e.anchor + sfx == found.at(0)).at(0, default: (label: "XX")).label, + ) + * 0.28 + / 2 + + 0.05 + ) + } + lhw.insert(node.anchor + "-down" + sfx, span-hw) + } + for child in node.children { + (ntp, aom, lhw) = _build-down-g(child, ntp, aom, lhw) + } + (ntp, aom, lhw) + } + (ntp, aom, lhw) = _build-down-g(tree, ntp, aom, lhw) + + // Compute tree vertical extents + let y-min = nodes.fold(0.0, (acc, e) => { + let y = e.y + if e.at("is-triangle", default: false) { calc.min(acc, y, e.at("tri-y")) } else { calc.min(acc, y) } + }) + let y-max = nodes.fold(0.0, (acc, e) => { + let y = e.y + if e.at("is-triangle", default: false) { calc.max(acc, y, e.at("tri-y")) } else { calc.max(acc, y) } + }) + + all-td.push(( + nodes: nodes, + ntp: ntp, + aom: aom, + lhw: lhw, + tidx: tidx, + sfx: sfx, + direction: direction, + gdx: gdx, + gdy: gdy, + is-horiz: is-horiz, + node-out: node-out, + node-in: node-in, + tri-set: tri-set, + content-size: content-size, + node-size: node-size, + terminal-branch: terminal-branch, + y-min: y-min, + y-max: y-max, + )) + } + + // ── Stack trees vertically ──────────────────────────────────────────── + let y-offsets = () + for (i, td) in all-td.enumerate() { + if i == 0 { + y-offsets.push(0.0) + } else { + let prev = all-td.at(i - 1) + let prev-bottom = prev.y-min + y-offsets.at(i - 1) + y-offsets.push(prev-bottom - gap - td.y-max) + } + } + + // Apply y-offsets to nodes and merge name-to-pos + let shared-ntp = (:) + let shared-aom = (:) + let shared-lhw = (:) + for (i, td) in all-td.enumerate() { + let y-off = y-offsets.at(i) + all-td.at(i).nodes = td.nodes.map(e => { + let new-par = if e.par != none { (e.par.at(0), e.par.at(1) + y-off) } else { none } + let result = (..e, y: e.y + y-off, par: new-par) + if e.at("is-triangle", default: false) { + (..result, tri-y: e.at("tri-y") + y-off) + } else { result } + }) + for (key, val) in td.ntp.pairs() { + shared-ntp.insert(key, (val.at(0), val.at(1) + y-off, val.at(2))) + } + for (key, val) in td.aom.pairs() { shared-aom.insert(key, val) } + for (key, val) in td.lhw.pairs() { shared-lhw.insert(key, val) } + } + + // ── Render ──────────────────────────────────────────────────────────── + let sw = 0.05em * scale-factor * line-width + + box(inset: 1.2em, baseline: 40%, { + cetz.canvas(length: scale-factor * 1cm, { + import cetz.draw: * + + // Draw each tree + for td in all-td { + let nodes = td.nodes + let gdx = td.gdx + let gdy = td.gdy + let direction = td.direction + let is-horiz = td.is-horiz + let node-fsz = fsz * td.node-size + let content-fsz = fsz * td.content-size + + // ── Edges ── + for e in nodes { + if e.par != none and (td.terminal-branch or not e.at("is-terminal", default: false)) { + let par-off = td.node-out.at(e.at("par-anchor", default: ""), default: _loff) + let child-off = td.node-in.at(e.anchor, default: _loff) + line( + (e.par.at(0) + gdx * par-off, e.par.at(1) + gdy * par-off), + (e.x - gdx * child-off, e.y - gdy * child-off), + stroke: (paint: _norm, thickness: sw), + ) + } + } + + // ── Triangles ── + for e in nodes { + if e.at("is-triangle", default: false) { + let tri-label = e.at("tri-label") + let tlx = e.at("tri-x", default: e.x) + let tly = e.at("tri-y") + let vert = direction == "down" or direction == "up" + let half-w = if vert { + let char-w = 0.22 * td.content-size + let tl = tri-label.split(" \\n ") + let tl = if tl.len() == 1 { tri-label.split("\\n") } else { tl } + calc.max(tl.fold(0, (acc, l) => calc.max(acc, _rendered-len(l.trim()))) * char-w / 2, 0.3) + } else { + let tl = tri-label.split(" \\n ") + let tl = if tl.len() == 1 { tri-label.split("\\n") } else { tl } + calc.max(tl.len() * 0.55 / 2, 0.4) + } + let tri-off = td.node-out.at(e.anchor, default: _loff) + let apex = (e.x + gdx * tri-off, e.y + gdy * tri-off) + let (b1, b2) = if vert { + ((tlx - half-w, tly - gdy * _loff), (tlx + half-w, tly - gdy * _loff)) + } else { + let bx = _loff + ((tlx + gdx * bx, tly - half-w), (tlx + gdx * bx, tly + half-w)) + } + line(apex, b1, stroke: (paint: _norm, thickness: sw)) + line(apex, b2, stroke: (paint: _norm, thickness: sw)) + line(b1, b2, stroke: (paint: _norm, thickness: sw)) + } + } + + // ── Labels ── + for e in nodes { + let display = _display-label(e.label) + let _has-upper = _strip-fmt(e.label).match(regex("[A-Z]")) != none + let sz = if e.at("is-terminal", default: false) or (e.is-leaf and not _has-upper) { + content-fsz + } else { node-fsz } + let label-body = text(size: sz, fill: _norm, display) + let label-anchor = if direction == "right" { "west" } else if direction == "left" { "east" } else { + "center" + } + + if e.at("is-triangle", default: false) { + content((e.x, e.y), label-body, anchor: label-anchor) + let tri-leaves = e.at("tri-leaves") + let lines = ((),) + for leaf in tri-leaves { + if leaf == "\\n" { lines.push(()) } else { lines.at(-1).push(leaf) } + } + let line-contents = lines.map(words => { + text(size: content-fsz, fill: _norm, words.map(w => _display-label(w)).join([ ])) + }) + let tri-align = if direction == "right" { left } else if direction == "left" { right } else { center } + let tri-body = if line-contents.len() > 1 { + align(tri-align, stack(spacing: 0.35em, ..line-contents)) + } else { line-contents.at(0) } + let is-bottom-aligned = e.at("bottom-aligned", default: false) + let tri-text-gap = if is-bottom-aligned { 0 } else if is-horiz { 0.80 } else { 0.05 } + let tlx2 = e.at("tri-x", default: e.x) + let tly2 = e.at("tri-y") + let tri-anchor = if direction == "up" { "south" } else if ( + direction == "down" + ) { "north" } else if direction == "right" { "west" } else { "east" } + content((tlx2 + gdx * tri-text-gap, tly2 + gdy * tri-text-gap), tri-body, anchor: tri-anchor) + } else { + let (lx, ly) = (e.x, e.y) + let cur-anchor = label-anchor + if is-horiz and e.at("is-terminal", default: false) and e.par != none { + lx = lx + (e.par.at(0) - lx) * 0.4 + ly = ly + (e.par.at(1) - ly) * 0.4 + } else if not is-horiz and e.at("is-terminal", default: false) { + cur-anchor = if direction == "up" { "south" } else { "north" } + } + content((lx, ly), label-body, anchor: cur-anchor) + } + } + } + + // ── Equivalence lines ────────────────────────────────────────────── + let eq-entries = if equivalence.len() > 0 and type(equivalence.at(0)) == str { + (equivalence,) + } else { equivalence } + + for eq in eq-entries { + let is-dict = type(eq) == dictionary + let raw-from = if is-dict { eq.at("from") } else { eq.at(0) } + let raw-to = if is-dict { eq.at("to") } else { eq.at(1) } + let eq-color = if is-dict { eq.at("color", default: _norm) } else { _norm } + let eq-dash = if is-dict { eq.at("dash", default: "dashed") } else { "dashed" } + let eq-lw = if is-dict { eq.at("line-width", default: 1.0) } else { 1.0 } + + // Resolve: bare "np1-1" → "np1-down-1" if available (default to leaf text). + // "np1-1-top" → "np1-1" (node label position, stripping -top). + let _resolve-eq(name) = { + // -top: strip suffix, target node label + if name.ends-with("-top") { + return name.slice(0, name.len() - 4) + } + // Already has -down: use as-is + if name.contains("-down") { return name } + // Try resolving to -down (leaf content) + let m = name.match(regex("^(.+)-(\d+)$")) + if m != none { + let base = m.captures.at(0) + let tidx-str = m.captures.at(1) + let down-key = base + "-down-" + tidx-str + if down-key in shared-ntp { return down-key } + } + name + } + let from-name = _resolve-eq(raw-from) + let to-name = _resolve-eq(raw-to) + + if from-name in shared-ntp and to-name in shared-ntp { + let (fx, fy, _) = shared-ntp.at(from-name) + let (tx, ty, _) = shared-ntp.at(to-name) + + // Offset endpoints in their respective tree's growth direction + let _get-tidx(name) = { + let m = name.match(regex("-(\d+)$")) + if m != none { int(m.captures.at(0)) } else { 1 } + } + let from-td = all-td.at(_get-tidx(from-name) - 1) + let to-td = all-td.at(_get-tidx(to-name) - 1) + // Uniform offset for equivalence lines so endpoints align vertically + let eq-off = 0.45 + let f-off = eq-off + let t-off = eq-off + fx = fx + from-td.gdx * f-off + fy = fy + from-td.gdy * f-off + tx = tx + to-td.gdx * t-off + ty = ty + to-td.gdy * t-off + + let a-sw = 0.018 * eq-lw + let eq-stroke = if eq-dash == "solid" { + (paint: eq-color, thickness: a-sw) + } else { + (paint: eq-color, thickness: a-sw, dash: eq-dash) + } + line((fx, fy), (tx, ty), stroke: eq-stroke) + } + } + }) + }) + } + + if font != none { + set text(font: font) + _body + } else { + _body + } +} diff --git a/packages/preview/synkit/0.0.41/typst.toml b/packages/preview/synkit/0.0.41/typst.toml new file mode 100644 index 0000000000..10a350005a --- /dev/null +++ b/packages/preview/synkit/0.0.41/typst.toml @@ -0,0 +1,13 @@ +[package] +categories = ["utility", "text", "visualization"] +disciplines = ["linguistics"] +name = "synkit" +version = "0.0.41" +exclude = ["gallery/"] +keywords = ["linguistics", "syntax", "semantics", "morphology"] +entrypoint = "lib.typ" +authors = ["Guilherme D. Garcia "] +license = "MIT" +description = "A toolkit to create syntactic representations" +repository = "https://github.com/guilhermegarcia/synkit" +homepage = "https://gdgarcia.ca/synkit"